@tarojs/rn-runner 3.5.5 → 3.5.6-alpha.1

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/src/index.ts CHANGED
@@ -1,104 +1,42 @@
1
- import saveAssets from '@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets'
2
- import { createDevServerMiddleware } from '@react-native-community/cli-server-api'
3
1
  import { PLATFORMS } from '@tarojs/helper'
4
- import * as fse from 'fs-extra'
5
- import * as Metro from 'metro'
6
- import { getResolveDependencyFn } from 'metro/src/lib/transformHelpers'
7
- import * as Server from 'metro/src/Server'
8
- import * as outputBundle from 'metro/src/shared/output/bundle'
9
- import * as path from 'path'
10
- import * as qr from 'qrcode-terminal'
11
- import * as readline from 'readline'
12
- import * as url from 'url'
2
+ import { previewDev,previewProd } from '@tarojs/rn-supporter'
3
+ import { spawn } from 'child_process'
4
+ import { constants,copyFile } from 'fs'
5
+ import { join } from 'path'
13
6
 
14
- import getMetroConfig from './config'
15
7
  import buildComponent from './config/build-component'
16
- import { getRNConfigEntry } from './config/config-holder'
17
- import preview from './config/preview'
18
- import { TerminalReporter } from './config/terminal-reporter'
19
- import { getOpenHost, isWin, PLAYGROUNDINFO } from './utils'
20
8
 
21
- function concatOutputFileName (config: any): string {
22
- // 优先级:--bundle-output > config.output > config.outputRoot
23
- let output = path.join(config.outputRoot, 'index.bundle')
24
- if (config.output) {
25
- const outputType = typeof config.output
26
- if (outputType === 'string') {
27
- output = config.output
28
- } else if (outputType === 'object') {
29
- output = config.output[config.deviceType]
30
- if (!output) {
31
- console.error(`lack value for 'rn.output' configuration with platform '${config.deviceType}': ${JSON.stringify(config.output)}`)
9
+ // 确认根目录下 metro.config.js index.js 是否存在
10
+ const files = ['metro.config.js', 'index.js']
11
+ function confirmFiles () {
12
+ files.forEach(file => {
13
+ const filePath = join(process.cwd(), file)
14
+ copyFile(join(__dirname, '..', 'templates', file), filePath, constants.COPYFILE_EXCL, err => {
15
+ if (err) {
16
+ if (err.code !== 'EEXIST') {
17
+ // 不重复生成配置文件
18
+ console.log(err)
19
+ }
20
+ } else {
21
+ console.log(`${file} created`)
32
22
  }
33
- } else {
34
- console.error(`invalid value for 'rn.output' configuration: ${JSON.stringify(config.output)}`)
35
- }
36
- }
37
- if (config.bundleOutput) {
38
- output = config.bundleOutput
39
- }
40
- const res = path.isAbsolute(output) ? output : path.join('.', output)
41
- fse.ensureDirSync(path.dirname(res))
42
- return res
43
- }
44
-
45
- function concatOutputAssetsDest (config: any): string | undefined {
46
- // 优先级:--assets-dest > config.output > config.outputRoot
47
- let assetDest
48
- if (!config?.deviceType || !config?.output) {
49
- assetDest = config.outputRoot
50
- } else {
51
- assetDest = config.deviceType === 'ios' ? config.output.iosAssetsDest : config.output.androidAssetsDest
52
- }
53
- if (config.assetsDest) {
54
- assetDest = config.assetsDest
55
- }
56
- if (!assetDest) return undefined
57
- const res = path.isAbsolute(assetDest) ? assetDest : path.join('.', assetDest)
58
- fse.ensureDirSync(path.dirname(res))
59
- return res
60
- }
61
-
62
- function getOutputSourceMapOption (config: any): Record<string, any> {
63
- if (!config?.deviceType) {
64
- return {}
65
- }
66
- const isIos = config.deviceType === 'ios'
67
- const sourceMapUrl = config.sourceMapUrl || (isIos ? config?.output?.iosSourceMapUrl : config?.output?.androidSourceMapUrl)
68
- const sourcemapOutput = config.sourcemapOutput || (isIos ? config?.output?.iosSourcemapOutput : config?.output?.androidSourcemapOutput)
69
- const sourcemapSourcesRoot = config.sourcemapSourcesRoot || (isIos ? config?.output?.iosSourcemapSourcesRoot : config?.output?.androidSourcemapSourcesRoot)
70
- sourcemapOutput && fse.ensureDirSync(path.dirname(sourcemapOutput))
71
- return {
72
- sourceMapUrl,
73
- sourcemapOutput,
74
- sourcemapSourcesRoot
75
- }
23
+ })
24
+ })
76
25
  }
77
26
 
78
- // TODO: 返回值
79
- // HttpServer | {code: string, map: string}
80
- // IBuildConfig
81
27
  export default async function build (_appPath: string, config: any): Promise<any> {
28
+ confirmFiles()
82
29
  process.env.TARO_ENV = PLATFORMS.RN
83
- // TODO:新增环境变量是否可以在metro构建过程中可以访问到?
84
- const entry = getRNConfigEntry()
85
- config.entry = entry
86
- const metroConfig = await getMetroConfig(config)
87
- const sourceRoot = config.sourceRoot || 'src'
88
-
89
- const commonOptions = {
90
- platform: config.deviceType,
91
- minify: process.env.NODE_ENV === 'production' || !config.isWatch,
92
- dev: config.isWatch
93
- }
30
+ const isIos = config.deviceType === 'ios'
31
+ const cliParams:string[] = []
32
+ config.output = config.output || {}
33
+ // cli & config 参数透传
94
34
  if (config.resetCache) {
95
- metroConfig.resetCache = config.resetCache
35
+ cliParams.push('--reset-cache')
96
36
  }
97
37
  if (config.publicPath) {
98
- metroConfig.transformer.publicPath = config.publicPath
38
+ cliParams.push('--public-path', config.publicPath)
99
39
  }
100
- metroConfig.reporter = new TerminalReporter(entry, sourceRoot, metroConfig.cacheStores[0])
101
-
102
40
  const onFinish = function (error?) {
103
41
  if (typeof config.onBuildFinish === 'function') {
104
42
  config.onBuildFinish({
@@ -108,145 +46,74 @@ export default async function build (_appPath: string, config: any): Promise<any
108
46
  }
109
47
  if (error instanceof Error) throw error
110
48
  }
111
-
112
49
  if (config.isBuildNativeComp) {
113
50
  return buildComponent(
114
51
  _appPath,
115
52
  config
116
53
  )
117
54
  } else if (config.isWatch) {
118
- if (!metroConfig.server || (metroConfig.server.useGlobalHotkey === undefined)) {
119
- if (!metroConfig.server) {
120
- metroConfig.server = {}
121
- }
122
- metroConfig.server.useGlobalHotkey = true
123
- }
124
55
  if (config.port) {
125
- metroConfig.server.port = config.port
126
- }
127
-
128
- const {
129
- middleware,
130
- messageSocketEndpoint,
131
- websocketEndpoints
132
- } = createDevServerMiddleware({
133
- port: metroConfig.server.port,
134
- watchFolders: metroConfig.watchFolders
135
- })
136
- metroConfig.server.enhanceMiddleware = (metroMiddleware, metroServer) => {
137
- metroConfig.reporter.metroServerInstance = metroServer
138
-
139
- // bundle路由只识别/index.bundle
140
- return middleware.use((req, res, next) => {
141
- // eslint-disable-next-line node/no-deprecated-api
142
- const urlObj = url.parse(req.url)
143
- if (/\/[^]+.bundle/.test(urlObj.pathname || '') && (urlObj.pathname || '').toLowerCase() !== '/index.bundle') {
144
- res.writeHead(400)
145
- res.end('Please access /index.bundle for entry bundling.')
146
- } else if (/^\/debugger-ui\//.test(urlObj.pathname || '')) {
147
- next()
148
- } else {
149
- metroMiddleware(req, res, next)
150
- }
151
- })
56
+ cliParams.push('--port', config.port)
152
57
  }
153
-
154
- // 支持host
155
- return Metro.runServer(metroConfig, {
156
- ...commonOptions,
157
- hmrEnabled: true,
158
- websocketEndpoints
159
- }).then(server => {
160
- console.log(`React-Native Dev server is running on port: ${metroConfig.server.port}`)
161
- console.log('\n\nTo reload the app press "r"\nTo open developer menu press "d"\n')
162
-
163
- readline.emitKeypressEvents(process.stdin)
164
- process.stdin.setRawMode && process.stdin.setRawMode(true)
165
- process.stdin.on('keypress', (_key, data) => {
166
- const { ctrl, name } = data
167
- if (name === 'r') {
168
- messageSocketEndpoint.broadcast('reload')
169
- console.log('Reloading app...')
170
- } else if (name === 'd') {
171
- messageSocketEndpoint.broadcast('devMenu')
172
- console.log('Opening developer menu...')
173
- } else if (ctrl && (name === 'c')) {
174
- process.exit()
175
- }
58
+ try {
59
+ spawn('react-native', ['start'].concat(cliParams), {
60
+ stdio: 'inherit'
176
61
  })
177
-
178
- if (config.qr) {
179
- const host = getOpenHost()
180
- if (host) {
181
- const url = `taro://${host}:${metroConfig.server.port}`
182
- console.log(PLAYGROUNDINFO)
183
- console.log(`print qrcode of '${url}':`)
184
- qr.generate(url, { small: !isWin })
185
- } else {
186
- console.log('print qrcode error: host not found.')
187
- }
62
+ if(config.qr) {
63
+ previewDev({
64
+ port: parseInt(config.port) || 8081,
65
+ })
188
66
  }
189
67
  onFinish(null)
190
- return server
191
- }).catch(e => {
68
+ } catch(e) {
192
69
  onFinish(e)
193
- })
70
+ }
194
71
  } else {
195
- const options = {
196
- ...commonOptions,
197
- entry: './index',
198
- out: concatOutputFileName(config)
72
+ const bundleOutput = config.bundleOutput ? config.bundleOutput : (isIos ? config.output.ios : config.output.android)
73
+ cliParams.push('--bundle-output', bundleOutput)
74
+
75
+ const sourcemapOutput = config.sourcemapOutput ? config.sourcemapOutput : (isIos ? config.output.iosSourcemapOutput : config.output.androidSourcemapOutput)
76
+ if (sourcemapOutput) {
77
+ cliParams.push('--sourcemap-output', sourcemapOutput)
199
78
  }
200
- const savedBuildFunc = outputBundle.build
201
- outputBundle.build = async (packagerClient, requestOptions) => {
202
- const resolutionFn = await getResolveDependencyFn(packagerClient.getBundler().getBundler(), requestOptions.platform)
203
- // try for test case build_noWatch
204
- try {
205
- requestOptions.entryFile = resolutionFn(metroConfig.projectRoot, requestOptions.entryFile)
206
- } catch (e) {}
207
- return savedBuildFunc(packagerClient, requestOptions)
79
+
80
+ const sourceMapUrl = config.sourceMapUrl ? config.sourceMapUrl : (isIos ? config.output.iosSourceMapUrl : config.output.androidSourceMapUrl)
81
+ if (sourceMapUrl) {
82
+ cliParams.push('--sourcemap-use-absolute-path', sourceMapUrl)
208
83
  }
209
84
 
210
- const server = new Server(metroConfig)
85
+ const sourcemapSourcesRoot = config.sourcemapSourcesRoot ? config.sourcemapSourcesRoot : (isIos ? config.output.iosSourcemapSourcesRoot : config.output.androidSourcemapSourcesRoot)
86
+ if (sourcemapSourcesRoot) {
87
+ cliParams.push('--sourcemap-sources-root', sourcemapSourcesRoot)
88
+ }
211
89
 
212
- const sourceMapOption = getOutputSourceMapOption(config)
90
+ const assetsDest = config.assetsDest ? config.assetsDest : (isIos ? config.output.iosAssetsDest : config.output.androidAssetsDest)
91
+ cliParams.push('--assets-dest', assetsDest)
213
92
 
214
93
  try {
215
- const requestOptions = {
216
- ...commonOptions,
217
- ...sourceMapOption,
218
- entryFile: options.entry,
219
- inlineSourceMap: false,
220
- createModuleIdFactory: metroConfig.serializer.createModuleIdFactory
221
- }
222
- const bundle = await outputBundle.build(server, requestOptions)
223
- const outputOptions = {
224
- ...commonOptions,
225
- ...sourceMapOption,
226
- bundleOutput: options.out
227
- }
228
- await outputBundle.save(bundle, outputOptions, console.log)
229
-
230
- // Save the assets of the bundle
231
- const outputAssets = await server.getAssets({
232
- ...Server.DEFAULT_BUNDLE_OPTIONS,
233
- ...requestOptions
94
+ spawn('react-native', [
95
+ 'bundle',
96
+ '--platform',
97
+ config.deviceType,
98
+ '--dev',
99
+ 'false',
100
+ '--entry-file',
101
+ 'index.js'
102
+ ].concat(cliParams), {
103
+ stdio: 'inherit'
234
104
  })
235
- const assetsDest = concatOutputAssetsDest(config)
236
- return await saveAssets(outputAssets, options.platform, assetsDest).then(() => {
237
- if (config.qr) {
238
- preview({
239
- out: options.out,
240
- assetsDest,
241
- platform: options.platform
105
+ if(config.qr) {
106
+ process.on('beforeExit', () => {
107
+ previewProd({
108
+ out: bundleOutput,
109
+ platform: config.deviceType,
110
+ assetsDest: assetsDest,
242
111
  })
243
- }
244
- onFinish(null)
245
- })
246
- } catch (e) {
112
+ })
113
+ }
114
+ onFinish(null)
115
+ } catch(e) {
247
116
  onFinish(e)
248
- } finally {
249
- server.end()
250
117
  }
251
118
  }
252
119
  }
@@ -0,0 +1 @@
1
+ import '@tarojs/rn-supporter/entry-file.js'
@@ -0,0 +1,8 @@
1
+ const { mergeConfig } = require('metro-config')
2
+ const { getMetroConfig } = require('@tarojs/rn-supporter')
3
+
4
+ module.exports = mergeConfig({
5
+ // custom your metro config here
6
+ // https://facebook.github.io/metro/docs/configuration
7
+ resolver: {}
8
+ }, getMetroConfig())
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const FileStore = require("metro-cache/src/stores/FileStore");
13
- class ConditionalFileStore {
14
- constructor(options, entryName) {
15
- this.ignoreEntryFileCache = false;
16
- this._fileStore = new FileStore(options);
17
- this.entryName = entryName || 'app';
18
- }
19
- isEntryCache(cacheItem) {
20
- if (!cacheItem)
21
- return false;
22
- const { dependencies } = cacheItem;
23
- if (!dependencies || !dependencies.length) {
24
- return false;
25
- }
26
- for (const d of dependencies) {
27
- if (d.name.includes(`${this.entryName}.config`)) {
28
- return true;
29
- }
30
- }
31
- return false;
32
- }
33
- get(key) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- const result = yield this._fileStore.get(key);
36
- if (result && this.ignoreEntryFileCache && this.isEntryCache(result)) {
37
- return null;
38
- }
39
- return result;
40
- });
41
- }
42
- set(key, value) {
43
- var _a, _b, _c, _d, _e;
44
- return __awaiter(this, void 0, void 0, function* () {
45
- // fix: 样式文件不写缓存
46
- if (((_e = (_d = (_c = (_b = (_a = value === null || value === void 0 ? void 0 : value.output) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.functionMap) === null || _d === void 0 ? void 0 : _d.names) === null || _e === void 0 ? void 0 : _e.indexOf('ignoreStyleFileCache')) > -1) {
47
- return;
48
- }
49
- return yield this._fileStore.set(key, value);
50
- });
51
- }
52
- clear() {
53
- this._fileStore.clear();
54
- }
55
- }
56
- exports.default = ConditionalFileStore;
57
- //# sourceMappingURL=conditional-file-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conditional-file-store.js","sourceRoot":"","sources":["../../src/config/conditional-file-store.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,8DAA6D;AAE7D,MAAqB,oBAAoB;IAKvC,YAAa,OAAY,EAAE,SAAkB;QAJ7C,yBAAoB,GAAG,KAAK,CAAA;QAK1B,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAI,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,KAAK,CAAA;IACrC,CAAC;IAED,YAAY,CAAE,SAAS;QACrB,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAA;QAC5B,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAA;QAClC,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACzC,OAAO,KAAK,CAAA;SACb;QAED,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;YAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,SAAS,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAA;aACZ;SACF;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEK,GAAG,CAAE,GAAW;;YACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC7C,IAAI,MAAM,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBACpE,OAAO,IAAI,CAAA;aACZ;YACD,OAAO,MAAM,CAAA;QACf,CAAC;KAAA;IAEK,GAAG,CAAE,GAAW,EAAE,KAAU;;;YAChC,gBAAgB;YAChB,IAAI,CAAA,MAAA,MAAA,MAAA,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAG,CAAC,CAAC,0CAAE,IAAI,0CAAE,WAAW,0CAAE,KAAK,0CAAE,OAAO,CAAC,sBAAsB,CAAC,IAAG,CAAC,CAAC,EAAE;gBACtF,OAAM;aACP;YACD,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;;KAC7C;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;CACF;AA5CD,uCA4CC"}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRNConfigTransformer = exports.getRNConfigOutput = exports.getRNConfigEntry = exports.getRNConfigBabelPlugin = exports.getRNConfig = exports.getConfig = void 0;
4
- const lodash_1 = require("lodash");
5
- const fs = require('fs');
6
- let config;
7
- let rnConfig;
8
- const getConfig = () => {
9
- if (config)
10
- return config;
11
- const fileName = `${process.cwd()}/config/index.js`;
12
- if (fs.existsSync(fileName)) {
13
- config = require(`${process.cwd()}/config/index`)(lodash_1.merge);
14
- return config;
15
- }
16
- else {
17
- console.warn('缺少项目基本配置');
18
- config = {};
19
- return config;
20
- }
21
- };
22
- exports.getConfig = getConfig;
23
- const getRNConfig = () => {
24
- getConfig();
25
- if (rnConfig)
26
- return rnConfig;
27
- if (config.rn) {
28
- rnConfig = config.rn;
29
- }
30
- else {
31
- rnConfig = {};
32
- }
33
- return rnConfig;
34
- };
35
- exports.getRNConfig = getRNConfig;
36
- const getRNConfigEntry = () => {
37
- getRNConfig();
38
- return rnConfig.entry || 'app';
39
- };
40
- exports.getRNConfigEntry = getRNConfigEntry;
41
- const getRNConfigOutput = (p) => {
42
- getRNConfig();
43
- if (rnConfig.output) {
44
- if (p === 'ios') {
45
- return rnConfig.output.ios;
46
- }
47
- else {
48
- return rnConfig.output.android;
49
- }
50
- }
51
- else {
52
- return null;
53
- }
54
- };
55
- exports.getRNConfigOutput = getRNConfigOutput;
56
- const getRNConfigTransformer = () => {
57
- getRNConfig();
58
- if (rnConfig.transformer) {
59
- return rnConfig.transformer;
60
- }
61
- else {
62
- return null;
63
- }
64
- };
65
- exports.getRNConfigTransformer = getRNConfigTransformer;
66
- const getRNConfigBabelPlugin = () => {
67
- getRNConfig();
68
- if (rnConfig.babelPlugin) {
69
- return rnConfig.babelPlugin;
70
- }
71
- else {
72
- return null;
73
- }
74
- };
75
- exports.getRNConfigBabelPlugin = getRNConfigBabelPlugin;
76
- //# sourceMappingURL=config-holder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-holder.js","sourceRoot":"","sources":["../../src/config/config-holder.ts"],"names":[],"mappings":";;;AAAA,mCAA8B;AAI9B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAExB,IAAI,MAAc,CAAA;AAClB,IAAI,QAAkB,CAAA;AAEtB,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAA;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,cAAK,CAAC,CAAA;QACxD,OAAO,MAAM,CAAA;KACd;SAAM;QACL,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxB,MAAM,GAAG,EAAE,CAAA;QACX,OAAO,MAAM,CAAA;KACd;AACH,CAAC,CAAA;AAiDQ,8BAAS;AA/ClB,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,SAAS,EAAE,CAAA;IACX,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,IAAI,MAAM,CAAC,EAAE,EAAE;QACb,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAA;KACrB;SAAM;QACL,QAAQ,GAAG,EAAE,CAAA;KACd;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAsCmB,kCAAW;AApC/B,MAAM,gBAAgB,GAAG,GAAG,EAAE;IAC5B,WAAW,EAAE,CAAA;IACb,OAAO,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAA;AAChC,CAAC,CAAA;AAiCwD,4CAAgB;AA/BzE,MAAM,iBAAiB,GAAG,CAAC,CAAC,EAAE,EAAE;IAC9B,WAAW,EAAE,CAAA;IACb,IAAI,QAAQ,CAAC,MAAM,EAAE;QACnB,IAAI,CAAC,KAAK,KAAK,EAAE;YACf,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAA;SAC3B;aAAM;YACL,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAA;SAC/B;KACF;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AAoB0E,8CAAiB;AAlB5F,MAAM,sBAAsB,GAAG,GAAG,EAAE;IAClC,WAAW,EAAE,CAAA;IACb,IAAI,QAAQ,CAAC,WAAW,EAAE;QACxB,OAAO,QAAQ,CAAC,WAAW,CAAA;KAC5B;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AAW6F,wDAAsB;AATpH,MAAM,sBAAsB,GAAG,GAAG,EAAE;IAClC,WAAW,EAAE,CAAA;IACb,IAAI,QAAQ,CAAC,WAAW,EAAE;QACxB,OAAO,QAAQ,CAAC,WAAW,CAAA;KAC5B;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AAEgC,wDAAsB"}
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.defaultConfig = void 0;
13
- const findProjectRoot_1 = require("@react-native-community/cli/build/tools/config/findProjectRoot");
14
- const resolveReactNativePath_1 = require("@react-native-community/cli/build/tools/config/resolveReactNativePath");
15
- const rn_supporter_1 = require("@tarojs/rn-supporter");
16
- const Metro = require("metro");
17
- const os = require("os");
18
- const path = require("path");
19
- const conditional_file_store_1 = require("./conditional-file-store");
20
- const reactNativePath = (0, resolveReactNativePath_1.default)((0, findProjectRoot_1.default)());
21
- const defaultConfig = getDefaultConfig();
22
- exports.defaultConfig = defaultConfig;
23
- function getDefaultConfig() {
24
- const supporter = new rn_supporter_1.Supporter({ fromRunner: true });
25
- const taroMetroConfig = supporter.getMetroConfig();
26
- const metroConfig = {
27
- transformer: taroMetroConfig.transformer,
28
- resolver: taroMetroConfig.resolver,
29
- serializer: {
30
- // We can include multiple copies of InitializeCore here because metro will
31
- // only add ones that are already part of the bundle
32
- getModulesRunBeforeMainModule: () => [
33
- require.resolve(path.join(reactNativePath, 'Libraries/Core/InitializeCore'))
34
- ],
35
- getPolyfills: () => require(path.join(reactNativePath, 'rn-get-polyfills'))()
36
- },
37
- cacheStores: [new conditional_file_store_1.default({
38
- root: path.join(os.tmpdir(), 'metro-cache')
39
- })],
40
- server: {
41
- port: 8081
42
- }
43
- };
44
- return metroConfig;
45
- }
46
- exports.default = (config) => __awaiter(void 0, void 0, void 0, function* () {
47
- const metroConfig = getDefaultConfig();
48
- const res = yield Metro.loadConfig({}, metroConfig);
49
- if (!res.cacheStores || (res.cacheStores.length !== 1) || !(res.cacheStores[0] instanceof conditional_file_store_1.default)) {
50
- throw new Error("cacheStores shouldn't be overridden in metro config.");
51
- }
52
- if (config.entry) {
53
- res.cacheStores[0].entryName = config.entry;
54
- }
55
- return res;
56
- });
57
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oGAA4F;AAC5F,kHAA0G;AAC1G,uDAAgD;AAChD,+BAA8B;AAC9B,yBAAwB;AACxB,6BAA4B;AAE5B,qEAA2D;AAE3D,MAAM,eAAe,GAAW,IAAA,gCAAsB,EAAC,IAAA,yBAAe,GAAE,CAAC,CAAA;AAyBzE,MAAM,aAAa,GAAgB,gBAAgB,EAAE,CAAA;AAyC5C,sCAAa;AAvCtB,SAAS,gBAAgB;IACvB,MAAM,SAAS,GAAG,IAAI,wBAAS,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IACrD,MAAM,eAAe,GAAG,SAAS,CAAC,cAAc,EAAE,CAAA;IAClD,MAAM,WAAW,GAAgB;QAC/B,WAAW,EAAE,eAAe,CAAC,WAAW;QACxC,QAAQ,EAAE,eAAe,CAAC,QAAQ;QAClC,UAAU,EAAE;YACV,2EAA2E;YAC3E,oDAAoD;YACpD,6BAA6B,EAAE,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,OAAO,CACb,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAC5D;aACF;YACD,YAAY,EAAE,GAAG,EAAE,CACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC,EAAE;SAC5D;QACD,WAAW,EAAE,CAAC,IAAI,gCAAoB,CAAM;gBAC1C,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC;aAC5C,CAAC,CAAC;QACH,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;SACX;KACF,CAAA;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,kBAAe,CAAO,MAAW,EAAE,EAAE;IACnC,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAA;IACtC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;IACnD,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,gCAAoB,CAAC,EAAE;QAC/G,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;KACxE;IACD,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAA;KAC5C;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA,CAAA"}
@@ -1,102 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs_1 = require("fs");
4
- const http_1 = require("http");
5
- const mime = require("mime-types");
6
- const path_1 = require("path");
7
- const qr = require("qrcode-terminal");
8
- const url_1 = require("url");
9
- const utils_1 = require("../utils");
10
- const drawableFileTypes = new Set([
11
- 'gif',
12
- 'jpeg',
13
- 'jpg',
14
- 'png',
15
- 'webp',
16
- 'xml'
17
- ]);
18
- function getAndroidAssetSuffix(scale) {
19
- switch (scale) {
20
- case 0.75:
21
- return 'ldpi';
22
- case 1:
23
- return 'mdpi';
24
- case 1.5:
25
- return 'hdpi';
26
- case 2:
27
- return 'xhdpi';
28
- case 3:
29
- return 'xxhdpi';
30
- case 4:
31
- return 'xxxhdpi';
32
- default:
33
- return '';
34
- }
35
- }
36
- function getAndroidResourceFolderName(pathname) {
37
- const ext = (0, path_1.extname)(pathname).replace(/^./, '').toLowerCase();
38
- if (!drawableFileTypes.has(ext)) {
39
- return 'raw';
40
- }
41
- const suffix = getAndroidAssetSuffix(1); // TODO: auto scale
42
- const androidFolder = `drawable-${suffix}`;
43
- return androidFolder;
44
- }
45
- function getAndroidResourceIdentifier(pathname) {
46
- if (pathname[0] === '/') {
47
- pathname = pathname.substr(1);
48
- }
49
- const ext = (0, path_1.extname)(pathname).toLowerCase();
50
- const extReg = new RegExp(ext + '$');
51
- return pathname
52
- .replace(extReg, '')
53
- .toLowerCase()
54
- .replace(/\//g, '_')
55
- .replace(/([^a-z0-9_])/g, '')
56
- .replace(/^assets_/, '') + ext;
57
- }
58
- exports.default = (opt) => {
59
- const port = process.env.PORT || 8079;
60
- const host = `http://${(0, utils_1.getOpenHost)()}:${port}`;
61
- (0, http_1.createServer)(function (request, response) {
62
- const url = new url_1.URL(request.url || '', host);
63
- console.log(`${request.method} ${request.url}`);
64
- if (url.pathname === '/inspector/device') {
65
- response.writeHead(404);
66
- response.end('404', 'utf-8');
67
- return;
68
- }
69
- let filePath;
70
- const contentType = mime.lookup(url.pathname);
71
- if (url.pathname === '/index.js') {
72
- filePath = opt.out;
73
- }
74
- else if (opt.platform === 'ios') {
75
- filePath = (0, path_1.join)(opt.assetsDest || '', url.pathname);
76
- }
77
- else if (opt.platform === 'android') {
78
- filePath = (0, path_1.join)(opt.assetsDest || '', getAndroidResourceFolderName(url.pathname), getAndroidResourceIdentifier(url.pathname));
79
- }
80
- (0, fs_1.readFile)(filePath, function (error, content) {
81
- if (error) {
82
- if (error.code === 'ENOENT') {
83
- response.writeHead(404);
84
- response.end('404', 'utf-8');
85
- }
86
- else {
87
- response.writeHead(500);
88
- response.end('500', 'utf-8');
89
- }
90
- }
91
- else {
92
- response.writeHead(200, { 'Content-Type': contentType });
93
- response.end(content, 'utf-8');
94
- }
95
- });
96
- }).listen(port);
97
- const url = `${host}/index.js`;
98
- console.log(utils_1.PLAYGROUNDINFO);
99
- console.log(`print qrcode of ${opt.platform} bundle '${url}':`);
100
- qr.generate(url, { small: !utils_1.isWin });
101
- };
102
- //# sourceMappingURL=preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/config/preview.ts"],"names":[],"mappings":"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"}