r> is-posix-bracket 11e3a9652a first 7 jaren geleden is-primitive 11e3a9652a first 7 jaren geleden is-promise 11e3a9652a first 7 jaren geleden is-property 11e3a9652a first 7 jaren geleden is-regex 11e3a9652a first 7 jaren geleden is-resolvable 11e3a9652a first 7 jaren geleden is-stream 11e3a9652a first 7 jaren geleden is-svg 11e3a9652a first 7 jaren geleden is-symbol 11e3a9652a first 7 jaren geleden is-typedarray 11e3a9652a first 7 jaren geleden is-utf8 11e3a9652a first 7 jaren geleden is-whitespace 11e3a9652a first 7 jaren geleden is-windows 11e3a9652a first 7 jaren geleden is-wsl 11e3a9652a first 7 jaren geleden isarray 11e3a9652a first 7 jaren geleden isexe 11e3a9652a first 7 jaren geleden isobject 11e3a9652a first 7 jaren geleden isstream 11e3a9652a first 7 jaren geleden istanbul-api 11e3a9652a first 7 jaren geleden istanbul-lib-coverage 11e3a9652a first 7 jaren geleden istanbul-lib-hook 11e3a9652a first 7 jaren geleden istanbul-lib-instrument 11e3a9652a first 7 jaren geleden istanbul-lib-report 11e3a9652a first 7 jaren geleden istanbul-lib-source-maps 11e3a9652a first 7 jaren geleden istanbul-reports 11e3a9652a first 7 jaren geleden jest 11e3a9652a first 7 jaren geleden jest-changed-files 11e3a9652a first 7 jaren geleden jest-config 11e3a9652a first 7 jaren geleden jest-diff 11e3a9652a first 7 jaren geleden jest-docblock 11e3a9652a first 7 jaren geleden jest-environment-jsdom 11e3a9652a first 7 jaren geleden jest-environment-node 11e3a9652a first 7 jaren geleden jest-get-type 11e3a9652a first 7 jaren geleden jest-haste-map 11e3a9652a first 7 jaren geleden jest-jasmine2 11e3a9652a first 7 jaren geleden jest-leak-detector 11e3a9652a first 7 jaren geleden jest-matcher-utils 11e3a9652a first 7 jaren geleden jest-message-util 11e3a9652a first 7 jaren geleden jest-mock 11e3a9652a first 7 jaren geleden jest-regex-util 11e3a9652a first 7 jaren geleden jest-resolve 11e3a9652a first 7 jaren geleden jest-resolve-dependencies 11e3a9652a first 7 jaren geleden jest-runner 11e3a9652a first 7 jaren geleden jest-runtime 11e3a9652a first 7 jaren geleden jest-serializer 11e3a9652a first 7 jaren geleden jest-serializer-vue 11e3a9652a first 7 jaren geleden jest-snapshot 11e3a9652a first 7 jaren geleden jest-util 11e3a9652a first 7 jaren geleden jest-validate 11e3a9652a first 7 jaren geleden jest-worker 11e3a9652a first 7 jaren geleden js-base64 11e3a9652a first 7 jaren geleden js-beautify 11e3a9652a first 7 jaren geleden js-tokens 11e3a9652a first 7 jaren geleden js-yaml 11e3a9652a first 7 jaren geleden jsbn 11e3a9652a first 7 jaren geleden jsdom 11e3a9652a first 7 jaren geleden jsesc 11e3a9652a first 7 jaren geleden json-loader 11e3a9652a first 7 jaren geleden json-schema 11e3a9652a first 7 jaren geleden json-schema-traverse 11e3a9652a first 7 jaren geleden json-stable-stringify 11e3a9652a first 7 jaren geleden json-stable-stringify-without-jsonify 11e3a9652a first 7 jaren geleden json-stringify-safe 11e3a9652a first 7 jaren geleden json3 11e3a9652a first 7 jaren geleden json5 11e3a9652a first 7 jaren geleden jsonify 11e3a9652a first 7 jaren geleden jsonpointer 11e3a9652a first 7 jaren geleden jsprim 11e3a9652a first 7 jaren geleden kew 11e3a9652a first 7 jaren geleden killable 11e3a9652a first 7 jaren geleden kind-of 11e3a9652a first 7 jaren geleden last-call-webpack-plugin 11e3a9652a first 7 jaren geleden lazy-cache 11e3a9652a first 7 jaren geleden lcid 11e3a9652a first 7 jaren geleden left-pad 11e3a9652a first 7 jaren geleden leven 11e3a9652a first 7 jaren geleden levn 11e3a9652a first 7 jaren geleden load-json-file 11e3a9652a first 7 jaren geleden loader-fs-cache 11e3a9652a first 7 jaren geleden loader-runner 11e3a9652a first 7 jaren geleden loader-utils 11e3a9652a first 7 jaren geleden locate-path 11e3a9652a first 7 jaren geleden lodash 11e3a9652a first 7 jaren geleden lodash._arraycopy 11e3a9652a first 7 jaren geleden lodash._arrayeach 11e3a9652a first 7 jaren geleden lodash._baseassign 11e3a9652a first 7 jaren geleden lodash._baseclone 11e3a9652a first 7 jaren geleden lodash._basecopy 11e3a9652a first 7 jaren geleden lodash._basecreate 11e3a9652a first 7 jaren geleden lodash._basefor 11e3a9652a first 7 jaren geleden lodash._bindcallback 11e3a9652a first 7 jaren geleden lodash._getnative 11e3a9652a first 7 jaren geleden lodash._isiterateecall 11e3a9652a first 7 jaren geleden lodash._stack 11e3a9652a first 7 jaren geleden lodash.assign 11e3a9652a first 7 jaren geleden lodash.camelcase 11e3a9652a first 7 jaren geleden lodash.clone 11e3a9652a first 7 jaren geleden lodash.clonedeep 11e3a9652a first 7 jaren geleden lodash.create 11e3a9652a first 7 jaren geleden lodash.defaultsdeep 11e3a9652a first 7 jaren geleden lodash.isarguments 11e3a9652a first 7 jaren geleden lodash.isarray 11e3a9652a first 7 jaren geleden lodash.isplainobject 11e3a9652a first 7 jaren geleden lodash.keys 11e3a9652a first 7 jaren geleden lodash.keysin 11e3a9652a first 7 jaren geleden lodash.memoize 11e3a9652a first 7 jaren geleden lodash.mergewith 11e3a9652a first 7 jaren geleden lodash.rest 11e3a9652a first 7 jaren geleden lodash.sortby 11e3a9652a first 7 jaren geleden lodash.tail 11e3a9652a first 7 jaren geleden lodash.uniq 11e3a9652a first 7 jaren geleden log-symbols 11e3a9652a first 7 jaren geleden loglevel 11e3a9652a first 7 jaren geleden longest 11e3a9652a first 7 jaren geleden loose-envify 11e3a9652a first 7 jaren geleden loud-rejection 11e3a9652a first 7 jaren geleden lower-case 11e3a9652a first 7 jaren geleden lru-cache 11e3a9652a first 7 jaren geleden macaddress 11e3a9652a first 7 jaren geleden make-dir 11e3a9652a first 7 jaren geleden makeerror 11e3a9652a first 7 jaren geleden map-cache 11e3a9652a first 7 jaren geleden map-obj 11e3a9652a first 7 jaren geleden map-visit 11e3a9652a first 7 jaren geleden math-expression-evaluator 11e3a9652a first 7 jaren geleden md5.js 11e3a9652a first 7 jaren geleden media-typer 11e3a9652a first 7 jaren geleden mem 11e3a9652a first 7 jaren geleden memory-fs 11e3a9652a first 7 jaren geleden meow 11e3a9652a first 7 jaren geleden merge 11e3a9652a first 7 jaren geleden merge-descriptors 11e3a9652a first 7 jaren geleden merge-stream 11e3a9652a first 7 jaren geleden methods 11e3a9652a first 7 jaren geleden micromatch 11e3a9652a first 7 jaren geleden miller-rabin 11e3a9652a first 7 jaren geleden mime 11e3a9652a first 7 jaren geleden mime-db 11e3a9652a first 7 jaren geleden mime-types 11e3a9652a first 7 jaren geleden mimic-fn 11e3a9652a first 7 jaren geleden minimalistic-assert 11e3a9652a first 7 jaren geleden minimalistic-crypto-utils 11e3a9652a first 7 jaren geleden minimatch 11e3a9652a first 7 jaren geleden minimist 11e3a9652a first 7 jaren geleden mississippi 11e3a9652a first 7 jaren geleden mixin-deep 11e3a9652a first 7 jaren geleden mixin-object 11e3a9652a first 7 jaren geleden mkdirp 11e3a9652a first 7 jaren geleden mkpath 11e3a9652a first 7 jaren geleden mocha-nightwatch 11e3a9652a first 7 jaren geleden move-concurrently 11e3a9652a first 7 jaren geleden ms 11e3a9652a first 7 jaren geleden multicast-dns 11e3a9652a first 7 jaren geleden multicast-dns-service-types 11e3a9652a first 7 jaren geleden mute-stream 11e3a9652a first 7 jaren geleden nan 11e3a9652a first 7 jaren geleden nanomatch 11e3a9652a first 7 jaren geleden natural-compare 11e3a9652a first 7 jaren geleden negotiator 11e3a9652a first 7 jaren geleden neo-async 11e3a9652a first 7 jaren geleden netmask 11e3a9652a first 7 jaren geleden next-tick 11e3a9652a first 7 jaren geleden nightwatch 11e3a9652a first 7 jaren geleden no-case 11e3a9652a first 7 jaren geleden node-cache 11e3a9652a first 7 jaren geleden node-forge 11e3a9652a first 7 jaren geleden node-gyp 11e3a9652a first 7 jaren geleden node-int64 11e3a9652a first 7 jaren geleden node-libs-browser 11e3a9652a first 7 jaren geleden node-notifier 11e3a9652a first 7 jaren geleden node-sass 11e3a9652a first 7 jaren geleden nopt 11e3a9652a first 7 jaren geleden normalize-package-data 11e3a9652a first 7 jaren geleden normalize-path 11e3a9652a first 7 jaren geleden normalize-range 11e3a9652a first 7 jaren geleden normalize-url 11e3a9652a first 7 jaren geleden normalize-wheel 11e3a9652a first 7 jaren geleden npm-run-path 11e3a9652a first 7 jaren geleden npmlog 11e3a9652a first 7 jaren geleden nth-check 11e3a9652a first 7 jaren geleden num2fraction 11e3a9652a first 7 jaren geleden number-is-nan 11e3a9652a first 7 jaren geleden nwmatcher 11e3a9652a first 7 jaren geleden oauth-sign 11e3a9652a first 7 jaren geleden object-assign 11e3a9652a first 7 jaren geleden object-copy 11e3a9652a first 7 jaren geleden object-hash 11e3a9652a first 7 jaren geleden object-keys 11e3a9652a first 7 jaren geleden object-visit 11e3a9652a first 7 jaren geleden object.getownpropertydescriptors 11e3a9652a first 7 jaren geleden object.omit 11e3a9652a first 7 jaren geleden object.pick 11e3a9652a first 7 jaren geleden obuf 11e3a9652a first 7 jaren geleden on-finished 11e3a9652a first 7 jaren geleden on-headers 11e3a9652a first 7 jaren geleden once 11e3a9652a first 7 jaren geleden onetime 11e3a9652a first 7 jaren geleden opener 11e3a9652a first 7 jaren geleden opn 11e3a9652a first 7 jaren geleden optimist 11e3a9652a first 7 jaren geleden optimize-css-assets-webpack-plugin 11e3a9652a first 7 jaren geleden optionator 11e3a9652a first 7 jaren geleden ora 11e3a9652a first 7 jaren geleden original 11e3a9652a first 7 jaren geleden os-browserify 11e3a9652a first 7 jaren geleden os-homedir 11e3a9652a first 7 jaren geleden os-locale 11e3a9652a first 7 jaren geleden os-tmpdir 11e3a9652a first 7 jaren geleden osenv 11e3a9652a first 7 jaren geleden p-finally 11e3a9652a first 7 jaren geleden p-limit 11e3a9652a first 7 jaren geleden p-locate 11e3a9652a first 7 jaren geleden p-map 11e3a9652a first 7 jaren geleden p-try 11e3a9652a first 7 jaren geleden pac-proxy-agent 11e3a9652a first 7 jaren geleden pac-resolver 11e3a9652a first 7 jaren geleden pako 11e3a9652a first 7 jaren geleden parallel-transform 11e3a9652a first 7 jaren geleden param-case 11e3a9652a first 7 jaren geleden parse-asn1 11e3a9652a first 7 jaren geleden parse-glob 11e3a9652a first 7 jaren geleden parse-json 11e3a9652a first 7 jaren geleden parse5 11e3a9652a first 7 jaren geleden parseurl 11e3a9652a first 7 jaren geleden pascalcase 11e3a9652a first 7 jaren geleden path-browserify 11e3a9652a first 7 jaren geleden path-dirname 11e3a9652a first 7 jaren geleden path-exists 11e3a9652a first 7 jaren geleden path-is-absolute 11e3a9652a first 7 jaren geleden path-is-inside 11e3a9652a first 7 jaren geleden path-key 11e3a9652a first 7 jaren geleden path-parse 11e3a9652a first 7 jaren geleden path-to-regexp 11e3a9652a first 7 jaren geleden path-type 11e3a9652a first 7 jaren geleden pbkdf2 11e3a9652a first 7 jaren geleden pend 11e3a9652a first 7 jaren geleden performance-now 11e3a9652a first 7 jaren geleden pify 11e3a9652a first 7 jaren geleden pinkie 11e3a9652a first 7 jaren geleden pinkie-promise 11e3a9652a first 7 jaren geleden pkg-dir 11e3a9652a first 7 jaren geleden pluralize 11e3a9652a first 7 jaren geleden pn 11e3a9652a first 7 jaren geleden portfinder 11e3a9652a first 7 jaren geleden posix-character-classes 11e3a9652a first 7 jaren geleden postcss 11e3a9652a first 7 jaren geleden postcss-calc 11e3a9652a first 7 jaren geleden postcss-colormin 11e3a9652a first 7 jaren geleden postcss-convert-values 11e3a9652a first 7 jaren geleden postcss-discard-comments 11e3a9652a first 7 jaren geleden postcss-discard-duplicates 11e3a9652a first 7 jaren geleden postcss-discard-empty 11e3a9652a first 7 jaren geleden postcss-discard-overridden 11e3a9652a first 7 jaren geleden postcss-discard-unused 11e3a9652a first 7 jaren geleden postcss-filter-plugins 11e3a9652a first 7 jaren geleden postcss-import 11e3a9652a first 7 jaren geleden postcss-load-config 11e3a9652a first 7 jaren geleden postcss-load-options 11e3a9652a first 7 jaren geleden postcss-load-plugins 11e3a9652a first 7 jaren geleden postcss-loader 11e3a9652a first 7 jaren geleden postcss-merge-idents 11e3a9652a first 7 jaren geleden postcss-merge-longhand 11e3a9652a first 7 jaren geleden postcss-merge-rules 11e3a9652a first 7 jaren geleden postcss-message-helpers 11e3a9652a first 7 jaren geleden postcss-minify-font-values 11e3a9652a first 7 jaren geleden postcss-minify-gradients 11e3a9652a first 7 jaren geleden postcss-minify-params 11e3a9652a first 7 jaren geleden postcss-minify-selectors 11e3a9652a first 7 jaren geleden postcss-modules-extract-imports 11e3a9652a first 7 jaren geleden postcss-modules-local-by-default 11e3a9652a first 7 jaren geleden postcss-modules-scope 11e3a9652a first 7 jaren geleden postcss-modules-values 11e3a9652a first 7 jaren geleden postcss-normalize-charset 11e3a9652a first 7 jaren geleden postcss-normalize-url 11e3a9652a first 7 jaren geleden postcss-ordered-values 11e3a9652a first 7 jaren geleden postcss-reduce-idents 11e3a9652a first 7 jaren geleden postcss-reduce-initial 11e3a9652a first 7 jaren geleden postcss-reduce-transforms 11e3a9652a first 7 jaren geleden postcss-selector-parser 11e3a9652a first 7 jaren geleden postcss-svgo 11e3a9652a first 7 jaren geleden postcss-unique-selectors 11e3a9652a first 7 jaren geleden postcss-url 11e3a9652a first 7 jaren geleden postcss-value-parser 11e3a9652a first 7 jaren geleden postcss-zindex 11e3a9652a first 7 jaren geleden prelude-ls 11e3a9652a first 7 jaren geleden prepend-http 11e3a9652a first 7 jaren geleden preserve 11e3a9652a first 7 jaren geleden prettier 11e3a9652a first 7 jaren geleden pretty 11e3a9652a first 7 jaren geleden pretty-error 11e3a9652a first 7 jaren geleden pretty-format 11e3a9652a first 7 jaren geleden private 11e3a9652a first 7 jaren geleden process 11e3a9652a first 7 jaren geleden process-nextick-args 11e3a9652a first 7 jaren geleden progress 11e3a9652a first 7 jaren geleden promise-inflight 11e3a9652a first 7 jaren geleden proto-list 11e3a9652a first 7 jaren geleden proxy-addr 11e3a9652a first 7 jaren geleden proxy-agent 11e3a9652a first 7 jaren geleden prr 11e3a9652a first 7 jaren geleden pseudomap 11e3a9652a first 7 jaren geleden public-encrypt 11e3a9652a first 7 jaren geleden pump 11e3a9652a first 7 jaren geleden pumpify 11e3a9652a first 7 jaren geleden punycode 11e3a9652a first 7 jaren geleden q 11e3a9652a first 7 jaren geleden qrcodejs2 11e3a9652a first 7 jaren geleden qs 11e3a9652a first 7 jaren geleden query-string 11e3a9652a first 7 jaren geleden querystring 11e3a9652a first 7 jaren geleden querystring-es3 11e3a9652a first 7 jaren geleden querystringify 11e3a9652a first 7 jaren geleden randomatic 11e3a9652a first 7 jaren geleden randombytes 11e3a9652a first 7 jaren geleden randomfill 11e3a9652a first 7 jaren geleden range-parser 11e3a9652a first 7 jaren geleden raw-body 11e3a9652a first 7 jaren geleden read-cache 11e3a9652a first 7 jaren geleden read-pkg 11e3a9652a first 7 jaren geleden read-pkg-up 11e3a9652a first 7 jaren geleden readable-stream 11e3a9652a first 7 jaren geleden readdirp 11e3a9652a first 7 jaren geleden realpath-native 11e3a9652a first 7 jaren geleden rechoir 11e3a9652a first 7 jaren geleden redent 11e3a9652a first 7 jaren geleden reduce-css-calc 11e3a9652a first 7 jaren geleden reduce-function-call 11e3a9652a first 7 jaren geleden regenerate 11e3a9652a first 7 jaren geleden regenerator-runtime 11e3a9652a first 7 jaren geleden regenerator-transform 11e3a9652a first 7 jaren geleden regex-cache 11e3a9652a first 7 jaren geleden regex-not 11e3a9652a first 7 jaren geleden regexpp 11e3a9652a first 7 jaren geleden regexpu-core 11e3a9652a first 7 jaren geleden regjsgen 11e3a9652a first 7 jaren geleden regjsparser 11e3a9652a first 7 jaren geleden relateurl 11e3a9652a first 7 jaren geleden remove-trailing-separator 11e3a9652a first 7 jaren geleden renderkid 11e3a9652a first 7 jaren geleden repeat-element 11e3a9652a first 7 jaren geleden repeat-string 11e3a9652a first 7 jaren geleden repeating 11e3a9652a first 7 jaren geleden request 11e3a9652a first 7 jaren geleden request-promise-core 11e3a9652a first 7 jaren geleden request-promise-native 11e3a9652a first 7 jaren geleden require-directory 11e3a9652a first 7 jaren geleden require-from-string 11e3a9652a first 7 jaren geleden require-main-filename 11e3a9652a first 7 jaren geleden require-uncached 11e3a9652a first 7 jaren geleden requires-port 11e3a9652a first 7 jaren geleden resize-observer-polyfill 11e3a9652a first 7 jaren geleden resolve 11e3a9652a first 7 jaren geleden resolve-cwd 11e3a9652a first 7 jaren geleden resolve-from 11e3a9652a first 7 jaren geleden resolve-url 11e3a9652a first 7 jaren geleden restore-cursor 11e3a9652a first 7 jaren geleden ret 11e3a9652a first 7 jaren geleden right-align 11e3a9652a first 7 jaren geleden rimraf 11e3a9652a first 7 jaren geleden ripemd160 11e3a9652a first 7 jaren geleden run-async 11e3a9652a first 7 jaren geleden run-queue 11e3a9652a first 7 jaren geleden rx-lite 11e3a9652a first 7 jaren geleden rx-lite-aggregates 11e3a9652a first 7 jaren geleden safe-buffer 11e3a9652a first 7 jaren geleden safe-regex 11e3a9652a first 7 jaren geleden safer-buffer 11e3a9652a first 7 jaren geleden sane 11e3a9652a first 7 jaren geleden sass-graph 11e3a9652a first 7 jaren geleden sass-loader 11e3a9652a first 7 jaren geleden sax 11e3a9652a first 7 jaren geleden schema-utils 11e3a9652a first 7 jaren geleden scss-tokenizer 11e3a9652a first 7 jaren geleden select-hose 11e3a9652a first 7 jaren geleden selenium-server 11e3a9652a first 7 jaren geleden selfsigned 11e3a9652a first 7 jaren geleden semver 11e3a9652a first 7 jaren geleden send 11e3a9652a first 7 jaren geleden serialize-javascript 11e3a9652a first 7 jaren geleden serve-index 11e3a9652a first 7 jaren geleden serve-static 11e3a9652a first 7 jaren geleden set-blocking 11e3a9652a first 7 jaren geleden set-immediate-shim 11e3a9652a first 7 jaren geleden set-value 11e3a9652a first 7 jaren geleden setimmediate 11e3a9652a first 7 jaren geleden setprototypeof 11e3a9652a first 7 jaren geleden sha.js 11e3a9652a first 7 jaren geleden shallow-clone 11e3a9652a first 7 jaren geleden shebang-command 11e3a9652a first 7 jaren geleden shebang-regex 11e3a9652a first 7 jaren geleden shelljs 11e3a9652a first 7 jaren geleden shellwords 11e3a9652a first 7 jaren geleden sigmund 11e3a9652a first 7 jaren geleden signal-exit 11e3a9652a first 7 jaren geleden slash 11e3a9652a first 7 jaren geleden slice-ansi 11e3a9652a first 7 jaren geleden smart-buffer 11e3a9652a first 7 jaren geleden snapdragon 11e3a9652a first 7 jaren geleden snapdragon-node 11e3a9652a first 7 jaren geleden snapdragon-util 11e3a9652a first 7 jaren geleden sntp 11e3a9652a first 7 jaren geleden sockjs 11e3a9652a first 7 jaren geleden sockjs-client 11e3a9652a first 7 jaren geleden socks 11e3a9652a first 7 jaren geleden socks-proxy-agent 11e3a9652a first 7 jaren geleden sort-keys 11e3a9652a first 7 jaren geleden source-list-map 11e3a9652a first 7 jaren geleden source-map 11e3a9652a first 7 jaren geleden source-map-resolve 11e3a9652a first 7 jaren geleden source-map-support 11e3a9652a first 7 jaren geleden source-map-url 11e3a9652a first 7 jaren geleden spdx-correct 11e3a9652a first 7 jaren geleden spdx-exceptions 11e3a9652a first 7 jaren geleden spdx-expression-parse 11e3a9652a first 7 jaren geleden spdx-license-ids 11e3a9652a first 7 jaren geleden spdy 11e3a9652a first 7 jaren geleden spdy-transport 11e3a9652a first 7 jaren geleden split-string 11e3a9652a first 7 jaren geleden sprintf-js 11e3a9652a first 7 jaren geleden sshpk 11e3a9652a first 7 jaren geleden ssri 11e3a9652a first 7 jaren geleden stack-utils 11e3a9652a first 7 jaren geleden stackframe 11e3a9652a first 7 jaren geleden static-extend 11e3a9652a first 7 jaren geleden statuses 11e3a9652a first 7 jaren geleden stdout-stream 11e3a9652a first 7 jaren geleden stealthy-require 11e3a9652a first 7 jaren geleden stream-browserify 11e3a9652a first 7 jaren geleden stream-each 11e3a9652a first 7 jaren geleden stream-http 11e3a9652a first 7 jaren geleden stream-shift 11e3a9652a first 7 jaren geleden strict-uri-encode 11e3a9652a first 7 jaren geleden string-length 11e3a9652a first 7 jaren geleden string-width 11e3a9652a first 7 jaren geleden string_decoder 11e3a9652a first 7 jaren geleden stringstream 11e3a9652a first 7 jaren geleden strip-ansi 11e3a9652a first 7 jaren geleden strip-bom 11e3a9652a first 7 jaren geleden strip-eof 11e3a9652a first 7 jaren geleden strip-indent 11e3a9652a first 7 jaren geleden strip-json-comments 11e3a9652a first 7 jaren geleden supports-color 11e3a9652a first 7 jaren geleden svg-tags 11e3a9652a first 7 jaren geleden svgo 11e3a9652a first 7 jaren geleden symbol-tree 11e3a9652a first 7 jaren geleden table 11e3a9652a first 7 jaren geleden tapable 11e3a9652a first 7 jaren geleden tar 11e3a9652a first 7 jaren geleden test-exclude 11e3a9652a first 7 jaren geleden text-table 11e3a9652a first 7 jaren geleden throat 11e3a9652a first 7 jaren geleden throttle-debounce 11e3a9652a first 7 jaren geleden through 11e3a9652a first 7 jaren geleden through2 11e3a9652a first 7 jaren geleden thunkify 11e3a9652a first 7 jaren geleden thunky 11e3a9652a first 7 jaren geleden time-stamp 11e3a9652a first 7 jaren geleden timers-browserify 11e3a9652a first 7 jaren geleden tmp 11e3a9652a first 7 jaren geleden tmpl 11e3a9652a first 7 jaren geleden to-arraybuffer 11e3a9652a first 7 jaren geleden to-fast-properties 11e3a9652a first 7 jaren geleden to-object-path 11e3a9652a first 7 jaren geleden to-regex 11e3a9652a first 7 jaren geleden to-regex-range 11e3a9652a first 7 jaren geleden toposort 11e3a9652a first 7 jaren geleden tough-cookie 11e3a9652a first 7 jaren geleden tr46 11e3a9652a first 7 jaren geleden trim-newlines 11e3a9652a first 7 jaren geleden trim-right 11e3a9652a first 7 jaren geleden true-case-path 11e3a9652a first 7 jaren geleden tryer 11e3a9652a first 7 jaren geleden tsconfig 11e3a9652a first 7 jaren geleden tty-browserify 11e3a9652a first 7 jaren geleden tunnel-agent 11e3a9652a first 7 jaren geleden tweetnacl 11e3a9652a first 7 jaren geleden type-check 11e3a9652a first 7 jaren geleden type-detect 11e3a9652a first 7 jaren geleden type-is 11e3a9652a first 7 jaren geleden typedarray 11e3a9652a first 7 jaren geleden uglify-js 11e3a9652a first 7 jaren geleden uglify-to-browserify 11e3a9652a first 7 jaren geleden uglifyjs-webpack-plugin 11e3a9652a first 7 jaren geleden union-value 11e3a9652a first 7 jaren geleden uniq 11e3a9652a first 7 jaren geleden uniqid 11e3a9652a first 7 jaren geleden uniqs 11e3a9652a first 7 jaren geleden unique-filename 11e3a9652a first 7 jaren geleden unique-slug 11e3a9652a first 7 jaren geleden unpipe 11e3a9652a first 7 jaren geleden unset-value 11e3a9652a first 7 jaren geleden upath 11e3a9652a first 7 jaren geleden upper-case 11e3a9652a first 7 jaren geleden uri-js 11e3a9652a first 7 jaren geleden urix 11e3a9652a first 7 jaren geleden url 11e3a9652a first 7 jaren geleden url-loader 11e3a9652a first 7 jaren geleden url-parse 11e3a9652a first 7 jaren geleden use 11e3a9652a first 7 jaren geleden util 11e3a9652a first 7 jaren geleden util-deprecate 11e3a9652a first 7 jaren geleden util.promisify 11e3a9652a first 7 jaren geleden utila 11e3a9652a first 7 jaren geleden utils-merge 11e3a9652a first 7 jaren geleden uuid 11e3a9652a first 7 jaren geleden validate-npm-package-license 11e3a9652a first 7 jaren geleden vary 11e3a9652a first 7 jaren geleden vendors 11e3a9652a first 7 jaren geleden verror 11e3a9652a first 7 jaren geleden vm-browserify 11e3a9652a first 7 jaren geleden vue 11e3a9652a first 7 jaren geleden vue-eslint-parser 11e3a9652a first 7 jaren geleden vue-hot-reload-api 11e3a9652a first 7 jaren geleden vue-jest 11e3a9652a first 7 jaren geleden vue-loader 11e3a9652a first 7 jaren geleden vue-router 11e3a9652a first 7 jaren geleden vue-style-loader 11e3a9652a first 7 jaren geleden vue-template-compiler 11e3a9652a first 7 jaren geleden vue-template-es2015-compiler 11e3a9652a first 7 jaren geleden w3c-hr-time 11e3a9652a first 7 jaren geleden walker 11e3a9652a first 7 jaren geleden watch 11e3a9652a first 7 jaren geleden watchpack 11e3a9652a first 7 jaren geleden wbuf 11e3a9652a first 7 jaren geleden webidl-conversions 11e3a9652a first 7 jaren geleden webpack 11e3a9652a first 7 jaren geleden webpack-bundle-analyzer 11e3a9652a first 7 jaren geleden webpack-dev-middleware 11e3a9652a first 7 jaren geleden webpack-dev-server 11e3a9652a first 7 jaren geleden webpack-merge 11e3a9652a first 7 jaren geleden webpack-sources 11e3a9652a first 7 jaren geleden websocket-driver 11e3a9652a first 7 jaren geleden websocket-extensions 11e3a9652a first 7 jaren geleden whatwg-encoding 11e3a9652a first 7 jaren geleden whatwg-mimetype 11e3a9652a first 7 jaren geleden whatwg-url 11e3a9652a first 7 jaren geleden whet.extend 11e3a9652a first 7 jaren geleden which 11e3a9652a first 7 jaren geleden which-module 11e3a9652a first 7 jaren geleden wide-align 11e3a9652a first 7 jaren geleden window-size 11e3a9652a first 7 jaren geleden wordwrap 11e3a9652a first 7 jaren geleden worker-farm 11e3a9652a first 7 jaren geleden wrap-ansi 11e3a9652a first 7 jaren geleden wrappy 11e3a9652a first 7 jaren geleden write 11e3a9652a first 7 jaren geleden write-file-atomic 11e3a9652a first 7 jaren geleden ws 11e3a9652a first 7 jaren geleden xml-name-validator 11e3a9652a first 7 jaren geleden xregexp 11e3a9652a first 7 jaren geleden xtend 11e3a9652a first 7 jaren geleden xxhashjs 11e3a9652a first 7 jaren geleden y18n 11e3a9652a first 7 jaren geleden yallist 11e3a9652a first 7 jaren geleden yargs 11e3a9652a first 7 jaren geleden yargs-parser 11e3a9652a first 7 jaren geleden yauzl 11e3a9652a first 7 jaren geleden zrender 11e3a9652a first 7 jaren geleden kodo - Gogs: Go Git Service

Няма описание

member_views.py 13KB

    # -*- coding: utf-8 -*- from __future__ import division from django.conf import settings from django.db import transaction from django_logit import logit from django_query import get_query_value from django_response import response from paginator import pagination from TimeConvert import TimeConvert as tc from account.models import UserInfo from coupon.models import UserCouponInfo from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityInfo, MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo) from utils.error.errno_utils import (MemberActivityStatusCode, MemberCouponStatusCode, MemberGoodStatusCode, MemberRightStatusCode, UserStatusCode) from utils.redis.connect import r from utils.redis.rkeys import MEMBER_SEND_COUPON_LIST, MEMBER_UPGRADE_INFO from utils.redis.rshot import get_member_shot_data @logit def member(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) rights = RightInfo.objects.filter(status=True).order_by('position') rights = [right.data for right in rights] goods = GoodsInfo.objects.filter(only_for_member=False, left_num__gt=0, status=True).order_by('position') goods = [good.data(user_id) for good in goods][:2] member_goods = GoodsInfo.objects.filter(only_for_member=True, left_num__gt=0, minlevel__lte=user.level, status=True).order_by('position') member_goods = [good.data(user_id) for good in member_goods] member_goods = [good for good in member_goods if not good['has_member_exchange']] upgrade_info, _ = r.getdel(MEMBER_UPGRADE_INFO % (brand_id, user_id)) return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'rights': rights, 'goods': goods, 'member_goods': member_goods, 'has_upgrade': bool(upgrade_info), }) @logit def rights(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') level = request.POST.get('level', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) rights = RightInfo.objects.filter(status=True).order_by('position') rights = [right.data for right in rights] return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'rights': rights, }) @logit def right_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') right_id = request.POST.get('right_id', '') try: right = RightInfo.objects.get(right_id=right_id) except RightInfo.DoesNotExist: return response(MemberRightStatusCode.RIGHT_NOT_FOUND) return response(200, data={ 'right': right.data, }) @logit def goods(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) raw_goods = GoodsInfo.objects.filter(only_for_member=False, left_num__gt=0, status=True).order_by('position', '-pk') banners = goods = [] for good in raw_goods: if good.is_slider: banners.append(good.data(user_id)) else: goods.append(good.data(user_id)) return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'banners': banners, 'goods': goods, }) @logit def good_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') good_id = request.POST.get('good_id', '') # 校验用户是否存在 try: user = UserInfo.objects.get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: good = GoodsInfo.objects.get(good_id=good_id) except GoodsInfo.DoesNotExist: return response(MemberGoodStatusCode.GOOD_NOT_FOUND) return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'good': good.details(user_id), }) @logit @transaction.atomic def good_exchange(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') good_id = request.POST.get('good_id', '') good_ids = get_query_value(request, 'good_ids', val_cast_type='listjson') name = request.POST.get('name', '') phone = request.POST.get('phone', '') address = request.POST.get('address', '') # 校验用户是否存在 try: user = UserInfo.objects.select_for_update().get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) if good_id: good_ids.append(good_id) goods = [] for good_id in good_ids: try: good = GoodsInfo.objects.select_for_update().get(good_id=good_id) except GoodsInfo.DoesNotExist: return response(MemberGoodStatusCode.GOOD_NOT_FOUND) if good.left_num <= 0: return response(MemberGoodStatusCode.GOOD_STOCK_NOT_ENOUGH) if user.level < good.minlevel: return response(MemberGoodStatusCode.GOOD_NO_EXCHANGE_PERMISSION) if user.integral < good.integral: return response(MemberGoodStatusCode.GOOD_INTEGRAL_NOT_ENOUGH) user.integral -= good.integral user.save() good.left_num -= 1 good.save() GoodsOrderInfo.objects.create( user_id=user_id, good_id=good_id, good_type=good.good_type, name=name, phone=phone, address=address, ) if good.good_type == GoodsInfo.PHYSICAL: # TODO: 通知客服发快递 pass else: # TODO: 发放虚拟商品 if good.coupon_id: # 发放券 r.rpushjson(MEMBER_SEND_COUPON_LIST, { 'brand_id': brand_id, 'user_id': user_id, 'coupon_id': good.coupon_id, }) else: pass goods.append(good.data(user_id)) return response(200, data={ 'nickname': user.final_nickname, 'avatar': user.avatar, 'integral': user.integral, 'freeze_integral': user.freeze_integral, 'final_integral': user.final_integral, 'shots_num': user.shots_num, 'level': user.level, 'goods': goods, }) @logit def coupons(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') page = request.POST.get('page', 1) num = request.POST.get('num', 20) coupons = UserCouponInfo.objects.filter(user_id=user_id, status=True).order_by('-pk') coupons, left = pagination(coupons, page, num) coupons = [coupon.data for coupon in coupons] return response(200, data={ 'coupons': coupons, 'left': left, }) @logit def user_coupon_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_coupon_id = request.POST.get('user_coupon_id', '') try: coupon = UserCouponInfo.objects.get(user_coupon_id=user_coupon_id, status=True) except UserCouponInfo.DoesNotExist: return response(MemberCouponStatusCode.USER_COUPON_NOT_FOUND) return response(200, data=coupon.data) @logit @transaction.atomic def user_coupon_use(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) admin_id = request.POST.get('admin_id', '') user_coupon_id = request.POST.get('user_coupon_id', '') try: coupon = UserCouponInfo.objects.select_for_update().get(user_coupon_id=user_coupon_id, status=True) except UserCouponInfo.DoesNotExist: return response(MemberCouponStatusCode.USER_COUPON_NOT_FOUND) if not coupon.has_actived: return response(MemberCouponStatusCode.USER_COUPON_NOT_ACTIVED) if coupon.has_expired: return response(MemberCouponStatusCode.USER_COUPON_HAS_EXPIRED) if coupon.has_used: return response(MemberCouponStatusCode.USER_COUPON_HAS_USED) coupon.has_used = True coupon.admin_id = admin_id coupon.used_at = tc.utc_datetime() coupon.save() return response(200, data=coupon.data) @logit def integrals(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) return response(200, data={ 'shots_types': get_member_shot_data(), 'enable_photo_upvote_integral': True, 'mp_url': 'https://mp.weixin.qq.com/s/2K6PAnf3KrxtrP40-DBuww', 'photo_upvote_integrals': { 'headers': [u'排名', u'日', u'周', u'月'], 'ranks': [ [u'第1名', '10', '20', '30'], [u'第2名', '5', '10', '15'], [u'第3名', '3', '6', '9'], [u'第4-10名', '1', '2', '3'], ] }, 'enable_activity_integral': True, }) @logit def activity_list(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') raw_activitys = MemberActivityInfo.objects.filter(status=True).order_by('-date') banners = [] activitys = [] for act in raw_activitys: if act.is_slider: banners.append(act.data(user_id)) else: activitys.append(act.data(user_id)) return response(200, data={ 'banners': banners, 'activitys': activitys, }) @logit def activity_detail(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') activity_id = request.POST.get('activity_id') try: act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) except MemberActivityInfo.DoesNotExist: return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) return response(200, data={ 'activity': act.details(user_id), }) @logit def activity_signup(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') activity_id = request.POST.get('activity_id') name = request.POST.get('name', '') phone = request.POST.get('phone', '') try: act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) except MemberActivityInfo.DoesNotExist: return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={ 'title': act.title, 'name': name, 'phone': phone, }) # TODO: 立即推送模版消息(报名成功,时间,地点) # TODO: 延迟(活动当天)推送模版消息(时间,地点) return response(200, data={ 'activity': act.data(user_id), }) @logit @transaction.atomic def activity_signin(request): brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) user_id = request.POST.get('user_id', '') activity_id = request.POST.get('activity_id') # 校验用户是否存在 try: user = UserInfo.objects.select_for_update().get(user_id=user_id) except UserInfo.DoesNotExist: return response(UserStatusCode.USER_NOT_FOUND) try: act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True) except MemberActivityInfo.DoesNotExist: return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND) MemberActivitySigninInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={ 'title': act.title, }) user.integral += act.integral user.save() # TODO: 立即推送模版消息(感谢您参加活动,获得的积分) return response(200, data={ 'activity': act.data(user_id), })