├── .codecov.yml ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── src ├── index.js └── options.json ├── test ├── fixtures │ ├── file-big.json │ ├── file-invalid.json │ ├── file.json │ ├── fixture-big.js │ ├── fixture-invalid.js │ ├── fixture.js │ └── x-custom-loader │ │ └── index.js ├── helpers │ └── compiler.js ├── limit-option.test.js ├── loader-big.test.js ├── loader-invalid.test.js └── loader.test.js └── yarn.lock /.codecov.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | notify: 3 | require_ci_to_pass: yes 4 | 5 | coverage: 6 | precision: 2 7 | round: down 8 | range: '70...100' 9 | 10 | status: 11 | project: yes 12 | patch: yes 13 | changes: no 14 | 15 | parsers: 16 | gcov: 17 | branch_detection: 18 | conditional: yes 19 | loop: yes 20 | method: no 21 | macro: no 22 | 23 | comment: 24 | layout: 'header, diff' 25 | behavior: default 26 | require_changes: no 27 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v3 10 | - uses: actions/setup-node@v1 11 | with: 12 | node-version: 12 13 | 14 | - name: install 15 | run: yarn --frozen-lockfile --non-interactive 16 | 17 | - name: lint 18 | run: yarn lint 19 | 20 | - name: test 21 | run: yarn test:coverage 22 | 23 | - name: codecov 24 | run: yarn codecov -t ${{ secrets.CODECOV_TOKEN }} 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | logs 3 | *.log 4 | npm-debug.log* 5 | .eslintcache 6 | /coverage 7 | /reports 8 | /node_modules 9 | .DS_Store 10 | Thumbs.db 11 | .idea 12 | *.sublime-project 13 | *.sublime-workspace 14 | *.iml 15 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | /dist 3 | /node_modules 4 | /test/fixtures 5 | CHANGELOG.md 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "semi": false, 5 | "overrides": [ 6 | { 7 | "files": ".prettierrc", 8 | "options": { "parser": "json" } 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.1.0 - [2021-02-25] 4 | 5 | - support webpack5 ([#35](https://github.com/justjavac/json-perf-loader/pull/35)) 6 | 7 | ## 1.0.8 - [2021-02-19] 8 | 9 | - Handle escaped double quotes in JSON ([#33](https://github.com/justjavac/json-perf-loader/pull/33)) 10 | 11 | ## 1.0.7 - [2020-11-02] 12 | 13 | - Upgrade schema-utils, and handle single quotes in large JSON files ([#29](https://github.com/justjavac/json-perf-loader/pull/29)) 14 | 15 | ## 1.0.6 - [2020-09-06] 16 | 17 | - yarn upgrade ([#26](https://github.com/justjavac/json-perf-loader/pull/26)) 18 | 19 | ## 1.0.5 - [2020-07-20] 20 | 21 | - Bump lodash from 4.17.15 to 4.17.19 ([#24](https://github.com/justjavac/json-perf-loader/pull/24)) 22 | 23 | ## 1.0.4 - [2020-07-07] 24 | 25 | - upgrade pkgs ([#22](https://github.com/justjavac/json-perf-loader/pull/22)) 26 | - use github actions 27 | 28 | ## 1.0.3 - [2019-09-10] 29 | 30 | - Upgrade schema-utils to 2.x [#11](https://github.com/justjavac/json-perf-loader/pull/11) 31 | - 2.x drop support for Node.js < 8.9.0 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 justjavac 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # json-perf-loader 2 | 3 | ![ci](https://github.com/justjavac/json-perf-loader/workflows/ci/badge.svg?branch=master) 4 | [![cover][cover]][cover-url] 5 | [![npm][npm]][npm-url] 6 | [![download][download]][download-url] 7 | 8 | A loader for webpack to load JSON with performance advice. 9 | 10 | ## The cost of parsing JSON 11 | 12 | See [The cost of parsing JSON - V8](https://v8.dev/blog/cost-of-javascript-2019#json) 13 | 14 | > Because the JSON grammar is much simpler than JavaScript’s grammar, JSON can be parsed more efficiently than JavaScript. 15 | > This knowledge can be applied to improve start-up performance for web apps that ship large JSON-like configuration object literals (such as inline Redux stores). 16 | > Instead of inlining the data as a JavaScript object literal. 17 | > 18 | > As long as the JSON string is only evaluated once, the `JSON.parse` approach is much faster compared to the JavaScript object literal, especially for cold loads. 19 | > A good rule of thumb is to apply this technique for objects of **10 kB or larger** — but as always with performance advice, measure the actual impact before making any changes. 20 | 21 | ## Getting Started 22 | 23 | To begin, you'll need to install `json-perf-loader`: 24 | 25 | ```shell 26 | $ npm install json-perf-loader --save-dev 27 | ``` 28 | 29 | `json-perf-loader` works like 30 | [`json-loader`](https://github.com/justjavac/json-loader), but much faster. 31 | 32 | **index.js** 33 | 34 | ```js 35 | import json from './file.json' 36 | ``` 37 | 38 | **webpack.config.js** 39 | 40 | ```js 41 | module.exports = { 42 | module: { 43 | rules: [ 44 | { 45 | test: /\.json$/i, 46 | type: 'javascript/auto', 47 | use: [ 48 | { 49 | loader: 'json-perf-loader', 50 | options: { 51 | limit: 4096, 52 | }, 53 | }, 54 | ], 55 | }, 56 | ], 57 | }, 58 | } 59 | ``` 60 | 61 | And run `webpack` via your preferred method. 62 | 63 | **Note: `type: "javascript/auto"` is require**. See https://webpack.js.org/configuration/module/#ruletype 64 | 65 | > `Rule.type` sets the type for a matching module. 66 | > This prevents defaultRules and their default importing behaviors from occurring. 67 | > For example, if you want to load a `.json` file through a custom loader, you'd need to set the `type` to `javascript/auto` to bypass webpack's built-in json importing. 68 | 69 | ## Options 70 | 71 | ### `limit` 72 | 73 | Type: `Number|String` 74 | Default: `1024 * 10` 75 | 76 | The limit can be specified via loader options and defaults to `1024 * 10`. This is the recommended value for the V8 team. 77 | 78 | #### `Number` 79 | 80 | A `Number` specifying the maximum size of a file in bytes. If the file size is 81 | **equal** or **greater** than the limit `JSON.parse` will be used. 82 | 83 | **webpack.config.js** 84 | 85 | ```js 86 | module.exports = { 87 | module: { 88 | rules: [ 89 | { 90 | test: /\.json$/i, 91 | type: 'javascript/auto', 92 | use: [ 93 | { 94 | loader: 'json-perf-loader', 95 | options: { 96 | limit: 10, 97 | }, 98 | }, 99 | ], 100 | }, 101 | ], 102 | }, 103 | } 104 | ``` 105 | 106 | ## License 107 | 108 | [MIT](./LICENSE) 109 | 110 | [npm]: https://img.shields.io/npm/v/json-perf-loader.svg 111 | [npm-url]: https://npmjs.com/package/json-perf-loader 112 | [download]: https://img.shields.io/npm/dm/json-perf-loader.svg?style=flat 113 | [download-url]: https://npmcharts.com/compare/json-perf-loader?minimal=true 114 | [tests]: https://dev.azure.com/justjavac/json-perf-loader/_apis/build/status/justjavac.json-perf-loader?branchName=master 115 | [tests-url]: https://dev.azure.com/justjavac/json-perf-loader/_build/latest?definitionId=2&branchName=master 116 | [cover]: https://codecov.io/gh/justjavac/json-perf-loader/branch/master/graph/badge.svg 117 | [cover-url]: https://codecov.io/gh/justjavac/json-perf-loader 118 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "json-perf-loader", 3 | "version": "1.1.0", 4 | "description": "A loader for webpack to load JSON with performance advice", 5 | "license": "MIT", 6 | "repository": "justjavac/json-perf-loader", 7 | "author": "justjavac", 8 | "homepage": "https://github.com/justjavac/json-perf-loader", 9 | "bugs": "https://github.com/justjavac/json-perf-loader/issues", 10 | "main": "src/index.js", 11 | "engines": { 12 | "node": "> 8.9.0" 13 | }, 14 | "scripts": { 15 | "clean": "rimraf -rf coverage", 16 | "lint": "prettier \"{**/*,*}.{js,json,md,yml}\" --list-different", 17 | "format": "prettier \"{**/*,*}.{js,json,md,yml}\" --write", 18 | "test": "cross-env NODE_ENV=test jest", 19 | "test:coverage": "cross-env NODE_ENV=test jest --collectCoverageFrom=\"src/**/*.js\" --coverage" 20 | }, 21 | "husky": { 22 | "hooks": { 23 | "pre-commit": "lint-staged" 24 | } 25 | }, 26 | "lint-staged": { 27 | "**/*.{js,json,md,yml}": [ 28 | "prettier --write", 29 | "git add" 30 | ] 31 | }, 32 | "files": [ 33 | "src" 34 | ], 35 | "peerDependencies": { 36 | "webpack": ">=4.0.0" 37 | }, 38 | "dependencies": { 39 | "loader-utils": "^2.0.0", 40 | "schema-utils": "^3.0.0" 41 | }, 42 | "devDependencies": { 43 | "codecov": "^3.8.3", 44 | "cross-env": "^7.0.2", 45 | "husky": "^4.2.5", 46 | "jest": "^27.5.1", 47 | "lint-staged": "^10.3.0", 48 | "memory-fs": "^0.5.0", 49 | "prettier": "^2.6.2", 50 | "rimraf": "^3.0.2", 51 | "webpack4": "npm:webpack@4", 52 | "webpack5": "npm:webpack@5" 53 | }, 54 | "keywords": [ 55 | "webpack", 56 | "webpack-loader", 57 | "json", 58 | "perf" 59 | ] 60 | } 61 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const { getOptions } = require('loader-utils') 2 | const { validate } = require('schema-utils') 3 | 4 | const schema = require('./options.json') 5 | 6 | const DEFAULT_OPTIONS = { 7 | limit: 10240, 8 | } 9 | 10 | function shouldInline(limit, size) { 11 | return size <= parseInt(limit, 10) 12 | } 13 | 14 | // https://v8.dev/blog/cost-of-javascript-2019#json 15 | module.exports = function (source) { 16 | const options = Object.assign({}, DEFAULT_OPTIONS, getOptions(this)) 17 | 18 | validate(schema, options, 'JSON Perf Loader') 19 | 20 | let value 21 | 22 | try { 23 | value = typeof source === 'string' ? JSON.parse(source) : source 24 | } catch (error) { 25 | this.emitError(error) 26 | } 27 | 28 | if (shouldInline(options.limit, source.length)) { 29 | value = JSON.stringify(value) 30 | .replace(/\u2028/g, '\\u2028') 31 | .replace(/\u2029/g, '\\u2029') 32 | 33 | return `module.exports = ${value}` 34 | } 35 | 36 | // the outer JSON.stringify is parsed by JavaScript 37 | // the inner JSON.stringify is parsed by JSON.parse 38 | return `module.exports = JSON.parse(${JSON.stringify(JSON.stringify(value))})` 39 | } 40 | 41 | exports.raw = true 42 | -------------------------------------------------------------------------------- /src/options.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "properties": { 4 | "limit": { 5 | "type": ["number", "string"] 6 | } 7 | }, 8 | "additionalProperties": true 9 | } 10 | -------------------------------------------------------------------------------- /test/fixtures/file-big.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 4 | }, 5 | { 6 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 7 | }, 8 | { 9 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 10 | }, 11 | { 12 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 13 | }, 14 | { 15 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 16 | }, 17 | { 18 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 19 | }, 20 | { 21 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 22 | }, 23 | { 24 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 25 | }, 26 | { 27 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 28 | }, 29 | { 30 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 31 | }, 32 | { 33 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 34 | }, 35 | { 36 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 37 | }, 38 | { 39 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 40 | }, 41 | { 42 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 43 | }, 44 | { 45 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 46 | }, 47 | { 48 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 49 | }, 50 | { 51 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 52 | }, 53 | { 54 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 55 | }, 56 | { 57 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 58 | }, 59 | { 60 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 61 | }, 62 | { 63 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 64 | }, 65 | { 66 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 67 | }, 68 | { 69 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 70 | }, 71 | { 72 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 73 | }, 74 | { 75 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 76 | }, 77 | { 78 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 79 | }, 80 | { 81 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 82 | }, 83 | { 84 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 85 | }, 86 | { 87 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 88 | }, 89 | { 90 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 91 | }, 92 | { 93 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 94 | }, 95 | { 96 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 97 | }, 98 | { 99 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 100 | }, 101 | { 102 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 103 | }, 104 | { 105 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 106 | }, 107 | { 108 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 109 | }, 110 | { 111 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 112 | }, 113 | { 114 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 115 | }, 116 | { 117 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 118 | }, 119 | { 120 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 121 | }, 122 | { 123 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 124 | }, 125 | { 126 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 127 | }, 128 | { 129 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 130 | }, 131 | { 132 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 133 | }, 134 | { 135 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 136 | }, 137 | { 138 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 139 | }, 140 | { 141 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 142 | }, 143 | { 144 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 145 | }, 146 | { 147 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 148 | }, 149 | { 150 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 151 | }, 152 | { 153 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 154 | }, 155 | { 156 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 157 | }, 158 | { 159 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 160 | }, 161 | { 162 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 163 | }, 164 | { 165 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 166 | }, 167 | { 168 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 169 | }, 170 | { 171 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 172 | }, 173 | { 174 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 175 | }, 176 | { 177 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 178 | }, 179 | { 180 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 181 | }, 182 | { 183 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 184 | }, 185 | { 186 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 187 | }, 188 | { 189 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 190 | }, 191 | { 192 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 193 | }, 194 | { 195 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 196 | }, 197 | { 198 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 199 | }, 200 | { 201 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 202 | }, 203 | { 204 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 205 | }, 206 | { 207 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 208 | }, 209 | { 210 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 211 | }, 212 | { 213 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 214 | }, 215 | { 216 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 217 | }, 218 | { 219 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 220 | }, 221 | { 222 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 223 | }, 224 | { 225 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 226 | }, 227 | { 228 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 229 | }, 230 | { 231 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 232 | }, 233 | { 234 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 235 | }, 236 | { 237 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 238 | }, 239 | { 240 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 241 | }, 242 | { 243 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 244 | }, 245 | { 246 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 247 | }, 248 | { 249 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 250 | }, 251 | { 252 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 253 | }, 254 | { 255 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 256 | }, 257 | { 258 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 259 | }, 260 | { 261 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 262 | }, 263 | { 264 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 265 | }, 266 | { 267 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 268 | }, 269 | { 270 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 271 | }, 272 | { 273 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 274 | }, 275 | { 276 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 277 | }, 278 | { 279 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 280 | }, 281 | { 282 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 283 | }, 284 | { 285 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 286 | }, 287 | { 288 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 289 | }, 290 | { 291 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 292 | }, 293 | { 294 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 295 | }, 296 | { 297 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 298 | }, 299 | { 300 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 301 | }, 302 | { 303 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 304 | }, 305 | { 306 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 307 | }, 308 | { 309 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 310 | }, 311 | { 312 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 313 | }, 314 | { 315 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 316 | }, 317 | { 318 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 319 | }, 320 | { 321 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 322 | }, 323 | { 324 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 325 | }, 326 | { 327 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 328 | }, 329 | { 330 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 331 | }, 332 | { 333 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 334 | }, 335 | { 336 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 337 | }, 338 | { 339 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 340 | }, 341 | { 342 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 343 | }, 344 | { 345 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 346 | }, 347 | { 348 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 349 | }, 350 | { 351 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 352 | }, 353 | { 354 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 355 | }, 356 | { 357 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 358 | }, 359 | { 360 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 361 | }, 362 | { 363 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 364 | }, 365 | { 366 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 367 | }, 368 | { 369 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 370 | }, 371 | { 372 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 373 | }, 374 | { 375 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 376 | }, 377 | { 378 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 379 | }, 380 | { 381 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 382 | }, 383 | { 384 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 385 | }, 386 | { 387 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 388 | }, 389 | { 390 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 391 | }, 392 | { 393 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 394 | }, 395 | { 396 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 397 | }, 398 | { 399 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 400 | }, 401 | { 402 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 403 | }, 404 | { 405 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 406 | }, 407 | { 408 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 409 | }, 410 | { 411 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 412 | }, 413 | { 414 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 415 | }, 416 | { 417 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 418 | }, 419 | { 420 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 421 | }, 422 | { 423 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 424 | }, 425 | { 426 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 427 | }, 428 | { 429 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 430 | }, 431 | { 432 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 433 | }, 434 | { 435 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 436 | }, 437 | { 438 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 439 | }, 440 | { 441 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 442 | }, 443 | { 444 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 445 | }, 446 | { 447 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 448 | }, 449 | { 450 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 451 | }, 452 | { 453 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 454 | }, 455 | { 456 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 457 | }, 458 | { 459 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 460 | }, 461 | { 462 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 463 | }, 464 | { 465 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 466 | }, 467 | { 468 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 469 | }, 470 | { 471 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 472 | }, 473 | { 474 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 475 | }, 476 | { 477 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 478 | }, 479 | { 480 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 481 | }, 482 | { 483 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 484 | }, 485 | { 486 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 487 | }, 488 | { 489 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 490 | }, 491 | { 492 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 493 | }, 494 | { 495 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 496 | }, 497 | { 498 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 499 | }, 500 | { 501 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 502 | }, 503 | { 504 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 505 | }, 506 | { 507 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 508 | }, 509 | { 510 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 511 | }, 512 | { 513 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 514 | }, 515 | { 516 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 517 | }, 518 | { 519 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 520 | }, 521 | { 522 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 523 | }, 524 | { 525 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 526 | }, 527 | { 528 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 529 | }, 530 | { 531 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 532 | }, 533 | { 534 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 535 | }, 536 | { 537 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 538 | }, 539 | { 540 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 541 | }, 542 | { 543 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 544 | }, 545 | { 546 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 547 | }, 548 | { 549 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 550 | }, 551 | { 552 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 553 | }, 554 | { 555 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 556 | }, 557 | { 558 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 559 | }, 560 | { 561 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 562 | }, 563 | { 564 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 565 | }, 566 | { 567 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 568 | }, 569 | { 570 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 571 | }, 572 | { 573 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 574 | }, 575 | { 576 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 577 | }, 578 | { 579 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 580 | }, 581 | { 582 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 583 | }, 584 | { 585 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 586 | }, 587 | { 588 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 589 | }, 590 | { 591 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 592 | }, 593 | { 594 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 595 | }, 596 | { 597 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 598 | }, 599 | { 600 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 601 | }, 602 | { 603 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 604 | }, 605 | { 606 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 607 | }, 608 | { 609 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 610 | }, 611 | { 612 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 613 | }, 614 | { 615 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 616 | }, 617 | { 618 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 619 | }, 620 | { 621 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 622 | }, 623 | { 624 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 625 | }, 626 | { 627 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 628 | }, 629 | { 630 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 631 | }, 632 | { 633 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 634 | }, 635 | { 636 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 637 | }, 638 | { 639 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 640 | }, 641 | { 642 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 643 | }, 644 | { 645 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 646 | }, 647 | { 648 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 649 | }, 650 | { 651 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 652 | }, 653 | { 654 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 655 | }, 656 | { 657 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 658 | }, 659 | { 660 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 661 | }, 662 | { 663 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 664 | }, 665 | { 666 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 667 | }, 668 | { 669 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 670 | }, 671 | { 672 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 673 | }, 674 | { 675 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 676 | }, 677 | { 678 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 679 | }, 680 | { 681 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 682 | }, 683 | { 684 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 685 | }, 686 | { 687 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 688 | }, 689 | { 690 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 691 | }, 692 | { 693 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 694 | }, 695 | { 696 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 697 | }, 698 | { 699 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 700 | }, 701 | { 702 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 703 | }, 704 | { 705 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 706 | }, 707 | { 708 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 709 | }, 710 | { 711 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 712 | }, 713 | { 714 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 715 | }, 716 | { 717 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 718 | }, 719 | { 720 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 721 | }, 722 | { 723 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 724 | }, 725 | { 726 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 727 | }, 728 | { 729 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 730 | }, 731 | { 732 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 733 | }, 734 | { 735 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 736 | }, 737 | { 738 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 739 | }, 740 | { 741 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 742 | }, 743 | { 744 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 745 | }, 746 | { 747 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 748 | }, 749 | { 750 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 751 | }, 752 | { 753 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 754 | }, 755 | { 756 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 757 | }, 758 | { 759 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 760 | }, 761 | { 762 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 763 | }, 764 | { 765 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 766 | }, 767 | { 768 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 769 | }, 770 | { 771 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 772 | }, 773 | { 774 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 775 | }, 776 | { 777 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 778 | }, 779 | { 780 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 781 | }, 782 | { 783 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 784 | }, 785 | { 786 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 787 | }, 788 | { 789 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 790 | }, 791 | { 792 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 793 | }, 794 | { 795 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 796 | }, 797 | { 798 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 799 | }, 800 | { 801 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 802 | }, 803 | { 804 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 805 | }, 806 | { 807 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 808 | }, 809 | { 810 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 811 | }, 812 | { 813 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 814 | }, 815 | { 816 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 817 | }, 818 | { 819 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 820 | }, 821 | { 822 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 823 | }, 824 | { 825 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 826 | }, 827 | { 828 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 829 | }, 830 | { 831 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 832 | }, 833 | { 834 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 835 | }, 836 | { 837 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 838 | }, 839 | { 840 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 841 | }, 842 | { 843 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 844 | }, 845 | { 846 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 847 | }, 848 | { 849 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 850 | }, 851 | { 852 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 853 | }, 854 | { 855 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 856 | }, 857 | { 858 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 859 | }, 860 | { 861 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 862 | }, 863 | { 864 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 865 | }, 866 | { 867 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 868 | }, 869 | { 870 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 871 | }, 872 | { 873 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 874 | }, 875 | { 876 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 877 | }, 878 | { 879 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 880 | }, 881 | { 882 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 883 | }, 884 | { 885 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 886 | }, 887 | { 888 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 889 | }, 890 | { 891 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 892 | }, 893 | { 894 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 895 | }, 896 | { 897 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 898 | }, 899 | { 900 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 901 | }, 902 | { 903 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 904 | }, 905 | { 906 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 907 | }, 908 | { 909 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 910 | }, 911 | { 912 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 913 | }, 914 | { 915 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 916 | }, 917 | { 918 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 919 | }, 920 | { 921 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 922 | }, 923 | { 924 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 925 | }, 926 | { 927 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 928 | }, 929 | { 930 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 931 | }, 932 | { 933 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 934 | }, 935 | { 936 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 937 | }, 938 | { 939 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 940 | }, 941 | { 942 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 943 | }, 944 | { 945 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 946 | }, 947 | { 948 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 949 | }, 950 | { 951 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 952 | }, 953 | { 954 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 955 | }, 956 | { 957 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 958 | }, 959 | { 960 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 961 | }, 962 | { 963 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 964 | }, 965 | { 966 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 967 | }, 968 | { 969 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 970 | }, 971 | { 972 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 973 | }, 974 | { 975 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 976 | }, 977 | { 978 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 979 | }, 980 | { 981 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 982 | }, 983 | { 984 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 985 | }, 986 | { 987 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 988 | }, 989 | { 990 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 991 | }, 992 | { 993 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 994 | }, 995 | { 996 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 997 | }, 998 | { 999 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1000 | }, 1001 | { 1002 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1003 | }, 1004 | { 1005 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1006 | }, 1007 | { 1008 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1009 | }, 1010 | { 1011 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1012 | }, 1013 | { 1014 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1015 | }, 1016 | { 1017 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1018 | }, 1019 | { 1020 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1021 | }, 1022 | { 1023 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1024 | }, 1025 | { 1026 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1027 | }, 1028 | { 1029 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1030 | }, 1031 | { 1032 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1033 | }, 1034 | { 1035 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1036 | }, 1037 | { 1038 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1039 | }, 1040 | { 1041 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1042 | }, 1043 | { 1044 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1045 | }, 1046 | { 1047 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1048 | }, 1049 | { 1050 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1051 | }, 1052 | { 1053 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1054 | }, 1055 | { 1056 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1057 | }, 1058 | { 1059 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1060 | }, 1061 | { 1062 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1063 | }, 1064 | { 1065 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1066 | }, 1067 | { 1068 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1069 | }, 1070 | { 1071 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1072 | }, 1073 | { 1074 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1075 | }, 1076 | { 1077 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1078 | }, 1079 | { 1080 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1081 | }, 1082 | { 1083 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1084 | }, 1085 | { 1086 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1087 | }, 1088 | { 1089 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1090 | }, 1091 | { 1092 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1093 | }, 1094 | { 1095 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1096 | }, 1097 | { 1098 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1099 | }, 1100 | { 1101 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1102 | }, 1103 | { 1104 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1105 | }, 1106 | { 1107 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1108 | }, 1109 | { 1110 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1111 | }, 1112 | { 1113 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1114 | }, 1115 | { 1116 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1117 | }, 1118 | { 1119 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1120 | }, 1121 | { 1122 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1123 | }, 1124 | { 1125 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1126 | }, 1127 | { 1128 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1129 | }, 1130 | { 1131 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1132 | }, 1133 | { 1134 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1135 | }, 1136 | { 1137 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1138 | }, 1139 | { 1140 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1141 | }, 1142 | { 1143 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1144 | }, 1145 | { 1146 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1147 | }, 1148 | { 1149 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1150 | }, 1151 | { 1152 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1153 | }, 1154 | { 1155 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1156 | }, 1157 | { 1158 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1159 | }, 1160 | { 1161 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1162 | }, 1163 | { 1164 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1165 | }, 1166 | { 1167 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1168 | }, 1169 | { 1170 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1171 | }, 1172 | { 1173 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1174 | }, 1175 | { 1176 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1177 | }, 1178 | { 1179 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1180 | }, 1181 | { 1182 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1183 | }, 1184 | { 1185 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1186 | }, 1187 | { 1188 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1189 | }, 1190 | { 1191 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1192 | }, 1193 | { 1194 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1195 | }, 1196 | { 1197 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1198 | }, 1199 | { 1200 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1201 | }, 1202 | { 1203 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1204 | }, 1205 | { 1206 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1207 | }, 1208 | { 1209 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1210 | }, 1211 | { 1212 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1213 | }, 1214 | { 1215 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1216 | }, 1217 | { 1218 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1219 | }, 1220 | { 1221 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1222 | }, 1223 | { 1224 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1225 | }, 1226 | { 1227 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1228 | }, 1229 | { 1230 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1231 | }, 1232 | { 1233 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1234 | }, 1235 | { 1236 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1237 | }, 1238 | { 1239 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1240 | }, 1241 | { 1242 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1243 | }, 1244 | { 1245 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1246 | }, 1247 | { 1248 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1249 | }, 1250 | { 1251 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1252 | }, 1253 | { 1254 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1255 | }, 1256 | { 1257 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1258 | }, 1259 | { 1260 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1261 | }, 1262 | { 1263 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1264 | }, 1265 | { 1266 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1267 | }, 1268 | { 1269 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1270 | }, 1271 | { 1272 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1273 | }, 1274 | { 1275 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1276 | }, 1277 | { 1278 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1279 | }, 1280 | { 1281 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1282 | }, 1283 | { 1284 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1285 | }, 1286 | { 1287 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1288 | }, 1289 | { 1290 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1291 | }, 1292 | { 1293 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1294 | }, 1295 | { 1296 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1297 | }, 1298 | { 1299 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1300 | }, 1301 | { 1302 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1303 | }, 1304 | { 1305 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1306 | }, 1307 | { 1308 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1309 | }, 1310 | { 1311 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1312 | }, 1313 | { 1314 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1315 | }, 1316 | { 1317 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1318 | }, 1319 | { 1320 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1321 | }, 1322 | { 1323 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1324 | }, 1325 | { 1326 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1327 | }, 1328 | { 1329 | "foooooooooooooooooooooooo": "barararararararararararararararararararararararararararararar" 1330 | }, 1331 | { 1332 | "with-single-quotes": "this 'should' also work" 1333 | }, 1334 | { 1335 | "with-double-\"quotes\"": "this \"should\" also work" 1336 | } 1337 | ] 1338 | -------------------------------------------------------------------------------- /test/fixtures/file-invalid.json: -------------------------------------------------------------------------------- 1 | { -------------------------------------------------------------------------------- /test/fixtures/file.json: -------------------------------------------------------------------------------- 1 | { 2 | "foo": "bar" 3 | } 4 | -------------------------------------------------------------------------------- /test/fixtures/fixture-big.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import json from './file-big.json'; 3 | -------------------------------------------------------------------------------- /test/fixtures/fixture-invalid.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import json from './file-invalid.json'; 3 | -------------------------------------------------------------------------------- /test/fixtures/fixture.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import json from './file.json'; 3 | -------------------------------------------------------------------------------- /test/fixtures/x-custom-loader/index.js: -------------------------------------------------------------------------------- 1 | const utils = require('loader-utils'); 2 | 3 | module.exports = function loader() { 4 | const options = utils.getOptions(this); 5 | 6 | return `module.exports=${JSON.stringify(options)}`; 7 | }; 8 | -------------------------------------------------------------------------------- /test/helpers/compiler.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | const rimraf = require('rimraf') 4 | const webpack = require('webpack4') 5 | const MemoryFS = require('memory-fs') 6 | 7 | const modules = (config) => { 8 | return { 9 | rules: config.rules 10 | ? config.rules 11 | : config.loader 12 | ? [ 13 | { 14 | test: config.loader.test || /\.json$/, 15 | type: 'javascript/auto', 16 | use: { 17 | loader: path.resolve(__dirname, '../../src'), 18 | options: config.loader.options, 19 | }, 20 | }, 21 | ] 22 | : [], 23 | } 24 | } 25 | 26 | const plugins = (config) => [].concat(config.plugins || []) 27 | 28 | const output = (config) => { 29 | return { 30 | path: path.resolve( 31 | __dirname, 32 | `../outputs/${config.output ? config.output : ''}`, 33 | ), 34 | filename: '[name].js', 35 | chunkFilename: '[name].chunk.js', 36 | } 37 | } 38 | 39 | module.exports = function (fixture, config, options) { 40 | config = { 41 | mode: 'development', 42 | devtool: config.devtool || 'source-map', 43 | context: path.resolve(__dirname, '..', 'fixtures'), 44 | entry: `./${fixture}`, 45 | output: output(config), 46 | module: modules(config), 47 | plugins: plugins(config), 48 | } 49 | 50 | // eslint-disable-next-line no-param-reassign 51 | options = Object.assign({ output: false }, options) 52 | 53 | if (options.output) { 54 | rimraf(config.output.path) 55 | } 56 | 57 | const compiler = webpack(config) 58 | 59 | if (!options.output) { 60 | compiler.outputFileSystem = new MemoryFS() 61 | } 62 | 63 | return new Promise((resolve, reject) => 64 | compiler.run((error, stats) => { 65 | if (error) { 66 | reject(error) 67 | } 68 | 69 | return resolve(stats) 70 | }), 71 | ) 72 | } 73 | -------------------------------------------------------------------------------- /test/limit-option.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require('./helpers/compiler') 2 | 3 | describe('limit option', () => { 4 | it('not specify', async () => { 5 | const config = { 6 | loader: { 7 | test: /\.json$/, 8 | type: 'javascript/auto', 9 | options: {}, 10 | }, 11 | } 12 | 13 | const stats = await webpack('fixture.js', config) 14 | const [{ source }] = stats.toJson().modules 15 | 16 | expect(source).not.toMatch('JSON.parse') 17 | }) 18 | 19 | it('0 ({Number})', async () => { 20 | const config = { 21 | loader: { 22 | test: /\.json$/, 23 | type: 'javascript/auto', 24 | options: { 25 | limit: 0, 26 | }, 27 | }, 28 | } 29 | 30 | const stats = await webpack('fixture.js', config) 31 | const [{ source }] = stats.toJson().modules 32 | 33 | expect(source).toMatch('JSON.parse') 34 | }) 35 | 36 | it('0.1 ({Number})', async () => { 37 | const config = { 38 | loader: { 39 | test: /\.json$/, 40 | type: 'javascript/auto', 41 | options: { 42 | limit: 0.1, 43 | }, 44 | }, 45 | } 46 | 47 | const stats = await webpack('fixture.js', config) 48 | const [{ source }] = stats.toJson().modules 49 | 50 | expect(source).toMatch('JSON.parse') 51 | }) 52 | 53 | it('666 ({Number})', async () => { 54 | const config = { 55 | loader: { 56 | test: /\.json$/, 57 | type: 'javascript/auto', 58 | options: { 59 | limit: 666, 60 | }, 61 | }, 62 | } 63 | 64 | const stats = await webpack('fixture.js', config) 65 | const [{ source }] = stats.toJson().modules 66 | 67 | expect(source).not.toMatch('JSON.parse') 68 | }) 69 | 70 | it('Number.MAX_SAFE_INTEGER ({Number})', async () => { 71 | const config = { 72 | loader: { 73 | test: /\.json$/, 74 | type: 'javascript/auto', 75 | options: { 76 | limit: Number.MAX_SAFE_INTEGER, 77 | }, 78 | }, 79 | } 80 | 81 | const stats = await webpack('fixture-big.js', config) 82 | const [{ source }] = stats.toJson().modules 83 | 84 | expect(source).not.toMatch('JSON.parse') 85 | }) 86 | 87 | it('Number.MIN_SAFE_INTEGER ({Number})', async () => { 88 | const config = { 89 | loader: { 90 | test: /\.json$/, 91 | type: 'javascript/auto', 92 | options: { 93 | limit: Number.MIN_SAFE_INTEGER, 94 | }, 95 | }, 96 | } 97 | 98 | const stats = await webpack('fixture.js', config) 99 | const [{ source }] = stats.toJson().modules 100 | 101 | expect(source).toMatch('JSON.parse') 102 | }) 103 | 104 | it('0 ({String})', async () => { 105 | const config = { 106 | loader: { 107 | test: /\.json$/, 108 | type: 'javascript/auto', 109 | options: { 110 | limit: '0', 111 | }, 112 | }, 113 | } 114 | 115 | const stats = await webpack('fixture.js', config) 116 | const [{ source }] = stats.toJson().modules 117 | 118 | expect(source).toMatch('JSON.parse') 119 | }) 120 | 121 | it('0.1 ({String})', async () => { 122 | const config = { 123 | loader: { 124 | test: /\.json$/, 125 | type: 'javascript/auto', 126 | options: { 127 | limit: '0.1', 128 | }, 129 | }, 130 | } 131 | 132 | const stats = await webpack('fixture.js', config) 133 | const [{ source }] = stats.toJson().modules 134 | 135 | expect(source).toMatch('JSON.parse') 136 | }) 137 | 138 | it('666 ({String})', async () => { 139 | const config = { 140 | loader: { 141 | test: /\.json$/, 142 | type: 'javascript/auto', 143 | options: { 144 | limit: '666', 145 | }, 146 | }, 147 | } 148 | 149 | const stats = await webpack('fixture.js', config) 150 | const [{ source }] = stats.toJson().modules 151 | 152 | expect(source).not.toMatch('JSON.parse') 153 | }) 154 | }) 155 | -------------------------------------------------------------------------------- /test/loader-big.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require('./helpers/compiler') 2 | 3 | describe('Loader', () => { 4 | it('should works', async () => { 5 | const config = { 6 | loader: { 7 | test: /\.json$/, 8 | type: 'javascript/auto', 9 | options: {}, 10 | }, 11 | } 12 | 13 | const stats = await webpack('fixture-big.js', config) 14 | const [{ source }] = stats.toJson().modules 15 | 16 | // this will fail when there is an error e.g: `throw new Error...` 17 | expect(source.startsWith('module.exports = JSON.parse')).toEqual(true) 18 | 19 | // validate syntax 20 | expect(() => eval(source)).not.toThrow() 21 | }) 22 | }) 23 | -------------------------------------------------------------------------------- /test/loader-invalid.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require('./helpers/compiler') 2 | 3 | describe('Loader invaild', () => { 4 | it('should throw error', async () => { 5 | const config = { 6 | loader: { 7 | test: /\.json$/, 8 | type: 'javascript/auto', 9 | }, 10 | } 11 | 12 | const stats = await webpack('fixture-invalid.js', config) 13 | const { modules, errors, warnings } = stats.toJson() 14 | 15 | expect(errors.length).toBeGreaterThan(0) 16 | expect(warnings).toEqual([]) 17 | }) 18 | }) 19 | -------------------------------------------------------------------------------- /test/loader.test.js: -------------------------------------------------------------------------------- 1 | const webpack = require('./helpers/compiler') 2 | 3 | describe('Loader', () => { 4 | it('should works', async () => { 5 | const config = { 6 | loader: { 7 | test: /\.json$/, 8 | type: 'javascript/auto', 9 | }, 10 | } 11 | 12 | const stats = await webpack('fixture.js', config) 13 | const { modules, errors, warnings } = stats.toJson() 14 | 15 | expect(modules[0].source).toEqual('module.exports = {"foo":"bar"}') 16 | expect(errors).toEqual([]) 17 | expect(warnings).toEqual([]) 18 | }) 19 | 20 | it('should works when limit as a query string', async () => { 21 | const config = { 22 | rules: [ 23 | { 24 | test: /\.json$/, 25 | type: 'javascript/auto', 26 | use: { 27 | loader: `${require.resolve('../src')}?limit=10000`, 28 | }, 29 | }, 30 | ], 31 | } 32 | 33 | const stats = await webpack('fixture.js', config) 34 | const { modules, errors, warnings } = stats.toJson() 35 | 36 | expect(modules[0].source).toEqual('module.exports = {"foo":"bar"}') 37 | expect(errors).toEqual([]) 38 | expect(warnings).toEqual([]) 39 | }) 40 | }) 41 | --------------------------------------------------------------------------------