utils.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.renameProp = exports.getBaseNodeTransforms = exports.createUniVueTransformAssetUrls = exports.createBindDirectiveNode = exports.createOnDirectiveNode = exports.createDirectiveNode = exports.addStaticClass = exports.createAttributeNode = exports.isUserComponent = exports.isVueSfcFile = exports.VUE_REF_IN_FOR = exports.VUE_REF = void 0;
  4. const shared_1 = require("@vue/shared");
  5. const uni_shared_1 = require("@dcloudio/uni-shared");
  6. const compiler_core_1 = require("@vue/compiler-core");
  7. const templateTransformAssetUrl_1 = require("./transforms/templateTransformAssetUrl");
  8. const templateTransformSrcset_1 = require("./transforms/templateTransformSrcset");
  9. const ast_1 = require("../vite/utils/ast");
  10. const url_1 = require("../vite/utils/url");
  11. const constants_1 = require("../constants");
  12. exports.VUE_REF = 'r';
  13. exports.VUE_REF_IN_FOR = 'r-i-f';
  14. function isVueSfcFile(id) {
  15. const { filename, query } = (0, url_1.parseVueRequest)(id);
  16. return constants_1.EXTNAME_VUE_RE.test(filename) && !query.vue;
  17. }
  18. exports.isVueSfcFile = isVueSfcFile;
  19. function isUserComponent(node, context) {
  20. return (node.type === 1 /* NodeTypes.ELEMENT */ &&
  21. node.tagType === 1 /* ElementTypes.COMPONENT */ &&
  22. !(0, uni_shared_1.isComponentTag)(node.tag) &&
  23. !(0, compiler_core_1.isCoreComponent)(node.tag) &&
  24. !context.isBuiltInComponent(node.tag));
  25. }
  26. exports.isUserComponent = isUserComponent;
  27. function createAttributeNode(name, content) {
  28. return {
  29. type: 6 /* NodeTypes.ATTRIBUTE */,
  30. loc: compiler_core_1.locStub,
  31. name,
  32. value: {
  33. type: 2 /* NodeTypes.TEXT */,
  34. loc: compiler_core_1.locStub,
  35. content,
  36. },
  37. };
  38. }
  39. exports.createAttributeNode = createAttributeNode;
  40. function createClassAttribute(clazz) {
  41. return createAttributeNode('class', clazz);
  42. }
  43. function addStaticClass(node, clazz) {
  44. const classProp = node.props.find((prop) => prop.type === 6 /* NodeTypes.ATTRIBUTE */ && prop.name === 'class');
  45. if (!classProp) {
  46. return node.props.unshift(createClassAttribute(clazz));
  47. }
  48. if (classProp.value) {
  49. return (classProp.value.content = classProp.value.content + ' ' + clazz);
  50. }
  51. classProp.value = {
  52. type: 2 /* NodeTypes.TEXT */,
  53. loc: compiler_core_1.locStub,
  54. content: clazz,
  55. };
  56. }
  57. exports.addStaticClass = addStaticClass;
  58. function createDirectiveNode(name, arg, exp) {
  59. return {
  60. type: 7 /* NodeTypes.DIRECTIVE */,
  61. name,
  62. modifiers: [],
  63. loc: compiler_core_1.locStub,
  64. arg: (0, compiler_core_1.createSimpleExpression)(arg, true),
  65. exp: (0, shared_1.isString)(exp) ? (0, compiler_core_1.createSimpleExpression)(exp, false) : exp,
  66. };
  67. }
  68. exports.createDirectiveNode = createDirectiveNode;
  69. function createOnDirectiveNode(name, value) {
  70. return createDirectiveNode('on', name, value);
  71. }
  72. exports.createOnDirectiveNode = createOnDirectiveNode;
  73. function createBindDirectiveNode(name, value) {
  74. return createDirectiveNode('bind', name, value);
  75. }
  76. exports.createBindDirectiveNode = createBindDirectiveNode;
  77. function createUniVueTransformAssetUrls(base) {
  78. return {
  79. base,
  80. includeAbsolute: true,
  81. tags: {
  82. audio: ['src'],
  83. video: ['src', 'poster'],
  84. img: ['src'],
  85. image: ['src'],
  86. 'cover-image': ['src'],
  87. // h5
  88. 'v-uni-audio': ['src'],
  89. 'v-uni-video': ['src', 'poster'],
  90. 'v-uni-image': ['src'],
  91. 'v-uni-cover-image': ['src'],
  92. // nvue
  93. 'u-image': ['src'],
  94. 'u-video': ['src', 'poster'],
  95. },
  96. };
  97. }
  98. exports.createUniVueTransformAssetUrls = createUniVueTransformAssetUrls;
  99. function getBaseNodeTransforms(base) {
  100. const transformAssetUrls = createUniVueTransformAssetUrls(base);
  101. return [
  102. (0, templateTransformAssetUrl_1.createAssetUrlTransformWithOptions)(transformAssetUrls),
  103. (0, templateTransformSrcset_1.createSrcsetTransformWithOptions)(transformAssetUrls),
  104. ];
  105. }
  106. exports.getBaseNodeTransforms = getBaseNodeTransforms;
  107. function renameProp(name, prop) {
  108. if (!prop) {
  109. return;
  110. }
  111. if ((0, ast_1.isDirectiveNode)(prop)) {
  112. if (prop.arg && (0, compiler_core_1.isStaticExp)(prop.arg)) {
  113. prop.arg.content = name;
  114. }
  115. }
  116. else {
  117. prop.name = name;
  118. }
  119. }
  120. exports.renameProp = renameProp;