├── .editorconfig ├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── CHANGELOG_CN.md ├── LICENSE ├── README.md ├── README_CN.md ├── babel.config.json ├── build ├── build.typings.js ├── dummy.js ├── vendor.d.ts └── vendor.json ├── dev ├── async.html ├── common.html ├── data │ ├── json.txt │ ├── large.json │ ├── massive.json │ ├── string.txt │ └── success.json ├── element.html ├── index.html ├── lib │ ├── demo.css │ └── weui.min.css ├── log.html ├── network.html ├── node.js ├── node.ts ├── package-lock.json ├── package.json ├── plugin.html ├── script │ ├── index.ts │ └── test.js ├── storage.html ├── storage.ts └── vue.html ├── doc ├── a_doc_index.md ├── a_doc_index_CN.md ├── plugin_building_a_plugin.md ├── plugin_building_a_plugin_CN.md ├── plugin_event_list.md ├── plugin_event_list_CN.md ├── plugin_getting_started.md ├── plugin_getting_started_CN.md ├── plugin_properties_methods.md ├── plugin_properties_methods_CN.md ├── public_properties_methods.md ├── public_properties_methods_CN.md ├── screenshot │ ├── overview_dark.jpg │ ├── overview_light.jpg │ ├── plugin_element.jpg │ ├── plugin_log_command.jpg │ ├── plugin_log_types.jpg │ ├── plugin_network.jpg │ ├── plugin_storage.jpg │ ├── plugin_system.jpg │ ├── qq_group.png │ └── qrcode.png ├── tutorial.md └── tutorial_CN.md ├── package-lock.json ├── package.json ├── src ├── component │ ├── icon │ │ ├── icon.less │ │ ├── icon.svelte │ │ └── iconCopy.svelte │ └── recycleScroller │ │ ├── recycleItem.svelte │ │ ├── recycleManager.ts │ │ ├── recycleScroller.less │ │ ├── recycleScroller.svelte │ │ ├── resizeObserver.ts │ │ └── scroll │ │ ├── friction.ts │ │ ├── linear.ts │ │ ├── scroll.ts │ │ ├── scrollHandler.ts │ │ ├── spring.ts │ │ └── touchTracker.ts ├── core │ ├── core.less │ ├── core.model.ts │ ├── core.svelte │ ├── core.ts │ ├── options.interface.ts │ ├── style │ │ ├── tabbar.less │ │ ├── theme.less │ │ ├── toolbar.less │ │ ├── topbar.less │ │ └── view.less │ ├── switchButton.less │ └── switchButton.svelte ├── element │ ├── element.model.ts │ ├── element.svelte │ ├── element.ts │ ├── elementNode.less │ └── elementNode.svelte ├── lib │ ├── model.ts │ ├── plugin.ts │ ├── pluginContent.svelte │ ├── pluginExporter.ts │ ├── query.ts │ ├── sveltePlugin.ts │ └── tool.ts ├── log │ ├── default.ts │ ├── log.exporter.ts │ ├── log.less │ ├── log.model.ts │ ├── log.store.ts │ ├── log.svelte │ ├── log.ts │ ├── logCommand.less │ ├── logCommand.svelte │ ├── logRow.less │ ├── logRow.svelte │ ├── logTool.ts │ ├── logTree.less │ ├── logTree.svelte │ ├── logValue.less │ ├── logValue.svelte │ └── system.ts ├── network │ ├── beacon.proxy.ts │ ├── fetch.proxy.ts │ ├── helper.ts │ ├── network.exporter.ts │ ├── network.less │ ├── network.model.ts │ ├── network.svelte │ ├── network.ts │ ├── requestItem.ts │ └── xhr.proxy.ts ├── storage │ ├── storage.cookie.ts │ ├── storage.model.ts │ ├── storage.svelte │ ├── storage.ts │ └── storage.wx.ts ├── styles │ └── var.less ├── types.d.ts └── vconsole.ts ├── tsconfig.json ├── tsconfig.type.json ├── webpack.config.js └── webpack.serve.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | # Unix-style newlines with a newline ending every file 5 | [*] 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [*.{html,js,ts,css,less,scss,xml,json}] 16 | indent_style = space 17 | indent_size = 2 18 | 19 | [*.yml] 20 | indent_style = space 21 | indent_size = 2 22 | 23 | [jdists] 24 | indent_style = space 25 | indent_size = 2 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | vConsole Version: 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | typings 3 | 4 | # Logs 5 | logs 6 | *.log 7 | 8 | # Dependency directory 9 | node_modules 10 | 11 | # npm cache directory 12 | .npm 13 | 14 | ### OSX ### 15 | *.DS_Store 16 | 17 | # IDE IDEA 18 | .idea 19 | 20 | # Thumbnails 21 | ._* -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .babelrc 2 | webpack.config.js 3 | webpack.dev.config.js 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Tencent is pleased to support the open source community by making vConsole available. 2 | 3 | Copyright (C) 2017 THL A29 Limited, a Tencent company. All rights reserved. 4 | 5 | If you have downloaded a copy of the vConsole binary from Tencent, please note that the vConsole binary is licensed under the MIT License. 6 | 7 | If you have downloaded a copy of the vConsole source code from Tencent, please note that vConsole source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of vConsole into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within vConsole. 8 | 9 | A copy of the MIT License is included in this file. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | English | [简体中文](./README_CN.md) 2 | 3 | vConsole 4 | === 5 | 6 | A lightweight, extendable front-end developer tool for mobile web page. 7 | 8 | vConsole is framework-free, you can use it in Vue or React or any other framework application. 9 | 10 | Now vConsole is the official debugging tool for WeChat Miniprograms. 11 | 12 | --- 13 | 14 | ## Features 15 | 16 | - Logs: `console.log|info|error|...` 17 | - Network: `XMLHttpRequest`, `Fetch`, `sendBeacon` 18 | - Element: HTML elements tree 19 | - Storage: `Cookies`, `LocalStorage`, `SessionStorage` 20 | - Execute JS command manually 21 | - Custom plugins 22 | 23 | For details, please see the screenshots below. 24 | 25 | --- 26 | 27 | ## Release Notes 28 | 29 | Latest version: [![npm version](https://img.shields.io/npm/v/vconsole/latest.svg)](https://www.npmjs.com/package/vconsole) 30 | 31 | Detailed release notes for each version are available on [Changelog](./CHANGELOG.md). 32 | 33 | --- 34 | 35 | ## Guide 36 | 37 | See [Tutorial](./doc/tutorial.md) for more usage details. 38 | 39 | For installation, there are 2 primary ways of adding vConsole to a project: 40 | 41 | #### Method 1: Using npm (Recommended) 42 | 43 | ```bash 44 | $ npm install vconsole 45 | ``` 46 | 47 | ```javascript 48 | import VConsole from 'vconsole'; 49 | 50 | const vConsole = new VConsole(); 51 | // or init with options 52 | const vConsole = new VConsole({ theme: 'dark' }); 53 | 54 | // call `console` methods as usual 55 | console.log('Hello world'); 56 | 57 | // remove it when you finish debugging 58 | vConsole.destroy(); 59 | ``` 60 | 61 | #### Method 2: Using CDN in HTML: 62 | 63 | ```html 64 | 65 | 69 | ``` 70 | 71 | Available CDN: 72 | 73 | - https://unpkg.com/vconsole@latest/dist/vconsole.min.js 74 | - https://cdn.jsdelivr.net/npm/vconsole@latest/dist/vconsole.min.js 75 | 76 | --- 77 | 78 | ## Preview 79 | 80 | [http://wechatfe.github.io/vconsole/demo.html](http://wechatfe.github.io/vconsole/demo.html) 81 | 82 | ![](./doc/screenshot/qrcode.png) 83 | 84 | --- 85 | 86 | ## Screenshots 87 | 88 | ### Overview 89 | 90 |
91 | Light theme 92 | 93 | ![](./doc/screenshot/overview_light.jpg) 94 |
95 | 96 |
97 | Dark theme 98 | 99 | ![](./doc/screenshot/overview_dark.jpg) 100 |
101 | 102 | ### Log Panel 103 | 104 |
105 | Log styling 106 | 107 | ![](./doc/screenshot/plugin_log_types.jpg) 108 |
109 | 110 |
111 | Command line 112 | 113 | ![](./doc/screenshot/plugin_log_command.jpg) 114 |
115 | 116 | ### System Panel 117 | 118 |
119 | Performance info 120 | 121 | ![](./doc/screenshot/plugin_system.jpg) 122 |
123 | 124 |
125 | Output logs to different panel 126 | 127 | ```javascript 128 | console.log('output to Log panel.') 129 | console.log('[system]', 'output to System panel.') 130 | ``` 131 |
132 | 133 | ### Network Panel 134 | 135 |
136 | Request details 137 | 138 | ![](./doc/screenshot/plugin_network.jpg) 139 |
140 | 141 | ### Element Panel 142 | 143 |
144 | Realtime HTML elements structure 145 | 146 | ![](./doc/screenshot/plugin_element.jpg) 147 |
148 | 149 | ### Storage Panel 150 | 151 |
152 | Add, edit, delete or copy Cookies / LocalStorage / SessionStorage 153 | 154 | ![](./doc/screenshot/plugin_storage.jpg) 155 |
156 | 157 | --- 158 | 159 | ## Documentation 160 | 161 | vConsole: 162 | 163 | - [Tutorial](./doc/tutorial.md) 164 | - [Public Properties & Methods](./doc/public_properties_methods.md) 165 | - [Builtin Plugin: Properties & Methods](./doc/plugin_properties_methods.md) 166 | 167 | Custom Plugin: 168 | 169 | - [Plugin: Getting Started](./doc/plugin_getting_started.md) 170 | - [Plugin: Building a Plugin](./doc/plugin_building_a_plugin.md) 171 | - [Plugin: Event List](./doc/plugin_event_list.md) 172 | 173 | --- 174 | 175 | ## Third-party Plugins 176 | 177 | - [vConsole-sources](https://github.com/WechatFE/vConsole-sources) 178 | - [vconsole-webpack-plugin](https://github.com/diamont1001/vconsole-webpack-plugin) 179 | - [vconsole-stats-plugin](https://github.com/smackgg/vConsole-Stats) 180 | - [vconsole-vue-devtools-plugin](https://github.com/Zippowxk/vue-vconsole-devtools) 181 | - [vconsole-outputlog-plugin](https://github.com/sunlanda/vconsole-outputlog-plugin) 182 | - [vite-plugin-vconsole](https://github.com/vadxq/vite-plugin-vconsole) 183 | 184 | --- 185 | 186 | ## Feedback 187 | 188 | QQ Group: 497430533 189 | 190 | ![](./doc/screenshot/qq_group.png) 191 | 192 | --- 193 | 194 | ## License 195 | 196 | [The MIT License](./LICENSE) 197 | -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | [English](./README.md) | 简体中文 2 | 3 | vConsole 4 | === 5 | 6 | 一个轻量、可拓展、针对手机网页的前端开发者调试面板。 7 | 8 | vConsole 是框架无关的,可以在 Vue、React 或其他任何框架中使用。 9 | 10 | 现在 vConsole 是微信小程序的官方调试工具。 11 | 12 | --- 13 | 14 | ## 功能特性 15 | 16 | - 日志(Logs): `console.log|info|error|...` 17 | - 网络(Network): `XMLHttpRequest`, `Fetch`, `sendBeacon` 18 | - 节点(Element): HTML 节点树 19 | - 存储(Storage): `Cookies`, `LocalStorage`, `SessionStorage` 20 | - 手动执行 JS 命令行 21 | - 自定义插件 22 | 23 | 详情可参考下方的截图。 24 | 25 | --- 26 | 27 | ## 版本说明 28 | 29 | 最新版本: [![npm version](https://img.shields.io/npm/v/vconsole/latest.svg)](https://www.npmjs.com/package/vconsole) 30 | 31 | 每个版本的详细说明请参阅 [Changelog](./CHANGELOG_CN.md)。 32 | 33 | --- 34 | 35 | ## 上手 36 | 37 | 详细使用方法请参阅[使用教程](./doc/tutorial_CN.md)。 38 | 39 | 将 vConsole 添加到项目中主要有以下方式: 40 | 41 | #### 方法一:使用 npm(推荐) 42 | 43 | ```bash 44 | $ npm install vconsole 45 | ``` 46 | 47 | Import 并初始化后,即可使用 `console.log` 功能,如 Chrome devtools 上一样。 48 | 49 | ```javascript 50 | import VConsole from 'vconsole'; 51 | 52 | const vConsole = new VConsole(); 53 | // 或者使用配置参数来初始化,详情见文档 54 | const vConsole = new VConsole({ theme: 'dark' }); 55 | 56 | // 接下来即可照常使用 `console` 等方法 57 | console.log('Hello world'); 58 | 59 | // 结束调试后,可移除掉 60 | vConsole.destroy(); 61 | ``` 62 | 63 | #### 方法二:使用 CDN 直接插入到 HTML 64 | 65 | ```html 66 | 67 | 71 | ``` 72 | 73 | 可用的 CDN: 74 | 75 | - https://unpkg.com/vconsole@latest/dist/vconsole.min.js 76 | - https://cdn.jsdelivr.net/npm/vconsole@latest/dist/vconsole.min.js 77 | 78 | --- 79 | 80 | ## 手机预览 81 | 82 | [http://wechatfe.github.io/vconsole/demo.html](http://wechatfe.github.io/vconsole/demo.html) 83 | 84 | ![](./doc/screenshot/qrcode.png) 85 | 86 | --- 87 | 88 | ## 截图 89 | 90 | ### 概览 91 | 92 |
93 | 浅色主题 94 | 95 | ![](./doc/screenshot/overview_light.jpg) 96 |
97 | 98 |
99 | 深色主题 100 | 101 | ![](./doc/screenshot/overview_dark.jpg) 102 |
103 | 104 | ### Log 面板 105 | 106 |
107 | Log 样式 108 | 109 | ![](./doc/screenshot/plugin_log_types.jpg) 110 |
111 | 112 |
113 | 命令行 114 | 115 | ![](./doc/screenshot/plugin_log_command.jpg) 116 |
117 | 118 | ### System 面板 119 | 120 |
121 | Performance 信息 122 | 123 | ![](./doc/screenshot/plugin_system.jpg) 124 |
125 | 126 |
127 | 输入日志到不同的 log 面板 128 | 129 | ```javascript 130 | console.log('output to Log panel.') 131 | console.log('[system]', 'output to System panel.') 132 | ``` 133 |
134 | 135 | ### Network 面板 136 | 137 |
138 | 请求、回包的详情 139 | 140 | ![](./doc/screenshot/plugin_network.jpg) 141 |
142 | 143 | ### Element 面板 144 | 145 |
146 | 查看 HTML 对象结构 147 | 148 | ![](./doc/screenshot/plugin_element.jpg) 149 |
150 | 151 | ### Storage 面板 152 | 153 |
154 | 添加、编辑、删除、复制 Cookies / LocalStorage / SessionStorage 155 | 156 | ![](./doc/screenshot/plugin_storage.jpg) 157 |
158 | 159 | --- 160 | 161 | ## 文档 162 | 163 | 164 | vConsole 本体: 165 | 166 | - [使用教程](./doc/tutorial_CN.md) 167 | - [公共属性及方法](./doc/public_properties_methods_CN.md) 168 | - [内置插件:属性及方法](./doc/plugin_properties_methods_CN.md) 169 | 170 | 自定义插件: 171 | 172 | - [插件:入门](./doc/plugin_getting_started_CN.md) 173 | - [插件:编写插件](./doc/plugin_building_a_plugin_CN.md) 174 | - [插件:Event 事件列表](./doc/plugin_event_list_CN.md) 175 | 176 | --- 177 | 178 | ## 第三方插件列表 179 | 180 | - [vConsole-sources](https://github.com/WechatFE/vConsole-sources) 181 | - [vconsole-webpack-plugin](https://github.com/diamont1001/vconsole-webpack-plugin) 182 | - [vconsole-stats-plugin](https://github.com/smackgg/vConsole-Stats) 183 | - [vconsole-vue-devtools-plugin](https://github.com/Zippowxk/vue-vconsole-devtools) 184 | - [vconsole-outputlog-plugin](https://github.com/sunlanda/vconsole-outputlog-plugin) 185 | - [vite-plugin-vconsole](https://github.com/vadxq/vite-plugin-vconsole) 186 | 187 | --- 188 | 189 | ## 交流反馈 190 | 191 | QQ 群:497430533 192 | 193 | ![](./doc/screenshot/qq_group.png) 194 | 195 | --- 196 | 197 | ## License 198 | 199 | [The MIT License](./LICENSE) 200 | -------------------------------------------------------------------------------- /babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env", 5 | { 6 | "modules": "auto", 7 | "targets": "defaults", 8 | "loose": true, 9 | "debug": false 10 | } 11 | ], 12 | "@babel/preset-typescript" 13 | ], 14 | "plugins": [ 15 | "@babel/plugin-transform-runtime", 16 | ["@babel/plugin-proposal-class-properties", { "loose": true }], 17 | "@babel/plugin-transform-block-scoping", 18 | "@babel/plugin-proposal-export-namespace-from", 19 | "@babel/plugin-proposal-object-rest-spread" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /build/build.typings.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const { execSync } = require('child_process'); 3 | const vendorConfig = require('./vendor.json'); 4 | 5 | const main = () => { 6 | console.group('\nEmitting type declarations...'); 7 | const distFile = './dist/vconsole.min.d.ts'; 8 | if (fs.existsSync(distFile)) { 9 | fs.unlinkSync(distFile); 10 | } 11 | execSync('tsc --build ./tsconfig.type.json'); 12 | let distContent = fs.readFileSync(distFile, 'utf8'); 13 | for (const name of vendorConfig.name) { 14 | distContent = distContent.replace(new RegExp(`['"]${name}['"]`, 'g'), `"vendor/${name}"`); 15 | } 16 | const vendorContent = '/// \n\n'; 17 | fs.writeFileSync(distFile, vendorContent + distContent, 'utf8'); 18 | console.groupEnd(); 19 | }; 20 | 21 | main(); -------------------------------------------------------------------------------- /build/dummy.js: -------------------------------------------------------------------------------- 1 | export default {} 2 | -------------------------------------------------------------------------------- /build/vendor.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'vendor/core-js/stable/symbol' { 2 | } 3 | 4 | declare module 'vendor/mutation-observer' { 5 | export class MutationObserver { 6 | } 7 | } 8 | 9 | declare module 'vendor/svelte' { 10 | export class SvelteComponent { 11 | } 12 | } 13 | 14 | declare module 'vendor/svelte/store' { 15 | export interface Subscriber { 16 | } 17 | export interface Unsubscriber { 18 | } 19 | export interface Updater { 20 | } 21 | export interface Writable { 22 | } 23 | } 24 | 25 | -------------------------------------------------------------------------------- /build/vendor.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": [ 3 | "core-js/stable/symbol", 4 | "mutation-observer", 5 | "svelte/store", 6 | "svelte" 7 | ] 8 | } -------------------------------------------------------------------------------- /dev/async.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vConsole: Async Loading 7 | 8 | 9 | 10 | 11 | 12 |
13 |
vConsole will be loaded after 1 second.
14 | Log 15 |
16 | 17 | 18 | 19 | 49 | -------------------------------------------------------------------------------- /dev/common.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | vConsole: Common 8 | 9 | 10 | 11 | 12 | 25 | 26 | 27 | 28 | 44 | 45 | -------------------------------------------------------------------------------- /dev/data/json.txt: -------------------------------------------------------------------------------- 1 | {"901y":"vcohat","e2aw":"pt37op","o6yy":"11lozj","phb7":"xrjwgj","fxet":"6c4dsb","iqzs":"n27jjs","3ouj":"5ps8ii","fm2x":"2m4inh","566j":"rfv4kx","ga71":"rc42lf","15ku":"f4g0cu","22ql":"0iujmq","dkhv":"gjq0sw","v0h0":"n8dprr","jxs3":"3c6apn","qbge":"i5btto","40ls":"d5r41q","rxc9":"y3cnc4","2egy":"ry07xq","l0r8":"7o2itg","s67y":"b89xh9","2kz3":"yrwd9p","dilm":"78rlwd","zufw":"z7e712","j0en":"g7xg5n","yq4g":"o7aa0j","3l0g":"he4464","h0qi":"b1lr1r","aazk":"ayrqaz","e5r2":"thuqxq","et8n":"kr4bx5","7dfw":"zc9r6q","sww1":"u8zbkk","mxo2":"0699mz","lccz":"7xl4zj","qcmt":"llx3iz","ggv3":"tz71c3","ctq6":"paguaz","7aju":"kptuex","rtes":"kdgwvz","uqmp":"wusb8n","9q8w":"mrei5k","ldcm":"7mf14g","d1nu":"ycf3u0","6dpa":"dm8j4z","obi7":"esfut8","foyd":"nss54a","xzr8":"1nr27e","1giy":"pg4d28","lyhh":"chsek1","65p6":"5o3p0i","kifx":"hum02u","msl6":"guhjuq","s4yp":"fdaxy0","zbho":"xe1o5t","uf3g":"cxofdr","57jo":"3vdcsv","fgo7":"goqsix","ij8n":"m70wuj","vhrx":"x05lai","5xop":"vcv74b","wdy6":"dvfrb9","cmby":"idjdqf","j1k3":"ejn5i1","l3mz":"or099e","m5nj":"uz9j7b","veup":"6ahchp","2kom":"u2py86","p7rz":"tpatro","avbu":"vrcwku","ecds":"arr8cq","b1a7":"3kh0ta","0svg":"scknkg","7kxq":"51up6z","08al":"junprv","7d2f":"zj39xr","kz1t":"p7e4by","dj7d":"sky1uw","z03s":"0jv7h7","p1un":"1tqifp","6qmh":"vt25pu","9xaf":"f2q19x","zixj":"tbqf1u","qmkk":"djr1kj","humf":"wz4h1l","35x5":"zfgfdj","ff1e":"1qplzj","w12h":"d59c46","1xbm":"kwkf02","nx2r":"on1z5a","xtv0":"wt3tz3","ip1a":"bf7jq2","4wre":"1h5jsi","182h":"hf3n59","sxv9":"8ynqy5","0om9":"995lh8","mki3":"xwsja3","olyw":{"1xbm":"ung11k","nx2r":"on1z5a","ip1a":"bf7jq2"},"arr":[9,8,7,6],"c5ya":"4xskf5","8x8m":"4ks8pu"} -------------------------------------------------------------------------------- /dev/data/large.json: -------------------------------------------------------------------------------- 1 | {"901y":"vcohat","e2aw":"pt37op","o6yy":"11lozj","phb7":"xrjwgj","fxet":"6c4dsb","iqzs":"n27jjs","3ouj":"5ps8ii","fm2x":"2m4inh","566j":"rfv4kx","ga71":"rc42lf","15ku":"f4g0cu","22ql":"0iujmq","dkhv":"gjq0sw","v0h0":"n8dprr","jxs3":"3c6apn","qbge":"i5btto","40ls":"d5r41q","rxc9":"y3cnc4","2egy":"ry07xq","l0r8":"7o2itg","s67y":"b89xh9","2kz3":"yrwd9p","dilm":"78rlwd","zufw":"z7e712","j0en":"g7xg5n","yq4g":"o7aa0j","3l0g":"he4464","h0qi":"b1lr1r","aazk":"ayrqaz","e5r2":"thuqxq","et8n":"kr4bx5","7dfw":"zc9r6q","sww1":"u8zbkk","mxo2":"0699mz","lccz":"7xl4zj","qcmt":"llx3iz","ggv3":"tz71c3","ctq6":"paguaz","7aju":"kptuex","rtes":"kdgwvz","uqmp":"wusb8n","9q8w":"mrei5k","ldcm":"7mf14g","d1nu":"ycf3u0","6dpa":"dm8j4z","obi7":"esfut8","foyd":"nss54a","xzr8":"1nr27e","1giy":"pg4d28","lyhh":"chsek1","65p6":"5o3p0i","kifx":"hum02u","msl6":"guhjuq","s4yp":"fdaxy0","zbho":"xe1o5t","uf3g":"cxofdr","57jo":"3vdcsv","fgo7":"goqsix","ij8n":"m70wuj","vhrx":"x05lai","5xop":"vcv74b","wdy6":"dvfrb9","cmby":"idjdqf","j1k3":"ejn5i1","l3mz":"or099e","m5nj":"uz9j7b","veup":"6ahchp","2kom":"u2py86","p7rz":"tpatro","avbu":"vrcwku","ecds":"arr8cq","b1a7":"3kh0ta","0svg":"scknkg","7kxq":"51up6z","08al":"junprv","7d2f":"zj39xr","kz1t":"p7e4by","dj7d":"sky1uw","z03s":"0jv7h7","p1un":"1tqifp","6qmh":"vt25pu","9xaf":"f2q19x","zixj":"tbqf1u","qmkk":"djr1kj","humf":"wz4h1l","35x5":"zfgfdj","ff1e":"1qplzj","w12h":"d59c46","1xbm":"kwkf02","nx2r":"on1z5a","xtv0":"wt3tz3","ip1a":"bf7jq2","4wre":"1h5jsi","182h":"hf3n59","sxv9":"8ynqy5","0om9":"995lh8","mki3":"xwsja3","olyw":{"1xbm":"ung11k","nx2r":"on1z5a","ip1a":"bf7jq2"},"arr":[9,8,7,6],"c5ya":"4xskf5","8x8m":"4ks8pu"} -------------------------------------------------------------------------------- /dev/data/string.txt: -------------------------------------------------------------------------------- 1 | ok -------------------------------------------------------------------------------- /dev/data/success.json: -------------------------------------------------------------------------------- 1 | { 2 | "key": "foo\nbar\tyoo", 3 | "-->\tyo\n'\"/>