11import webpack from 'webpack'
22import { ParsedUrlQuery , parse } from 'querystring'
33import { RawSourceMap } from 'source-map'
4+ import JSON5 from 'json5'
5+ import yaml from 'js-yaml'
46
57const loader : webpack . loader . Loader = function (
68 source : string | Buffer , sourceMap : RawSourceMap | undefined ) : void {
@@ -20,14 +22,8 @@ const loader: webpack.loader.Loader = function (
2022}
2123
2224function generateCode ( source : string | Buffer , query : ParsedUrlQuery ) : string {
23- let code = ''
24-
25- let value = typeof source === 'string'
26- ? JSON . parse ( source )
27- : Buffer . isBuffer ( source )
28- ? JSON . parse ( source . toString ( ) )
29- : null
30- if ( value === null ) { throw new Error ( 'invalid source!' ) }
25+ const data = convert ( source , query . lang as string )
26+ let value = JSON . parse ( data )
3127
3228 if ( query . locale && typeof query . locale === 'string' ) {
3329 value = Object . assign ( { } , { [ query . locale ] : value } )
@@ -38,6 +34,7 @@ function generateCode (source: string | Buffer, query: ParsedUrlQuery): string {
3834 . replace ( / \u2029 / g, '\\u2029' )
3935 . replace ( / \\ / g, '\\\\' )
4036
37+ let code = ''
4138 code += `function (Component) {
4239 Component.options.__i18n = Component.options.__i18n || []
4340 Component.options.__i18n.push('${ value . replace ( / \u0027 / g, '\\u0027' ) } ')
@@ -46,4 +43,19 @@ function generateCode (source: string | Buffer, query: ParsedUrlQuery): string {
4643 return code
4744}
4845
46+ function convert ( source : string | Buffer , lang : string ) : string {
47+ const value = Buffer . isBuffer ( source ) ? source . toString ( ) : source
48+
49+ switch ( lang ) {
50+ case 'yaml' :
51+ case 'yml' :
52+ const data = yaml . safeLoad ( value )
53+ return JSON . stringify ( data , undefined , '\t' )
54+ case 'json5' :
55+ return JSON . stringify ( JSON5 . parse ( value ) )
56+ default :
57+ return value
58+ }
59+ }
60+
4961export default loader
0 commit comments