Skip to content

Commit ccfb1b1

Browse files
committed
make numeral a peer dependency
pass it in to create formatter function
1 parent b0ebf28 commit ccfb1b1

8 files changed

+49
-27
lines changed

README.md

+10-2
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@
44
55
This is a simple wrapper for [Numeral.js](http://numeraljs.com/).
66

7+
## Numeral.js 2 required
8+
9+
This package requires you to install Numeral.js as a peer dependency (`numeral@^2`). This way, you can use a different version of Numeral, or even a drop-in replacement with the same API.
10+
Use [version 1 of this package](https://www.npmjs.com/package/vue-filter-number-format/v/1.0.3) if you want it to install its own Numeral.js dependency as part of the bundle.
11+
712
## Suggested usage
813

9-
Register globally as a Vue filter in your main.js-ish file:
14+
Pass in Numeral to create the formatter function, and register globally as a Vue filter in your main.js-ish file:
1015

1116
```js
17+
import numeral from 'numeral';
1218
import numFormat from 'vue-filter-number-format';
1319

14-
Vue.filter('numFormat', numFormat);
20+
Vue.filter('numFormat', numFormat(numeral));
1521

1622
// new Vue ...
1723
```
@@ -31,6 +37,8 @@ See the [Numeral.js docs](http://numeraljs.com/) for other formatting options.
3137

3238
## Development
3339

40+
For convenience, this function is bundled with a VueJS dev site.
41+
3442
``` bash
3543
# install dependencies
3644
yarn

dist/vue-filter-number-format.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/vue-filter-number-format.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717
"dev": "cross-env NODE_ENV=development webpack-dev-server --hot --host 0.0.0.0",
1818
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
1919
},
20-
"dependencies": {
21-
"numeral": "^2.0.6"
22-
},
20+
"dependencies": {},
2321
"browserslist": [
2422
"> 1%",
2523
"last 2 versions",
@@ -33,10 +31,14 @@
3331
"cross-env": "^5.2.0",
3432
"css-loader": "^0.28.11",
3533
"file-loader": "^1.1.11",
34+
"numeral": "^2.0.6",
3635
"vue": "^2.6.10",
3736
"vue-loader": "^13.7.3",
3837
"vue-template-compiler": "^2.6.10",
3938
"webpack": "^3.12.0",
4039
"webpack-dev-server": "^2.11.5"
40+
},
41+
"peerDependencies": {
42+
"numeral": "^2.0.0"
4143
}
4244
}

src/App.vue

+7-2
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44
<p>{{ 123456 | numFormat }}</p>
55
<p>{{ 123456 | numFormat('0.000') }}</p>
66
<p>{{ 123456 | numFormat('0,0.0[0000]') }}</p>
7+
<p>{{ 69696969 | numFormat }} -> "69,696,969"</p>
8+
<p>{{ 420 | numFormat('0.000') }} -> "420.000"</p>
9+
<p>{{ 666 | numFormat('0,0o') }} -> "666th"</p>
10+
<p><input type="text" v-model="testVal"> -> "{{ testVal | numFormat }}"</p>
711
</div>
812
</template>
913

1014
<script>
11-
12-
1315
export default {
1416
name: 'app',
17+
data: () => ({
18+
testVal: 10304,
19+
}),
1520
}
1621
</script>
1722

src/filter-number-format.js

+12-6
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22
* number formatting helper functions
33
* can be used in vue filters
44
*/
5-
import numeral from 'numeral';
65

76
/**
8-
* apply a numeral.js formatting string to an input value
9-
* @param {Number} val input value to be changed
10-
* @param {String} [format='0,0'] numeral.js format string
11-
* @return {String} formatted output string
7+
* return a filter function
8+
* @param {Function} numeral Numeral.js peer dependency
9+
* @return {Function} number formatting filter
1210
*/
13-
export default (val, format = '0,0') => numeral(val).format(format);
11+
export default (numeral) => {
12+
/**
13+
* apply a Numeral.js formatting string to an input value
14+
* @param {Number} val input value to be changed
15+
* @param {String} [format='0,0'] Numeral.js format string
16+
* @return {String} formatted output string
17+
*/
18+
return (val, format = '0,0') => numeral(val).format(format);
19+
};

src/main.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import Vue from 'vue'
2+
import numeral from 'numeral';
23
import App from './App.vue'
34
import numFormat from './filter-number-format';
45

5-
Vue.filter('numFormat', numFormat);
6+
Vue.filter('numFormat', numFormat(numeral));
67

78
new Vue({
89
el: '#app',

yarn.lock

+11-11
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ babel-code-frame@^6.26.0:
236236
esutils "^2.0.2"
237237
js-tokens "^3.0.2"
238238

239-
babel-core@^6.26.0:
239+
babel-core@^6.26.0, babel-core@^6.26.3:
240240
version "6.26.3"
241241
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
242242
integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
@@ -388,7 +388,7 @@ babel-helpers@^6.24.1:
388388
babel-runtime "^6.22.0"
389389
babel-template "^6.24.1"
390390

391-
babel-loader@^7.1.2:
391+
babel-loader@^7.1.5:
392392
version "7.1.5"
393393
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68"
394394
integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==
@@ -676,7 +676,7 @@ babel-plugin-transform-strict-mode@^6.24.1:
676676
babel-runtime "^6.22.0"
677677
babel-types "^6.24.1"
678678

679-
babel-preset-env@^1.6.0:
679+
babel-preset-env@^1.7.0:
680680
version "1.7.0"
681681
resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
682682
integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==
@@ -1386,7 +1386,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
13861386
safe-buffer "^5.0.1"
13871387
sha.js "^2.4.8"
13881388

1389-
cross-env@^5.0.5:
1389+
cross-env@^5.2.0:
13901390
version "5.2.0"
13911391
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2"
13921392
integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==
@@ -1436,7 +1436,7 @@ [email protected]:
14361436
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
14371437
integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
14381438

1439-
css-loader@^0.28.7:
1439+
css-loader@^0.28.11:
14401440
version "0.28.11"
14411441
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
14421442
integrity sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==
@@ -2044,7 +2044,7 @@ faye-websocket@~0.11.0:
20442044
dependencies:
20452045
websocket-driver ">=0.5.1"
20462046

2047-
file-loader@^1.1.4:
2047+
file-loader@^1.1.11:
20482048
version "1.1.11"
20492049
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
20502050
integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==
@@ -5095,7 +5095,7 @@ vue-hot-reload-api@^2.2.0:
50955095
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf"
50965096
integrity sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==
50975097

5098-
vue-loader@^13.0.5:
5098+
vue-loader@^13.7.3:
50995099
version "13.7.3"
51005100
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-13.7.3.tgz#e07440f78230a639d00ada4da7b96d0e9d62037f"
51015101
integrity sha512-ACCwbfeC6HjY2pnDii+Zer+MZ6sdOtwvLmDXRK/BoD3WNR551V22R6KEagwHoTRJ0ZlIhpCBkptpCU6+Ri/05w==
@@ -5122,7 +5122,7 @@ vue-style-loader@^3.0.0:
51225122
hash-sum "^1.0.2"
51235123
loader-utils "^1.0.2"
51245124

5125-
vue-template-compiler@^2.4.4:
5125+
vue-template-compiler@^2.6.10:
51265126
version "2.6.10"
51275127
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc"
51285128
integrity sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==
@@ -5135,7 +5135,7 @@ vue-template-es2015-compiler@^1.6.0:
51355135
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
51365136
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
51375137

5138-
vue@^2.5.11:
5138+
vue@^2.6.10:
51395139
version "2.6.10"
51405140
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.10.tgz#a72b1a42a4d82a721ea438d1b6bf55e66195c637"
51415141
integrity sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==
@@ -5167,7 +5167,7 @@ [email protected]:
51675167
range-parser "^1.0.3"
51685168
time-stamp "^2.0.0"
51695169

5170-
webpack-dev-server@^2.9.1:
5170+
webpack-dev-server@^2.11.5:
51715171
version "2.11.5"
51725172
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.5.tgz#416fbdea0e04eebe44a626e791d5a2eb37fe8c48"
51735173
integrity sha512-7TdOKKt7G3sWEhPKV0zP+nD0c4V9YKUJ3wDdBwQsZNo58oZIRoVIu66pg7PYkBW8A74msP9C2kLwmxGHndz/pw==
@@ -5208,7 +5208,7 @@ webpack-sources@^1.0.1:
52085208
source-list-map "^2.0.0"
52095209
source-map "~0.6.1"
52105210

5211-
webpack@^3.6.0:
5211+
webpack@^3.12.0:
52125212
version "3.12.0"
52135213
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74"
52145214
integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==

0 commit comments

Comments
 (0)