aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@vue/component-compiler-utils/lib/templateCompilerModules/assetUrl.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@vue/component-compiler-utils/lib/templateCompilerModules/assetUrl.ts')
-rw-r--r--node_modules/@vue/component-compiler-utils/lib/templateCompilerModules/assetUrl.ts51
1 files changed, 51 insertions, 0 deletions
diff --git a/node_modules/@vue/component-compiler-utils/lib/templateCompilerModules/assetUrl.ts b/node_modules/@vue/component-compiler-utils/lib/templateCompilerModules/assetUrl.ts
new file mode 100644
index 00000000..b74b0596
--- /dev/null
+++ b/node_modules/@vue/component-compiler-utils/lib/templateCompilerModules/assetUrl.ts
@@ -0,0 +1,51 @@
+// vue compiler module for transforming `<tag>:<attribute>` to `require`
+
+import { urlToRequire, ASTNode, Attr } from './utils'
+
+export interface AssetURLOptions {
+ [name: string]: string | string[]
+}
+
+const defaultOptions: AssetURLOptions = {
+ video: ['src', 'poster'],
+ source: 'src',
+ img: 'src',
+ image: ['xlink:href', 'href']
+}
+
+export default (userOptions?: AssetURLOptions) => {
+ const options = userOptions
+ ? Object.assign({}, defaultOptions, userOptions)
+ : defaultOptions
+
+ return {
+ postTransformNode: (node: ASTNode) => {
+ transform(node, options)
+ }
+ }
+}
+
+function transform(node: ASTNode, options: AssetURLOptions) {
+ for (const tag in options) {
+ if ((tag === '*' || node.tag === tag) && node.attrs) {
+ const attributes = options[tag]
+ if (typeof attributes === 'string') {
+ node.attrs.some(attr => rewrite(attr, attributes))
+ } else if (Array.isArray(attributes)) {
+ attributes.forEach(item => node.attrs.some(attr => rewrite(attr, item)))
+ }
+ }
+ }
+}
+
+function rewrite(attr: Attr, name: string) {
+ if (attr.name === name) {
+ const value = attr.value
+ // only transform static URLs
+ if (value.charAt(0) === '"' && value.charAt(value.length - 1) === '"') {
+ attr.value = urlToRequire(value.slice(1, -1))
+ return true
+ }
+ }
+ return false
+}