• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

SpiriitLabs / vite-plugin-svg-spritemap / 18503106552

14 Oct 2025 04:19PM UTC coverage: 96.728% (+1.4%) from 95.374%
18503106552

Pull #82

github

web-flow
Merge 2dc03142c into c8ba90332
Pull Request #82: Version 5.0.1

256 of 279 branches covered (91.76%)

Branch coverage included in aggregate %.

183 of 184 new or added lines in 7 files covered. (99.46%)

6 existing lines in 1 file now uncovered.

897 of 913 relevant lines covered (98.25%)

305.68 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.12
/src/plugins/build.ts
1
import type { ExternalOption } from 'rollup'
2
import type { Plugin, ResolvedConfig } from 'vite'
3
import type { Shared } from '../types'
4
import { posix as path } from 'node:path'
1✔
5
import { getFileName } from '../helpers/filename'
1✔
6

7
export default function BuildPlugin(shared: Shared): Plugin {
68✔
8
  let fileRef: string
68✔
9
  let fileName: string
68✔
10
  let config: ResolvedConfig
68✔
11
  const pluginExternal = new RegExp(`/${shared.options.route}`)
68✔
12
  const spritemapFilter = new RegExp(`/${shared.options.route}`, 'g')
68✔
13

14
  return <Plugin>{
68✔
15
    name: 'vite-plugin-svg-spritemap:build',
68✔
16
    apply: 'build',
68✔
17
    config(config) {
68✔
18
      const configExternal = config.build?.rollupOptions?.external
62✔
19
      let finalExternal: ExternalOption = pluginExternal
62✔
20

21
      if (Array.isArray(configExternal)) {
62✔
22
        configExternal.push(pluginExternal)
1✔
23
        finalExternal = configExternal
1✔
24
      }
1✔
25
      else if (typeof configExternal === 'string' || typeof configExternal === 'object') {
61✔
26
        finalExternal = [configExternal, pluginExternal]
1✔
27
      }
1✔
28
      else if (typeof configExternal === 'function') {
60✔
29
        finalExternal = (source, importer, isResolved) => {
1✔
30
          if (source.match(pluginExternal))
23✔
31
            return true
23✔
32

33
          const res = configExternal(source, importer, isResolved)
17✔
34
          return res
17✔
35
        }
23✔
36
      }
1✔
37

38
      return {
62✔
39
        build: {
62✔
40
          rollupOptions: {
62✔
41
            external: finalExternal,
62✔
42
          },
62✔
43
        },
62✔
44
      }
62✔
45
    },
62✔
46
    configResolved(_config) {
68✔
47
      config = _config
62✔
48
    },
62✔
49
    async buildStart() {
68✔
50
      if (!shared.svgManager)
62✔
51
        return
62!
52

53
      await shared.svgManager.updateAll()
62✔
54

55
      if (typeof shared.options.output === 'object') {
62✔
56
        fileName = getFileName(
61✔
57
          shared.options.output.filename,
61✔
58
          'spritemap',
61✔
59
          shared.svgManager.spritemap,
61✔
60
          'svg',
61✔
61
        )
61✔
62
        const filePath = path.join(config.build.assetsDir, fileName)
61✔
63
        fileRef = this.emitFile({
61✔
64
          type: 'asset',
61✔
65
          needsCodeReference: false,
61✔
66
          name: shared.options.output.name,
61✔
67
          source: shared.svgManager.spritemap,
61✔
68
          fileName: filePath,
61✔
69
          originalFileName: shared.options.output.name,
61✔
70
        })
61✔
71
      }
61✔
72
    },
62✔
73
    transform: {
68✔
74
      filter: {
68✔
75
        code: spritemapFilter,
68✔
76
      },
68✔
77
      handler(code) {
68✔
78
        if (typeof shared.options.output !== 'object')
62✔
79
          return
62✔
80

81
        // prevent sveltekit rewrite
82
        const base = config.base.startsWith('.')
61!
NEW
83
          ? config.base.substring(1)
✔
84
          : config.base
61✔
85

86
        return {
62✔
87
          code: code.replace(
62✔
88
            spritemapFilter,
62✔
89
            path.join(base, this.getFileName(fileRef)),
62✔
90
          ),
62✔
91
          map: null,
62✔
92
        }
62✔
93
      },
62✔
94
    },
68✔
95
  }
68✔
96
}
68✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc