-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Expand file tree
/
Copy pathfix.cjs
More file actions
39 lines (32 loc) · 2.09 KB
/
Copy pathfix.cjs
File metadata and controls
39 lines (32 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const fs = require('@tarojs/helper').fs
const path = require('path')
const componentsPath = path.resolve(__dirname, '..', 'node_modules/@tarojs/components/dist/lib/solid/components.ts')
// const avoidErrorType = ['Input', 'ScrollView']
if (fs.existsSync(componentsPath)) {
const codeBuffer = fs.readFileSync(componentsPath)
let code = codeBuffer.toString().replace(/import\stype\s\{\s([^}]*)\s\}\sfrom\s'@tarojs\/components[^']*';/ig, `import type { $1 } from '@tarojs/components/dist/types/components';`)
code = code.replace(/const\sTaro([A-Za-z]+)\s=/g, 'const $1 =').replace(/const\s([A-Za-z]+)Core\s=/g, 'const $1 =')
// NOTE: HTMLStencilElement 与 HTMLTaroInputCoreElement 在 force 参数上冲突
// const avoidType = avoidErrorType.join('|')
// code = code.replace(
// new RegExp(`createReactComponent<JSX.Taro(${avoidType})Core, HTMLTaro(${avoidType})CoreElement>`, 'ig'),
// 'createReactComponent<JSX.Taro$1Core, any>'
// )
if (code.includes('defineCustomElement as define')) {
code = code.replace(/import\s\{\sdefineCustomElement\sas\sdefine([A-Za-z]+)\s.*/g, '// @ts-ignore\nimport { defineCustomElement$1 as define$1 } from \'@tarojs/components/dist/components\';')
}
/**
* 当前不支持配置通用的 manipulatePropsFunction 方法,因此需要手动添加
* https://github.com/ionic-team/stencil-ds-output-targets/issues/243
*/
if (!code.includes('./helper')) {
code = code.replace('/* auto-generated solid proxies */', `/* auto-generated solid proxies */\nimport { manipulatePropsFunction } from './helper'`)
code = code.replace(/\(([^,)]+)[^;]*,\s([^,]+)\);/ig, '($1, manipulatePropsFunction, $2);')
}
if (!code.includes('Fragment')) {
const comps = ['Block']
code = code.replace('/* auto-generated solid proxies */', `/* auto-generated solid proxies */\nimport { Fragment } from 'solid-js/h/jsx-runtime'`)
code = code.replace(new RegExp(`export const (${comps.join('|')}) = \\/\\*\\@__PURE__\\*\\/createSolidComponent.*`, 'ig'), 'export const $1 = Fragment;')
}
fs.writeFileSync(path.resolve(__dirname, '..', 'src/components.ts'), code)
}