@mpxjs/webpack-plugin 2.10.14-beta.2 → 2.10.14-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/dependencies/ImportDependency.js +102 -0
- package/lib/index.js +17 -10
- package/lib/platform/style/wx/index.js +7 -1
- package/lib/platform/template/wx/component-config/button.js +13 -4
- package/lib/platform/template/wx/component-config/index.js +3 -1
- package/lib/platform/template/wx/component-config/nav-container.js +27 -0
- package/lib/runtime/components/ali/mpx-nav-container.mpx +3 -0
- package/lib/runtime/components/react/context.ts +18 -6
- package/lib/runtime/components/react/dist/context.d.ts +79 -0
- package/lib/runtime/components/react/dist/context.js +1 -0
- package/lib/runtime/components/react/dist/event.config.d.ts +7 -0
- package/lib/runtime/components/react/dist/getInnerListeners.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-async-suspense.d.ts +12 -0
- package/lib/runtime/components/react/dist/mpx-button.d.ts +68 -0
- package/lib/runtime/components/react/dist/mpx-canvas/Bus.d.ts +23 -0
- package/lib/runtime/components/react/dist/mpx-canvas/CanvasGradient.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-canvas/CanvasRenderingContext2D.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-canvas/Image.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-canvas/ImageData.d.ts +8 -0
- package/lib/runtime/components/react/dist/mpx-canvas/constructorsRegistry.d.ts +10 -0
- package/lib/runtime/components/react/dist/mpx-canvas/html.d.ts +2 -0
- package/lib/runtime/components/react/dist/mpx-canvas/index.d.ts +32 -0
- package/lib/runtime/components/react/dist/mpx-canvas/utils.d.ts +52 -0
- package/lib/runtime/components/react/dist/mpx-checkbox-group.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-checkbox.d.ts +32 -0
- package/lib/runtime/components/react/dist/mpx-form.d.ts +27 -0
- package/lib/runtime/components/react/dist/mpx-icon/index.d.ts +18 -0
- package/lib/runtime/components/react/dist/mpx-image.d.ts +21 -0
- package/lib/runtime/components/react/dist/mpx-inline-text.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-input.d.ts +50 -0
- package/lib/runtime/components/react/dist/mpx-input.jsx +38 -19
- package/lib/runtime/components/react/dist/mpx-keyboard-avoiding-view.d.ts +12 -0
- package/lib/runtime/components/react/dist/mpx-keyboard-avoiding-view.jsx +81 -48
- package/lib/runtime/components/react/dist/mpx-label.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-movable-area.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-movable-view.d.ts +63 -0
- package/lib/runtime/components/react/dist/mpx-nav-container.d.ts +9 -0
- package/lib/runtime/components/react/dist/mpx-nav-container.jsx +23 -0
- package/lib/runtime/components/react/dist/mpx-navigator.d.ts +9 -0
- package/lib/runtime/components/react/dist/mpx-picker/date.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/dateData.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-picker/index.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/multiSelector.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/region.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/regionData.d.ts +2 -0
- package/lib/runtime/components/react/dist/mpx-picker/selector.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/time.d.ts +6 -0
- package/lib/runtime/components/react/dist/mpx-picker/type.d.ts +106 -0
- package/lib/runtime/components/react/dist/mpx-picker-view/index.d.ts +31 -0
- package/lib/runtime/components/react/dist/mpx-picker-view/pickerVIewContext.d.ts +8 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/index.d.ts +22 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewColumnItem.d.ts +14 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewFaces.d.ts +16 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewIndicator.d.ts +12 -0
- package/lib/runtime/components/react/dist/mpx-picker-view-column/pickerViewMask.d.ts +11 -0
- package/lib/runtime/components/react/dist/mpx-popup/index.d.ts +22 -0
- package/lib/runtime/components/react/dist/mpx-popup/popupBase.d.ts +16 -0
- package/lib/runtime/components/react/dist/mpx-portal/index.d.ts +15 -0
- package/lib/runtime/components/react/dist/mpx-portal/portal-host.d.ts +29 -0
- package/lib/runtime/components/react/dist/mpx-portal/portal-manager.d.ts +9 -0
- package/lib/runtime/components/react/dist/mpx-radio-group.d.ts +20 -0
- package/lib/runtime/components/react/dist/mpx-radio.d.ts +26 -0
- package/lib/runtime/components/react/dist/mpx-rich-text/html.d.ts +1 -0
- package/lib/runtime/components/react/dist/mpx-rich-text/index.d.ts +24 -0
- package/lib/runtime/components/react/dist/mpx-root-portal.d.ts +14 -0
- package/lib/runtime/components/react/dist/mpx-scroll-view.d.ts +54 -0
- package/lib/runtime/components/react/dist/mpx-simple-text.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-simple-view.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-sticky-header.d.ts +17 -0
- package/lib/runtime/components/react/dist/mpx-sticky-section.d.ts +15 -0
- package/lib/runtime/components/react/dist/mpx-swiper-item.d.ts +18 -0
- package/lib/runtime/components/react/dist/mpx-swiper-item.jsx +1 -1
- package/lib/runtime/components/react/dist/mpx-swiper.d.ts +54 -0
- package/lib/runtime/components/react/dist/mpx-swiper.jsx +49 -5
- package/lib/runtime/components/react/dist/mpx-switch.d.ts +26 -0
- package/lib/runtime/components/react/dist/mpx-text.d.ts +21 -0
- package/lib/runtime/components/react/dist/mpx-textarea.d.ts +7 -0
- package/lib/runtime/components/react/dist/mpx-textarea.jsx +1 -0
- package/lib/runtime/components/react/dist/mpx-video.d.ts +101 -0
- package/lib/runtime/components/react/dist/mpx-view.d.ts +34 -0
- package/lib/runtime/components/react/dist/mpx-view.jsx +3 -2
- package/lib/runtime/components/react/dist/mpx-web-view.d.ts +22 -0
- package/lib/runtime/components/react/dist/nav.d.ts +8 -0
- package/lib/runtime/components/react/dist/nav.jsx +138 -0
- package/lib/runtime/components/react/dist/parser.d.ts +39 -0
- package/lib/runtime/components/react/dist/useAnimationHooks.d.ts +32 -0
- package/lib/runtime/components/react/dist/useNavShared.d.ts +2 -0
- package/lib/runtime/components/react/dist/useNavShared.js +6 -0
- package/lib/runtime/components/react/dist/useNodesRef.d.ts +11 -0
- package/lib/runtime/components/react/dist/utils.d.ts +122 -0
- package/lib/runtime/components/react/mpx-input.tsx +48 -26
- package/lib/runtime/components/react/mpx-keyboard-avoiding-view.tsx +91 -47
- package/lib/runtime/components/react/mpx-nav-container.tsx +33 -0
- package/lib/runtime/components/react/mpx-swiper-item.tsx +1 -1
- package/lib/runtime/components/react/mpx-swiper.tsx +60 -7
- package/lib/runtime/components/react/mpx-textarea.tsx +1 -0
- package/lib/runtime/components/react/mpx-view.tsx +3 -2
- package/lib/runtime/components/react/nav.tsx +164 -0
- package/lib/runtime/components/react/types/common.d.ts +19 -0
- package/lib/runtime/components/react/useNavShared.ts +8 -0
- package/lib/runtime/components/web/mpx-nav-container.vue +13 -0
- package/lib/runtime/components/wx/mpx-nav-container.mpx +9 -0
- package/lib/utils/dom-tag-config.js +2 -2
- package/package.json +1 -1
- package/lib/dependencies/ImportDependencyTemplate.js +0 -50
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const Dependency = require('webpack/lib/Dependency')
|
|
2
|
+
const makeSerializable = require('webpack/lib/util/makeSerializable')
|
|
3
|
+
const ModuleDependency = require('webpack/lib/dependencies/ModuleDependency')
|
|
4
|
+
const { RetryRuntimeGlobal } = require('../retry-runtime-module')
|
|
5
|
+
|
|
6
|
+
class ImportDependency extends ModuleDependency {
|
|
7
|
+
/**
|
|
8
|
+
* @param {string} request the request
|
|
9
|
+
* @param {[number, number]} range expression range
|
|
10
|
+
* @param {string[][]=} referencedExports list of referenced exports
|
|
11
|
+
*/
|
|
12
|
+
constructor (request, range, referencedExports, extraOptions) {
|
|
13
|
+
super(request)
|
|
14
|
+
this.range = range
|
|
15
|
+
this.referencedExports = referencedExports
|
|
16
|
+
this.extraOptions = extraOptions
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get type () {
|
|
20
|
+
return 'import()'
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get category () {
|
|
24
|
+
return 'esm'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns list of exports referenced by this dependency
|
|
29
|
+
* @param {ModuleGraph} moduleGraph module graph
|
|
30
|
+
* @param {RuntimeSpec} runtime the runtime for which the module is analysed
|
|
31
|
+
* @returns {(string[] | ReferencedExport)[]} referenced exports
|
|
32
|
+
*/
|
|
33
|
+
getReferencedExports (moduleGraph, runtime) {
|
|
34
|
+
return this.referencedExports
|
|
35
|
+
? this.referencedExports.map((e) => ({
|
|
36
|
+
name: e,
|
|
37
|
+
canMangle: false
|
|
38
|
+
}))
|
|
39
|
+
: Dependency.EXPORTS_OBJECT_REFERENCED
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
serialize (context) {
|
|
43
|
+
context.write(this.range)
|
|
44
|
+
context.write(this.referencedExports)
|
|
45
|
+
context.write(this.extraOptions)
|
|
46
|
+
super.serialize(context)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
deserialize (context) {
|
|
50
|
+
this.range = context.read()
|
|
51
|
+
this.referencedExports = context.read()
|
|
52
|
+
this.extraOptions = context.read()
|
|
53
|
+
super.deserialize(context)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
makeSerializable(ImportDependency, '@mpxjs/webpack-plugin/lib/dependencies/ImportDependency')
|
|
58
|
+
|
|
59
|
+
ImportDependency.Template = class ImportDependencyTemplate extends (
|
|
60
|
+
ModuleDependency.Template
|
|
61
|
+
) {
|
|
62
|
+
/**
|
|
63
|
+
* @param {Dependency} dependency the dependency for which the template should be applied
|
|
64
|
+
* @param {ReplaceSource} source the current replace source which can be modified
|
|
65
|
+
* @param {DependencyTemplateContext} templateContext the context object
|
|
66
|
+
* @returns {void}
|
|
67
|
+
*/
|
|
68
|
+
apply (
|
|
69
|
+
dependency,
|
|
70
|
+
source,
|
|
71
|
+
{ runtimeTemplate, module, moduleGraph, chunkGraph, runtimeRequirements }
|
|
72
|
+
) {
|
|
73
|
+
const dep = /** @type {ImportDependency} */ (dependency)
|
|
74
|
+
const block = /** @type {AsyncDependenciesBlock} */ (
|
|
75
|
+
moduleGraph.getParentBlock(dep)
|
|
76
|
+
)
|
|
77
|
+
let content = runtimeTemplate.moduleNamespacePromise({
|
|
78
|
+
chunkGraph,
|
|
79
|
+
block: block,
|
|
80
|
+
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
|
|
81
|
+
request: dep.request,
|
|
82
|
+
strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
|
|
83
|
+
message: 'import()',
|
|
84
|
+
runtimeRequirements
|
|
85
|
+
})
|
|
86
|
+
// replace fakeType by 9 to fix require.async to commonjs2 module like 'module.exports = function(){...}'
|
|
87
|
+
content = content.replace(/(__webpack_require__\.t\.bind\(.+,\s*)(\d+)(\s*\))/, (_, p1, p2, p3) => {
|
|
88
|
+
return p1 + '9' + p3
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
// require.async 的场景且配置了重试次数才注入 RetryRuntimeModule
|
|
92
|
+
const extraOptions = dep.extraOptions || {}
|
|
93
|
+
if (extraOptions.isRequireAsync && extraOptions.retryRequireAsync && extraOptions.retryRequireAsync.times > 0) {
|
|
94
|
+
runtimeRequirements.add(RetryRuntimeGlobal)
|
|
95
|
+
content = `${RetryRuntimeGlobal}(function() { return ${content} }, ${extraOptions.retryRequireAsync.times}, ${extraOptions.retryRequireAsync.interval})`
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
source.replace(dep.range[0], dep.range[1] - 1, content)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
module.exports = ImportDependency
|
package/lib/index.js
CHANGED
|
@@ -14,8 +14,7 @@ const EntryPlugin = require('webpack/lib/EntryPlugin')
|
|
|
14
14
|
const JavascriptModulesPlugin = require('webpack/lib/javascript/JavascriptModulesPlugin')
|
|
15
15
|
const FlagEntryExportAsUsedPlugin = require('webpack/lib/FlagEntryExportAsUsedPlugin')
|
|
16
16
|
const FileSystemInfo = require('webpack/lib/FileSystemInfo')
|
|
17
|
-
const ImportDependency = require('
|
|
18
|
-
const ImportDependencyTemplate = require('./dependencies/ImportDependencyTemplate')
|
|
17
|
+
const ImportDependency = require('./dependencies/ImportDependency')
|
|
19
18
|
const AsyncDependenciesBlock = require('webpack/lib/AsyncDependenciesBlock')
|
|
20
19
|
const ProvidePlugin = require('webpack/lib/ProvidePlugin')
|
|
21
20
|
const normalize = require('./utils/normalize')
|
|
@@ -696,7 +695,8 @@ class MpxWebpackPlugin {
|
|
|
696
695
|
compilation.dependencyFactories.set(RequireExternalDependency, new NullFactory())
|
|
697
696
|
compilation.dependencyTemplates.set(RequireExternalDependency, new RequireExternalDependency.Template())
|
|
698
697
|
|
|
699
|
-
compilation.
|
|
698
|
+
compilation.dependencyFactories.set(ImportDependency, normalModuleFactory)
|
|
699
|
+
compilation.dependencyTemplates.set(ImportDependency, new ImportDependency.Template())
|
|
700
700
|
})
|
|
701
701
|
|
|
702
702
|
compiler.hooks.thisCompilation.tap('MpxWebpackPlugin', (compilation, { normalModuleFactory }) => {
|
|
@@ -1448,13 +1448,17 @@ class MpxWebpackPlugin {
|
|
|
1448
1448
|
// 删除root query
|
|
1449
1449
|
if (queryObj.root) request = addQuery(request, {}, false, ['root'])
|
|
1450
1450
|
// wx、ali和web平台支持require.async,其余平台使用CommonJsAsyncDependency进行模拟抹平
|
|
1451
|
-
|
|
1451
|
+
let shouldSplitChunk = mpx.supportRequireAsync
|
|
1452
|
+
if (shouldSplitChunk && isReact(mpx.mode)) {
|
|
1453
|
+
const transTarRoot = transSubpackage(mpx.transSubpackageRules, tarRoot)
|
|
1454
|
+
tarRoot = transTarRoot
|
|
1455
|
+
if (transTarRoot === '') {
|
|
1456
|
+
shouldSplitChunk = false
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
if (shouldSplitChunk) {
|
|
1452
1461
|
if (isWeb(mpx.mode) || isReact(mpx.mode)) {
|
|
1453
|
-
if (isReact(mpx.mode)) tarRoot = transSubpackage(mpx.transSubpackageRules, tarRoot)
|
|
1454
|
-
request = addQuery(request, {
|
|
1455
|
-
isRequireAsync: true,
|
|
1456
|
-
retryRequireAsync: JSON.stringify(this.options.retryRequireAsync)
|
|
1457
|
-
})
|
|
1458
1462
|
const depBlock = new AsyncDependenciesBlock(
|
|
1459
1463
|
{
|
|
1460
1464
|
name: tarRoot + '/index'
|
|
@@ -1462,7 +1466,10 @@ class MpxWebpackPlugin {
|
|
|
1462
1466
|
expr.loc,
|
|
1463
1467
|
request
|
|
1464
1468
|
)
|
|
1465
|
-
const dep = new ImportDependency(request, expr.range
|
|
1469
|
+
const dep = new ImportDependency(request, expr.range, undefined, {
|
|
1470
|
+
isRequireAsync: true,
|
|
1471
|
+
retryRequireAsync: this.options.retryRequireAsync
|
|
1472
|
+
})
|
|
1466
1473
|
dep.loc = expr.loc
|
|
1467
1474
|
depBlock.addDependency(dep)
|
|
1468
1475
|
parser.state.current.addBlock(depBlock)
|
|
@@ -315,7 +315,7 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
315
315
|
switch (prop) {
|
|
316
316
|
case bgPropMap.image: {
|
|
317
317
|
// background-image 支持背景图/渐变/css var
|
|
318
|
-
if (cssVariableExp.test(value) || urlExp.test(value) || linearExp.test(value)) {
|
|
318
|
+
if (cssVariableExp.test(value) || urlExp.test(value) || linearExp.test(value) || value === 'none') {
|
|
319
319
|
return { prop, value }
|
|
320
320
|
} else {
|
|
321
321
|
error(`Value of ${prop} in ${selector} selector only support value <url()> or <linear-gradient()>, received ${value}, please check again!`)
|
|
@@ -359,6 +359,12 @@ module.exports = function getSpec ({ warn, error }) {
|
|
|
359
359
|
error(`Property [${bgPropMap.all}] in ${selector} is abbreviated property and does not support CSS var`)
|
|
360
360
|
return false
|
|
361
361
|
}
|
|
362
|
+
if (value === 'none') {
|
|
363
|
+
return [
|
|
364
|
+
{ prop: bgPropMap.image, value },
|
|
365
|
+
{ prop: bgPropMap.color, value: 'transparent' }
|
|
366
|
+
]
|
|
367
|
+
}
|
|
362
368
|
const bgMap = []
|
|
363
369
|
const values = parseValues(value)
|
|
364
370
|
values.forEach(item => {
|
|
@@ -31,13 +31,16 @@ module.exports = function ({ print }) {
|
|
|
31
31
|
const qaPropLog = print({ platform: 'qa', tag: TAG_NAME, isError: false })
|
|
32
32
|
const wxPropValueLog = print({ platform: 'wx', tag: TAG_NAME, isError: false, type: 'value' })
|
|
33
33
|
const iosValueLogError = print({ platform: 'ios', tag: TAG_NAME, isError: true, type: 'value' })
|
|
34
|
+
const iosValueLog = print({ platform: 'ios', tag: TAG_NAME, isError: false, type: 'value' })
|
|
34
35
|
const iosPropLog = print({ platform: 'ios', tag: TAG_NAME, isError: false })
|
|
35
36
|
const iosEventLog = print({ platform: 'ios', tag: TAG_NAME, isError: false, type: 'event' })
|
|
36
37
|
const androidValueLogError = print({ platform: 'android', tag: TAG_NAME, isError: true, type: 'value' })
|
|
38
|
+
const androidValueLog = print({ platform: 'android', tag: TAG_NAME, isError: false, type: 'value' })
|
|
37
39
|
const androidPropLog = print({ platform: 'android', tag: TAG_NAME, isError: false })
|
|
38
40
|
const androidEventLog = print({ platform: 'android', tag: TAG_NAME, isError: false, type: 'event' })
|
|
39
41
|
|
|
40
42
|
const harmonyValueLogError = print({ platform: 'harmony', tag: TAG_NAME, isError: true, type: 'value' })
|
|
43
|
+
const harmonyValueLog = print({ platform: 'harmony', tag: TAG_NAME, isError: false, type: 'value' })
|
|
41
44
|
const harmonyPropLog = print({ platform: 'harmony', tag: TAG_NAME, isError: false })
|
|
42
45
|
const harmonyEventLog = print({ platform: 'harmony', tag: TAG_NAME, isError: false, type: 'event' })
|
|
43
46
|
|
|
@@ -133,19 +136,25 @@ module.exports = function ({ print }) {
|
|
|
133
136
|
ios ({ name, value }) {
|
|
134
137
|
// TODO 此处open-type无其他属性支持了?
|
|
135
138
|
const supported = ['share']
|
|
136
|
-
if (
|
|
139
|
+
if (isMustache(value)) {
|
|
140
|
+
iosValueLog({ name, value })
|
|
141
|
+
} else if (!supported.includes(value)) {
|
|
137
142
|
iosValueLogError({ name, value })
|
|
138
143
|
}
|
|
139
144
|
},
|
|
140
145
|
android ({ name, value }) {
|
|
141
146
|
const supported = ['share']
|
|
142
|
-
if (
|
|
147
|
+
if (isMustache(value)) {
|
|
148
|
+
androidValueLog({ name, value })
|
|
149
|
+
} else if (!supported.includes(value)) {
|
|
143
150
|
androidValueLogError({ name, value })
|
|
144
151
|
}
|
|
145
152
|
},
|
|
146
153
|
harmony ({ name, value }) {
|
|
147
154
|
const supported = ['share']
|
|
148
|
-
if (
|
|
155
|
+
if (isMustache(value)) {
|
|
156
|
+
harmonyValueLog({ name, value })
|
|
157
|
+
} else if (!supported.includes(value)) {
|
|
149
158
|
harmonyValueLogError({ name, value })
|
|
150
159
|
}
|
|
151
160
|
}
|
|
@@ -186,7 +195,7 @@ module.exports = function ({ print }) {
|
|
|
186
195
|
qa: qaPropLog
|
|
187
196
|
},
|
|
188
197
|
{
|
|
189
|
-
test: /^(lang|from-type|
|
|
198
|
+
test: /^(lang|from-type|send-message-title|send-message-path|send-message-img|app-parameter|show-message-card|phone-number-no-quota-toast|bindgetuserinfo|bindcontact|createliveactivity|bindgetphonenumber|bindgetrealtimephonenumber|binderror|bindopensetting|bindlaunchapp|bindchooseavatar|bindagreeprivacyauthorization)$/,
|
|
190
199
|
ios: iosPropLog,
|
|
191
200
|
android: androidPropLog,
|
|
192
201
|
harmony: harmonyPropLog
|
|
@@ -44,6 +44,7 @@ const fixComponentName = require('./fix-component-name')
|
|
|
44
44
|
const rootPortal = require('./root-portal')
|
|
45
45
|
const stickyHeader = require('./sticky-header')
|
|
46
46
|
const stickySection = require('./sticky-section')
|
|
47
|
+
const navContainer = require('./nav-container')
|
|
47
48
|
|
|
48
49
|
module.exports = function getComponentConfigs ({ warn, error }) {
|
|
49
50
|
/**
|
|
@@ -129,6 +130,7 @@ module.exports = function getComponentConfigs ({ warn, error }) {
|
|
|
129
130
|
component(),
|
|
130
131
|
rootPortal({ print }),
|
|
131
132
|
stickyHeader({ print }),
|
|
132
|
-
stickySection({ print })
|
|
133
|
+
stickySection({ print }),
|
|
134
|
+
navContainer({ print })
|
|
133
135
|
]
|
|
134
136
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const TAG_NAME = 'nav-container'
|
|
2
|
+
|
|
3
|
+
module.exports = function ({ print }) {
|
|
4
|
+
return {
|
|
5
|
+
test: TAG_NAME,
|
|
6
|
+
web(tag, { el }) {
|
|
7
|
+
el.isBuiltIn = true
|
|
8
|
+
return 'mpx-nav-container'
|
|
9
|
+
},
|
|
10
|
+
ios(tag, { el }) {
|
|
11
|
+
el.isBuiltIn = true
|
|
12
|
+
return 'mpx-nav-container'
|
|
13
|
+
},
|
|
14
|
+
android(tag, { el }) {
|
|
15
|
+
el.isBuiltIn = true
|
|
16
|
+
return 'mpx-nav-container'
|
|
17
|
+
},
|
|
18
|
+
harmony(tag, { el }) {
|
|
19
|
+
el.isBuiltIn = true
|
|
20
|
+
return 'mpx-nav-container'
|
|
21
|
+
},
|
|
22
|
+
wx(tag, { el }) {
|
|
23
|
+
el.isBuiltIn = true
|
|
24
|
+
return 'mpx-nav-container'
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -6,9 +6,14 @@ export type LabelContextValue = MutableRefObject<{
|
|
|
6
6
|
triggerChange: (evt: NativeSyntheticEvent<TouchEvent>) => void
|
|
7
7
|
}>
|
|
8
8
|
|
|
9
|
-
export type KeyboardAvoidContextValue = MutableRefObject<
|
|
10
|
-
|
|
11
|
-
>
|
|
9
|
+
export type KeyboardAvoidContextValue = MutableRefObject<{
|
|
10
|
+
cursorSpacing: number
|
|
11
|
+
ref: MutableRefObject<any>
|
|
12
|
+
adjustPosition: boolean
|
|
13
|
+
keyboardHeight?: number
|
|
14
|
+
onKeyboardShow?: () => void
|
|
15
|
+
readyToShow?: boolean
|
|
16
|
+
} | null>
|
|
12
17
|
|
|
13
18
|
export interface GroupValue {
|
|
14
19
|
[key: string]: { checked: boolean; setValue: Dispatch<SetStateAction<boolean>> }
|
|
@@ -37,13 +42,13 @@ export interface IntersectionObserver {
|
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
export interface PortalContextValue {
|
|
40
|
-
mount: (children: React.ReactNode, key?: number | null, id?: number| null) => number| undefined
|
|
45
|
+
mount: (children: React.ReactNode, key?: number | null, id?: number | null) => number | undefined
|
|
41
46
|
update: (key: number, children: React.ReactNode) => void
|
|
42
47
|
unmount: (key: number) => void
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
export interface ScrollViewContextValue {
|
|
46
|
-
gestureRef: React.RefObject<any> | null
|
|
51
|
+
gestureRef: React.RefObject<any> | null
|
|
47
52
|
scrollOffset: Animated.Value
|
|
48
53
|
}
|
|
49
54
|
|
|
@@ -53,10 +58,15 @@ export interface RouteContextValue {
|
|
|
53
58
|
}
|
|
54
59
|
|
|
55
60
|
export interface StickyContextValue {
|
|
56
|
-
registerStickyHeader: Function
|
|
61
|
+
registerStickyHeader: Function
|
|
57
62
|
unregisterStickyHeader: Function
|
|
58
63
|
}
|
|
59
64
|
|
|
65
|
+
export interface NavSharedValue {
|
|
66
|
+
customNav?: React.ReactNode
|
|
67
|
+
setCustomNav: (value: React.ReactNode) => void
|
|
68
|
+
}
|
|
69
|
+
|
|
60
70
|
export const MovableAreaContext = createContext({ width: 0, height: 0 })
|
|
61
71
|
|
|
62
72
|
export const FormContext = createContext<FormContextValue | null>(null)
|
|
@@ -84,3 +94,5 @@ export const ScrollViewContext = createContext<ScrollViewContextValue>({ gesture
|
|
|
84
94
|
export const PortalContext = createContext<PortalContextValue>(null as any)
|
|
85
95
|
|
|
86
96
|
export const StickyContext = createContext<StickyContextValue>({ registerStickyHeader: noop, unregisterStickyHeader: noop })
|
|
97
|
+
|
|
98
|
+
export const NavSharedContext = createContext<NavSharedValue>(null as any)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Dispatch, MutableRefObject, SetStateAction } from 'react';
|
|
2
|
+
import { NativeSyntheticEvent, Animated } from 'react-native';
|
|
3
|
+
export type LabelContextValue = MutableRefObject<{
|
|
4
|
+
triggerChange: (evt: NativeSyntheticEvent<TouchEvent>) => void;
|
|
5
|
+
}>;
|
|
6
|
+
export type KeyboardAvoidContextValue = MutableRefObject<{
|
|
7
|
+
cursorSpacing: number;
|
|
8
|
+
ref: MutableRefObject<any>;
|
|
9
|
+
adjustPosition: boolean;
|
|
10
|
+
keyboardHeight?: number;
|
|
11
|
+
onKeyboardShow?: () => void;
|
|
12
|
+
readyToShow?: boolean;
|
|
13
|
+
} | null>;
|
|
14
|
+
export interface GroupValue {
|
|
15
|
+
[key: string]: {
|
|
16
|
+
checked: boolean;
|
|
17
|
+
setValue: Dispatch<SetStateAction<boolean>>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface GroupContextValue {
|
|
21
|
+
groupValue: GroupValue;
|
|
22
|
+
notifyChange: (evt: NativeSyntheticEvent<TouchEvent>) => void;
|
|
23
|
+
}
|
|
24
|
+
export interface FormFieldValue {
|
|
25
|
+
getValue: () => any;
|
|
26
|
+
resetValue: ({ newVal, type }: {
|
|
27
|
+
newVal?: any;
|
|
28
|
+
type?: string;
|
|
29
|
+
}) => void;
|
|
30
|
+
}
|
|
31
|
+
export interface FormContextValue {
|
|
32
|
+
formValuesMap: Map<string, FormFieldValue>;
|
|
33
|
+
submit: () => void;
|
|
34
|
+
reset: () => void;
|
|
35
|
+
}
|
|
36
|
+
export interface IntersectionObserver {
|
|
37
|
+
[key: number]: {
|
|
38
|
+
throttleMeasure: () => void;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface PortalContextValue {
|
|
42
|
+
mount: (children: React.ReactNode, key?: number | null, id?: number | null) => number | undefined;
|
|
43
|
+
update: (key: number, children: React.ReactNode) => void;
|
|
44
|
+
unmount: (key: number) => void;
|
|
45
|
+
}
|
|
46
|
+
export interface ScrollViewContextValue {
|
|
47
|
+
gestureRef: React.RefObject<any> | null;
|
|
48
|
+
scrollOffset: Animated.Value;
|
|
49
|
+
}
|
|
50
|
+
export interface RouteContextValue {
|
|
51
|
+
pageId: number;
|
|
52
|
+
navigation: Record<string, any>;
|
|
53
|
+
}
|
|
54
|
+
export interface StickyContextValue {
|
|
55
|
+
registerStickyHeader: Function;
|
|
56
|
+
unregisterStickyHeader: Function;
|
|
57
|
+
}
|
|
58
|
+
export interface NavSharedValue {
|
|
59
|
+
customNav?: React.ReactNode;
|
|
60
|
+
setCustomNav: (value: React.ReactNode) => void;
|
|
61
|
+
}
|
|
62
|
+
export declare const MovableAreaContext: import("react").Context<{
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
}>;
|
|
66
|
+
export declare const FormContext: import("react").Context<FormContextValue | null>;
|
|
67
|
+
export declare const CheckboxGroupContext: import("react").Context<GroupContextValue | null>;
|
|
68
|
+
export declare const RadioGroupContext: import("react").Context<GroupContextValue | null>;
|
|
69
|
+
export declare const LabelContext: import("react").Context<LabelContextValue | null>;
|
|
70
|
+
export declare const PickerContext: import("react").Context<null>;
|
|
71
|
+
export declare const VarContext: import("react").Context<{}>;
|
|
72
|
+
export declare const IntersectionObserverContext: import("react").Context<IntersectionObserver | null>;
|
|
73
|
+
export declare const RouteContext: import("react").Context<RouteContextValue | null>;
|
|
74
|
+
export declare const SwiperContext: import("react").Context<{}>;
|
|
75
|
+
export declare const KeyboardAvoidContext: import("react").Context<KeyboardAvoidContextValue | null>;
|
|
76
|
+
export declare const ScrollViewContext: import("react").Context<ScrollViewContextValue>;
|
|
77
|
+
export declare const PortalContext: import("react").Context<PortalContextValue>;
|
|
78
|
+
export declare const StickyContext: import("react").Context<StickyContextValue>;
|
|
79
|
+
export declare const NavSharedContext: import("react").Context<NavSharedValue>;
|
|
@@ -15,3 +15,4 @@ export const KeyboardAvoidContext = createContext(null);
|
|
|
15
15
|
export const ScrollViewContext = createContext({ gestureRef: null, scrollOffset: new Animated.Value(0) });
|
|
16
16
|
export const PortalContext = createContext(null);
|
|
17
17
|
export const StickyContext = createContext({ registerStickyHeader: noop, unregisterStickyHeader: noop });
|
|
18
|
+
export const NavSharedContext = createContext(null);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Props, RawConfig, RemoveProps, LayoutRef, ExtendedNativeTouchEvent } from './types/getInnerListeners';
|
|
2
|
+
export declare const getCustomEvent: (type: string | undefined, oe: any, { detail, layoutRef }: {
|
|
3
|
+
detail?: Record<string, unknown> | undefined;
|
|
4
|
+
layoutRef?: LayoutRef | undefined;
|
|
5
|
+
}, props?: Props) => any;
|
|
6
|
+
declare const useInnerProps: (props?: Props, userRemoveProps?: RemoveProps, rawConfig?: RawConfig) => Record<string, (e: ExtendedNativeTouchEvent) => void> & Omit<Props, string>;
|
|
7
|
+
export default useInnerProps;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ComponentType, ReactNode } from 'react';
|
|
2
|
+
interface AsyncSuspenseProps {
|
|
3
|
+
type: 'component' | 'page';
|
|
4
|
+
chunkName: string;
|
|
5
|
+
moduleId: string;
|
|
6
|
+
innerProps: any;
|
|
7
|
+
getLoading?: () => ComponentType<unknown>;
|
|
8
|
+
getFallback?: () => ComponentType<unknown>;
|
|
9
|
+
getChildren: () => Promise<ReactNode>;
|
|
10
|
+
}
|
|
11
|
+
declare const AsyncSuspense: React.FC<AsyncSuspenseProps>;
|
|
12
|
+
export default AsyncSuspense;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ✔ size
|
|
3
|
+
* ✔ type
|
|
4
|
+
* ✔ plain
|
|
5
|
+
* ✔ disabled
|
|
6
|
+
* ✔ loading
|
|
7
|
+
* ✔ form-type
|
|
8
|
+
* - open-type: Partially. Only support `share`、`getUserInfo`
|
|
9
|
+
* ✔ hover-class: Convert hoverClass to hoverStyle.
|
|
10
|
+
* ✔ hover-style
|
|
11
|
+
* ✘ hover-stop-propagation
|
|
12
|
+
* ✔ hover-start-time
|
|
13
|
+
* ✔ hover-stay-time
|
|
14
|
+
* ✘ lang
|
|
15
|
+
* ✘ session-from
|
|
16
|
+
* ✘ send-message-title
|
|
17
|
+
* ✘ send-message-path
|
|
18
|
+
* ✘ send-message-img
|
|
19
|
+
* ✘ app-parameter
|
|
20
|
+
* ✘ show-message-card
|
|
21
|
+
* ✘ phone-number-no-quota-toast
|
|
22
|
+
* ✘ bindgetuserinfo
|
|
23
|
+
* ✘ bindcontact
|
|
24
|
+
* ✘ createliveactivity
|
|
25
|
+
* ✘ bindgetphonenumber
|
|
26
|
+
* ✘ bindgetphonenumber
|
|
27
|
+
* ✘ bindgetrealtimephonenumber
|
|
28
|
+
* ✘ binderror
|
|
29
|
+
* ✘ bindopensetting
|
|
30
|
+
* ✘ bindlaunchapp
|
|
31
|
+
* ✘ bindlaunchapp
|
|
32
|
+
* ✘ bindchooseavatar
|
|
33
|
+
* ✘ bindchooseavatar
|
|
34
|
+
* ✘ bindagreeprivacyauthorization
|
|
35
|
+
* ✔ bindtap
|
|
36
|
+
*/
|
|
37
|
+
import { ReactNode } from 'react';
|
|
38
|
+
import { View, ViewStyle, TextStyle, NativeSyntheticEvent } from 'react-native';
|
|
39
|
+
import { HandlerRef } from './useNodesRef';
|
|
40
|
+
import type { ExtendedViewStyle } from './types/common';
|
|
41
|
+
export type Type = 'default' | 'primary' | 'warn';
|
|
42
|
+
export type OpenType = 'share' | 'getUserInfo';
|
|
43
|
+
export type OpenTypeEvent = 'onShareAppMessage' | 'onUserInfo';
|
|
44
|
+
export interface ButtonProps {
|
|
45
|
+
size?: string;
|
|
46
|
+
type?: Type;
|
|
47
|
+
plain?: boolean;
|
|
48
|
+
disabled?: boolean;
|
|
49
|
+
loading?: boolean;
|
|
50
|
+
'hover-class'?: string;
|
|
51
|
+
'hover-style'?: ExtendedViewStyle;
|
|
52
|
+
'hover-start-time'?: number;
|
|
53
|
+
'hover-stay-time'?: number;
|
|
54
|
+
'open-type'?: OpenType;
|
|
55
|
+
'form-type'?: 'submit' | 'reset';
|
|
56
|
+
'enable-offset'?: boolean;
|
|
57
|
+
'enable-var'?: boolean;
|
|
58
|
+
'external-var-context'?: Record<string, any>;
|
|
59
|
+
'parent-font-size'?: number;
|
|
60
|
+
'parent-width'?: number;
|
|
61
|
+
'parent-height'?: number;
|
|
62
|
+
style?: ViewStyle & TextStyle & Record<string, any>;
|
|
63
|
+
children: ReactNode;
|
|
64
|
+
bindgetuserinfo?: (userInfo: any) => void;
|
|
65
|
+
bindtap?: (evt: NativeSyntheticEvent<TouchEvent> | unknown) => void;
|
|
66
|
+
}
|
|
67
|
+
declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HandlerRef<View, ButtonProps>>>;
|
|
68
|
+
export default Button;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
interface Message {
|
|
3
|
+
id?: string;
|
|
4
|
+
type: string;
|
|
5
|
+
payload?: any;
|
|
6
|
+
}
|
|
7
|
+
export default class Bus {
|
|
8
|
+
_paused: Boolean;
|
|
9
|
+
_messageListeners: {
|
|
10
|
+
[key: string]: (message: Message) => void;
|
|
11
|
+
};
|
|
12
|
+
_queue: Message[];
|
|
13
|
+
_send: (message: Message | Message[]) => void;
|
|
14
|
+
_timeoutId: NodeJS.Timeout | null;
|
|
15
|
+
constructor(send: (message: Message | Message[]) => void);
|
|
16
|
+
post(message: Message): Promise<any>;
|
|
17
|
+
handle(message: Message): void;
|
|
18
|
+
pause(): void;
|
|
19
|
+
resume(): void;
|
|
20
|
+
startBatching(): void;
|
|
21
|
+
clearBatchingTimeout(): void;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { WebviewMessage, WEBVIEW_TARGET, CanvasInstance } from './utils';
|
|
2
|
+
export declare class Image {
|
|
3
|
+
[WEBVIEW_TARGET]: string;
|
|
4
|
+
canvas: any;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
private _loadListener;
|
|
8
|
+
private _errorListener;
|
|
9
|
+
private _onload;
|
|
10
|
+
private _onerror;
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
constructor(canvas: CanvasInstance, width?: number, height?: number, noOnConstruction?: boolean);
|
|
13
|
+
postMessage(message: WebviewMessage): any;
|
|
14
|
+
addEventListener(type: 'load' | 'error', callbackFn: Function): any;
|
|
15
|
+
set onload(callback: ((...args: any[]) => void));
|
|
16
|
+
get onload(): ((...args: any[]) => void);
|
|
17
|
+
set onerror(callback: ((...args: any[]) => void));
|
|
18
|
+
get onerror(): ((...args: any[]) => void);
|
|
19
|
+
}
|
|
20
|
+
export declare function createImage(canvas: CanvasInstance, width?: number, height?: number): Image;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebviewMessage, CanvasInstance } from './utils';
|
|
2
|
+
export default class ImageData {
|
|
3
|
+
canvas: CanvasInstance;
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
constructor(canvas: CanvasInstance, dataArray: number[], width: number, height: number, noOnConstruction?: boolean);
|
|
6
|
+
postMessage: (message: WebviewMessage) => Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
export declare function createImageData(canvas: CanvasInstance, dataArray: number[], width: number, height: number): ImageData;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { WebviewConstructor } from './utils';
|
|
2
|
+
export declare enum ConstructorType {
|
|
3
|
+
Image = "Image",
|
|
4
|
+
CanvasGradient = "CanvasGradient",
|
|
5
|
+
ImageData = "ImageData"
|
|
6
|
+
}
|
|
7
|
+
export declare function useConstructorsRegistry(): {
|
|
8
|
+
register: (registerWebviewConstructor: Function) => void;
|
|
9
|
+
getConstructor: (type: ConstructorType) => WebviewConstructor | undefined;
|
|
10
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: "<html><head>\n <meta content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scaleable=no\" name=\"viewport\">\n <style>\n html {\n -ms-content-zooming: none;\n -ms-touch-action: pan-x pan-y;\n }\n body {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: 0;\n padding: 0;\n overflow: hidden;\n }\n * {\n user-select: none;\n -ms-user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n }\n </style>\n </head>\n <body>\n <script>\n var scale = function (ratio) {\n return function (item) {\n if (typeof item === \"number\") {\n return item * ratio;\n }\n return item;\n };\n};\nfunction autoScaleCanvas(canvas) {\n var ctx = canvas.getContext(\"2d\");\n var ratio = window.devicePixelRatio || 1;\n if (ratio !== 1) {\n canvas.width *= ratio;\n canvas.height *= ratio;\n ctx.scale(ratio, ratio);\n ctx.isPointInPath = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return CanvasRenderingContext2D.prototype.isPointInPath.apply(ctx, args.map(scale(ratio)));\n };\n }\n return canvas;\n}\nwindow.autoScaleCanvas = autoScaleCanvas;\n</script>\n<script>\n\nvar WEBVIEW_TARGET = '@@WEBVIEW_TARGET';\n\nvar ID = function () {\n return Math.random().toString(32).slice(2);\n};\n\nvar flattenObjectCopyValue = function (flatObj, srcObj, key) {\n var value = srcObj[key];\n if (typeof value === 'function') {\n return;\n }\n if (typeof value === 'object' && value instanceof Node) {\n return;\n }\n flatObj[key] = flattenObject(value);\n};\n\nvar flattenObject = function (object) {\n if (typeof object !== 'object' || object === null) {\n return object;\n }\n // Handle TypedArray\n if (object instanceof Uint8ClampedArray) {\n return Array.from(object);\n }\n var flatObject = {};\n for (var key in object) {\n flattenObjectCopyValue(flatObject, object, key);\n }\n for (var key in Object.getOwnPropertyNames(object)) {\n flattenObjectCopyValue(flatObject, object, key);\n }\n return flatObject;\n};\n\nvar AutoScaledCanvas = function (element) {\n this.element = element;\n};\n\nAutoScaledCanvas.prototype.toDataURL = function () {\n return this.element.toDataURL.apply(this.element, arguments);\n};\n\nAutoScaledCanvas.prototype.autoScale = function () {\n if (this.savedHeight !== undefined) {\n this.element.height = this.savedHeight;\n }\n if (this.savedWidth !== undefined) {\n this.element.width = this.savedWidth;\n }\n window.autoScaleCanvas(this.element);\n};\n\nObject.defineProperty(AutoScaledCanvas.prototype, 'width', {\n get: function () {\n return this.element.width;\n },\n set: function (value) {\n this.savedWidth = value;\n this.autoScale();\n return value;\n },\n});\n\nObject.defineProperty(AutoScaledCanvas.prototype, 'height', {\n get: function () {\n return this.element.height;\n },\n set: function (value) {\n this.savedHeight = value;\n this.autoScale();\n return value;\n },\n});\nvar toMessage = function (result) {\n if (result instanceof Blob) {\n return {\n type: 'blob',\n payload: btoa(result),\n meta: {},\n };\n }\n if (result instanceof Object) {\n if (!result[WEBVIEW_TARGET]) {\n var id = ID();\n result[WEBVIEW_TARGET] = id;\n targets[id] = result;\n }\n return {\n type: 'json',\n payload: flattenObject(result),\n args: toArgs(flattenObject(result)),\n meta: {\n target: result[WEBVIEW_TARGET],\n constructor: result.__constructorName__ || result.constructor.name,\n },\n };\n }\n return {\n type: 'json',\n payload: typeof result === 'string' ? result : JSON.stringify(result),\n meta: {},\n };\n};\nvar toArgs = function (result) {\n var args = [];\n for (var key in result) {\n if (result[key] !== undefined && key !== '@@WEBVIEW_TARGET') {\n args.push(result[key]);\n }\n }\n return args;\n};\n\nvar createObjectsFromArgs = function (args) {\n for (var index = 0; index < args.length; index += 1) {\n var currentArg = args[index];\n if (currentArg && currentArg.className !== undefined) {\n var className = currentArg.className, classArgs = currentArg.classArgs;\n // new ImageData,第一个参数需要是 Uint8ClampedArray\n var object = new (Function.prototype.bind.apply(constructors[className], [null].concat(classArgs)))();\n args[index] = object;\n }\n }\n return args;\n};\n\nvar canvas = document.createElement('canvas');\ncanvas.style.width = '100%';\ncanvas.style.height = '100%';\nvar autoScaledCanvas = new AutoScaledCanvas(canvas);\n\nvar targets = {\n canvas: autoScaledCanvas,\n context2D: canvas.getContext('2d'),\n};\n\nvar constructors = {\n CanvasGradient: CanvasGradient,\n Image: Image,\n ImageData: ImageData,\n Uint8ClampedArray: Uint8ClampedArray,\n};\n\nImage.bind =\n Image.bind ||\n function () {\n return Image;\n };\n\nImageData.bind =\n ImageData.bind ||\n function () {\n return ImageData;\n };\nUint8ClampedArray.bind =\n Uint8ClampedArray.bind ||\n function () {\n return Uint8ClampedArray;\n };\n\nvar populateRefs = function (arg) {\n if (arg && arg.__ref__) {\n return targets[arg.__ref__];\n }\n return arg;\n};\ndocument.body.appendChild(canvas);\n\nvar mergeObjects = function (target, source) {\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n target[key] = source[key];\n }\n }\n return target;\n};\n\nfunction handleMessage(message) {\n var id = message.id,\n type = message.type,\n payload = message.payload;\n\n switch (type) {\n case 'exec': {\n var target = payload.target,\n method = payload.method,\n args = payload.args;\n var result = targets[target][method].apply(targets[target], args.map(populateRefs));\n var msg = toMessage(result);\n\n if (typeof result === 'object' && !msg.meta.constructor) {\n for (var constructorName in constructors) {\n if (result instanceof constructors[constructorName]) {\n msg.meta.constructor = constructorName;\n }\n }\n }\n window.ReactNativeWebView.postMessage(JSON.stringify(mergeObjects({ id: id }, msg)));\n break;\n }\n case 'set': {\n var target = payload.target,\n key = payload.key,\n value = payload.value;\n targets[target][key] = populateRefs(value);\n break;\n }\n case 'construct': {\n var constructor = payload.constructor,\n target = payload.id,\n args = payload.args || [];\n var newArgs = createObjectsFromArgs(args);\n var object;\n try {\n object = new (Function.prototype.bind.apply(constructors[constructor], [null].concat(newArgs)))();\n }\n catch (error) {\n throw new Error('Error while constructing '.concat(constructor, ' ').concat(error.message));\n }\n object.__constructorName__ = constructor;\n var msg = toMessage({});\n targets[target] = object;\n window.ReactNativeWebView.postMessage(JSON.stringify(mergeObjects({ id: id }, msg)));\n break;\n }\n case 'listen': {\n var types = payload.types,\n target = payload.target;\n for (var i = 0; i < types.length; i++) {\n var eventType = types[i];\n targets[target].addEventListener(eventType, function (e) {\n const message = toMessage({\n type: 'event',\n payload: {\n type: e.type,\n target: mergeObjects(flattenObject(targets[target]), {\n [WEBVIEW_TARGET]: target,\n }),\n },\n });\n window.ReactNativeWebView.postMessage(\n JSON.stringify(mergeObjects({ id: id }, message))\n );\n });\n }\n break;\n}\n }\n}\nvar handleError = function (err, message) {\n window.ReactNativeWebView.postMessage(JSON.stringify({\n id: message.id,\n type: 'error',\n payload: {\n message: err.message,\n stack: err.stack,\n },\n }));\n document.removeEventListener('message', handleIncomingMessage);\n};\n\nfunction handleIncomingMessage(data) {\n if (Array.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n try {\n handleMessage(data[i]);\n } catch (err) {\n handleError(err, data[i]);\n }\n }\n } else {\n try {\n handleMessage(data);\n } catch (err) {\n handleError(err, data);\n }\n }\n}\n\nwindow.mpxWebviewMessageCallback = handleIncomingMessage\n</script>\n \n\n</body></html>";
|
|
2
|
+
export default _default;
|