@@ -3,6 +3,7 @@ const config = require('./config');
33const render = require ( './lib/core/renderer' ) ;
44const extractVueScript = require ( './lib/core/vueScriptExtractor' ) ;
55const seekExportDefaultLine = require ( './lib/core/seekExportDefaultLine' ) ;
6+ const { isSingleFileComponent, isJSComponent } = require ( './lib/core/issers' ) ;
67const vueDataTag = require ( './lib/tags/vue-data' ) ;
78const vuePropTag = require ( './lib/tags/vue-prop' ) ;
89const vueComputedTag = require ( './lib/tags/vue-computed' ) ;
@@ -19,58 +20,61 @@ exports.handlers = {
1920 }
2021 } ,
2122 newDoclet ( e ) {
22- const isJs = e . doclet . meta . filename . endsWith ( '.js' ) ;
23- const endsWith = e . doclet . meta . filename . endsWith ( '.vue' ) || e . doclet . meta . filename . endsWith ( '.js' ) ;
24- if ( endsWith ) {
25- const fullPath = join ( e . doclet . meta . path , e . doclet . meta . filename ) ;
26- const componentName = e . doclet . meta . filename . replace ( / \. v u e $ / , '' ) . replace ( / \. j s $ / , '' ) ;
23+ const fileIsSingleFileComponent = isSingleFileComponent ( e . doclet ) ;
24+ const fileIsJSComponent = isJSComponent ( e . doclet ) ;
2725
28- // The main doclet before `export default {}`
29- if ( e . doclet . longname === 'module.exports' ) {
30- e . doclet . kind = 'module' ;
31- e . doclet . name = componentName ;
32- e . doclet . alias = componentName ;
33- e . doclet . longname = `module:${ componentName } ` ;
34- }
26+ if ( ! fileIsSingleFileComponent && ! fileIsJSComponent ) {
27+ return ;
28+ }
3529
36- if (
37- ! / [ . ~ # ] / . test ( e . doclet . longname ) // filter component's properties and member, not the best way but it werks
38- && e . doclet . longname . startsWith ( 'module:' )
39- ) {
40- mainDocletLines [ fullPath ] = e . doclet . meta . lineno ;
41- }
30+ const fullPath = join ( e . doclet . meta . path , e . doclet . meta . filename ) ;
31+ const componentName = e . doclet . meta . filename . replace ( / \. ( v u e | j s ) $ / , '' ) ;
4232
43- // It can be the main doclet before `export default {}`
44- // with at least one `@vue-*` tag
45- if ( e . doclet . _isVueDoc ) {
46- const { template } = config [ 'jsdoc-vuejs' ] ;
47- const data = {
48- props : e . doclet . _vueProps || [ ] ,
49- data : e . doclet . _vueData || [ ] ,
50- computed : e . doclet . _vueComputed || [ ] ,
51- } ;
33+ // The main doclet before `export default {}`
34+ if ( e . doclet . longname === 'module.exports' ) {
35+ e . doclet . kind = 'module' ;
36+ e . doclet . name = componentName ;
37+ e . doclet . alias = componentName ;
38+ e . doclet . longname = `module:${ componentName } ` ;
39+ }
5240
53- render ( template , data , ( err , str ) => {
54- if ( err ) throw err ;
41+ if (
42+ ! / [ . ~ # ] / . test ( e . doclet . longname ) // filter component's properties and member, not the best way but it werks
43+ && e . doclet . longname . startsWith ( 'module:' )
44+ ) {
45+ mainDocletLines [ fullPath ] = e . doclet . meta . lineno ;
46+ }
5547
56- e . doclet . description = str ;
57- } ) ;
48+ // It can be the main doclet before `export default {}`
49+ // with at least one `@vue-*` tag
50+ if ( e . doclet . _isVueDoc ) {
51+ const { template } = config [ 'jsdoc-vuejs' ] ;
52+ const data = {
53+ props : e . doclet . _vueProps || [ ] ,
54+ data : e . doclet . _vueData || [ ] ,
55+ computed : e . doclet . _vueComputed || [ ] ,
56+ } ;
5857
59- // Remove meta for not rendering source for this doclet
60- delete e . doclet . meta ;
61- }
58+ render ( template , data , ( err , str ) => {
59+ if ( err ) throw err ;
60+
61+ e . doclet . description = str ;
62+ } ) ;
63+
64+ // Remove meta for not rendering source for this doclet
65+ delete e . doclet . meta ;
66+ }
6267
63- // Methods and hooks
64- if ( e . doclet . kind === 'function' && 'memberof' in e . doclet ) {
65- if ( e . doclet . memberof . endsWith ( '.methods' ) ) {
66- e . doclet . scope = 'instance' ;
67- e . doclet . memberof = e . doclet . memberof . replace ( / \. m e t h o d s $ / , '' ) ; // force method to be displayed
68- if ( ! isJs ) {
69- e . doclet . meta . lineno += exportDefaultLines [ fullPath ] - mainDocletLines [ fullPath ] ;
70- }
71- } else {
72- e . doclet . memberof = null ; // don't include Vue hooks
68+ // Methods and hooks
69+ if ( e . doclet . kind === 'function' && 'memberof' in e . doclet ) {
70+ if ( e . doclet . memberof . endsWith ( '.methods' ) ) {
71+ e . doclet . scope = 'instance' ;
72+ e . doclet . memberof = e . doclet . memberof . replace ( / \. m e t h o d s $ / , '' ) ; // force method to be displayed
73+ if ( fileIsSingleFileComponent ) {
74+ e . doclet . meta . lineno += exportDefaultLines [ fullPath ] - mainDocletLines [ fullPath ] ;
7375 }
76+ } else {
77+ e . doclet . memberof = null ; // don't include Vue hooks
7478 }
7579 }
7680 } ,
0 commit comments