voltra 2.2.0 → 2.3.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/build/cjs/apply/index.js +6 -1
- package/build/cjs/apply/index.js.map +1 -1
- package/build/cjs/config/normalize.js +150 -31
- package/build/cjs/config/normalize.js.map +1 -1
- package/build/cjs/config/perConfiguration.js +29 -0
- package/build/cjs/config/perConfiguration.js.map +1 -0
- package/build/cjs/config/serverUpdate.js +119 -0
- package/build/cjs/config/serverUpdate.js.map +1 -0
- package/build/cjs/config/widgetKind.js +25 -0
- package/build/cjs/config/widgetKind.js.map +1 -0
- package/build/cjs/dependencies/platformPackages.js +9 -0
- package/build/cjs/dependencies/platformPackages.js.map +1 -1
- package/build/cjs/discovery/ios.js +50 -31
- package/build/cjs/discovery/ios.js.map +1 -1
- package/build/cjs/discovery/metro.js +52 -0
- package/build/cjs/discovery/metro.js.map +1 -0
- package/build/cjs/index.js +6 -2
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/platforms/android/generated.js +98 -40
- package/build/cjs/platforms/android/generated.js.map +1 -1
- package/build/cjs/platforms/android/widgetSizing.js +89 -0
- package/build/cjs/platforms/android/widgetSizing.js.map +1 -0
- package/build/cjs/platforms/ios/apply.js +21 -11
- package/build/cjs/platforms/ios/apply.js.map +1 -1
- package/build/cjs/platforms/ios/buildConfigurationValues.js +73 -0
- package/build/cjs/platforms/ios/buildConfigurationValues.js.map +1 -0
- package/build/cjs/platforms/ios/entitlements.js +34 -19
- package/build/cjs/platforms/ios/entitlements.js.map +1 -1
- package/build/cjs/platforms/ios/generated.js +79 -32
- package/build/cjs/platforms/ios/generated.js.map +1 -1
- package/build/cjs/platforms/ios/plist.js +22 -4
- package/build/cjs/platforms/ios/plist.js.map +1 -1
- package/build/cjs/platforms/ios/targetName.js.map +1 -1
- package/build/cjs/platforms/ios/xcodeTarget.js +166 -23
- package/build/cjs/platforms/ios/xcodeTarget.js.map +1 -1
- package/build/cjs/platforms/shared/widgetModule.js +18 -145
- package/build/cjs/platforms/shared/widgetModule.js.map +1 -1
- package/build/esm/apply/index.js +6 -1
- package/build/esm/apply/index.js.map +1 -1
- package/build/esm/config/normalize.js +150 -31
- package/build/esm/config/normalize.js.map +1 -1
- package/build/esm/config/perConfiguration.js +25 -0
- package/build/esm/config/perConfiguration.js.map +1 -0
- package/build/esm/config/serverUpdate.js +112 -0
- package/build/esm/config/serverUpdate.js.map +1 -0
- package/build/esm/config/widgetKind.js +20 -0
- package/build/esm/config/widgetKind.js.map +1 -0
- package/build/esm/dependencies/platformPackages.js +8 -0
- package/build/esm/dependencies/platformPackages.js.map +1 -1
- package/build/esm/discovery/ios.js +50 -31
- package/build/esm/discovery/ios.js.map +1 -1
- package/build/esm/discovery/metro.js +46 -0
- package/build/esm/discovery/metro.js.map +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/platforms/android/generated.js +100 -42
- package/build/esm/platforms/android/generated.js.map +1 -1
- package/build/esm/platforms/android/widgetSizing.js +85 -0
- package/build/esm/platforms/android/widgetSizing.js.map +1 -0
- package/build/esm/platforms/ios/apply.js +21 -11
- package/build/esm/platforms/ios/apply.js.map +1 -1
- package/build/esm/platforms/ios/buildConfigurationValues.js +68 -0
- package/build/esm/platforms/ios/buildConfigurationValues.js.map +1 -0
- package/build/esm/platforms/ios/entitlements.js +34 -19
- package/build/esm/platforms/ios/entitlements.js.map +1 -1
- package/build/esm/platforms/ios/generated.js +80 -33
- package/build/esm/platforms/ios/generated.js.map +1 -1
- package/build/esm/platforms/ios/plist.js +22 -4
- package/build/esm/platforms/ios/plist.js.map +1 -1
- package/build/esm/platforms/ios/targetName.js.map +1 -1
- package/build/esm/platforms/ios/xcodeTarget.js +166 -23
- package/build/esm/platforms/ios/xcodeTarget.js.map +1 -1
- package/build/esm/platforms/shared/widgetModule.js +16 -107
- package/build/esm/platforms/shared/widgetModule.js.map +1 -1
- package/build/types/apply/index.d.ts.map +1 -1
- package/build/types/config/normalize.d.ts.map +1 -1
- package/build/types/config/perConfiguration.d.ts +18 -0
- package/build/types/config/perConfiguration.d.ts.map +1 -0
- package/build/types/config/serverUpdate.d.ts +80 -0
- package/build/types/config/serverUpdate.d.ts.map +1 -0
- package/build/types/config/types.d.ts +91 -30
- package/build/types/config/types.d.ts.map +1 -1
- package/build/types/config/widgetKind.d.ts +11 -0
- package/build/types/config/widgetKind.d.ts.map +1 -0
- package/build/types/dependencies/platformPackages.d.ts +1 -0
- package/build/types/dependencies/platformPackages.d.ts.map +1 -1
- package/build/types/discovery/ios.d.ts +10 -0
- package/build/types/discovery/ios.d.ts.map +1 -1
- package/build/types/discovery/metro.d.ts +21 -0
- package/build/types/discovery/metro.d.ts.map +1 -0
- package/build/types/index.d.ts +3 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/platforms/android/generated.d.ts.map +1 -1
- package/build/types/platforms/android/widgetSizing.d.ts +50 -0
- package/build/types/platforms/android/widgetSizing.d.ts.map +1 -0
- package/build/types/platforms/ios/apply.d.ts.map +1 -1
- package/build/types/platforms/ios/buildConfigurationValues.d.ts +33 -0
- package/build/types/platforms/ios/buildConfigurationValues.d.ts.map +1 -0
- package/build/types/platforms/ios/entitlements.d.ts +4 -4
- package/build/types/platforms/ios/entitlements.d.ts.map +1 -1
- package/build/types/platforms/ios/generated.d.ts +14 -2
- package/build/types/platforms/ios/generated.d.ts.map +1 -1
- package/build/types/platforms/ios/plist.d.ts +3 -3
- package/build/types/platforms/ios/plist.d.ts.map +1 -1
- package/build/types/platforms/ios/podfile.d.ts +2 -2
- package/build/types/platforms/ios/podfile.d.ts.map +1 -1
- package/build/types/platforms/ios/targetName.d.ts +2 -2
- package/build/types/platforms/ios/targetName.d.ts.map +1 -1
- package/build/types/platforms/ios/xcodeTarget.d.ts +4 -2
- package/build/types/platforms/ios/xcodeTarget.d.ts.map +1 -1
- package/build/types/platforms/shared/widgetModule.d.ts +12 -3
- package/build/types/platforms/shared/widgetModule.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/apply/index.ts +6 -1
- package/src/config/normalize.node.test.ts +105 -0
- package/src/config/normalize.ts +217 -45
- package/src/config/perConfiguration.ts +49 -0
- package/src/config/serverUpdate.ts +160 -0
- package/src/config/types.ts +97 -30
- package/src/config/widgetKind.node.test.ts +27 -0
- package/src/config/widgetKind.ts +27 -0
- package/src/dependencies/platformPackages.ts +11 -0
- package/src/discovery/ios.ts +104 -60
- package/src/discovery/metro.node.test.ts +91 -0
- package/src/discovery/metro.ts +54 -0
- package/src/index.ts +8 -0
- package/src/platforms/android/generated.ts +144 -47
- package/src/platforms/android/widgetSizing.ts +112 -0
- package/src/platforms/ios/apply.ts +21 -11
- package/src/platforms/ios/buildConfigurationValues.ts +105 -0
- package/src/platforms/ios/entitlements.ts +55 -31
- package/src/platforms/ios/generated.node.test.ts +61 -0
- package/src/platforms/ios/generated.ts +137 -38
- package/src/platforms/ios/plist.ts +36 -7
- package/src/platforms/ios/podfile.ts +2 -2
- package/src/platforms/ios/targetName.ts +2 -2
- package/src/platforms/ios/xcodeTarget.ts +248 -43
- package/src/platforms/shared/widgetModule.ts +22 -140
|
@@ -1,153 +1,35 @@
|
|
|
1
|
-
import
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import vm from 'node:vm'
|
|
4
|
-
import { createRequire } from 'node:module'
|
|
1
|
+
import { createWidgetModuleLoader, type WidgetModuleLoader } from '@use-voltra/compiler'
|
|
5
2
|
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
const MODULE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '']
|
|
3
|
+
import type { VoltraPlatform } from '../../config/types'
|
|
9
4
|
|
|
10
5
|
export interface WidgetModuleBuildInfo {
|
|
11
6
|
isDev: false
|
|
12
7
|
metroUrl: null
|
|
13
8
|
appVersion: 'unknown'
|
|
14
|
-
voltraVersion:
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const DYNAMIC_WIDGET_BUILD_INFO: WidgetModuleBuildInfo = {
|
|
18
|
-
isDev: false,
|
|
19
|
-
metroUrl: null,
|
|
20
|
-
appVersion: 'unknown',
|
|
21
|
-
voltraVersion: '1.4.1',
|
|
9
|
+
voltraVersion: string
|
|
22
10
|
}
|
|
23
11
|
|
|
24
|
-
export function
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const moduleCache = new Map<string, unknown>()
|
|
31
|
-
|
|
32
|
-
const customRequire = (moduleSpecifier: string, currentDir: string): unknown => {
|
|
33
|
-
if (!isLocalModule(moduleSpecifier)) {
|
|
34
|
-
return projectRequire(moduleSpecifier)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const resolvedModulePath = resolveModulePath(moduleSpecifier, currentDir)
|
|
38
|
-
|
|
39
|
-
if (!resolvedModulePath) {
|
|
40
|
-
throw createError(`Cannot resolve module '${moduleSpecifier}' from '${currentDir}'`)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const cachedModule = moduleCache.get(resolvedModulePath)
|
|
44
|
-
if (cachedModule !== undefined) {
|
|
45
|
-
return cachedModule
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const transpiledCode = transpileWidgetModule(projectRoot, resolvedModulePath, projectRequire, createError)
|
|
49
|
-
const moduleDir = path.dirname(resolvedModulePath)
|
|
50
|
-
const moduleRecord = { exports: {} as Record<string, unknown> }
|
|
51
|
-
moduleCache.set(resolvedModulePath, moduleRecord.exports)
|
|
52
|
-
|
|
53
|
-
const context = vm.createContext({
|
|
54
|
-
__dirname: moduleDir,
|
|
55
|
-
__filename: resolvedModulePath,
|
|
56
|
-
console,
|
|
57
|
-
exports: moduleRecord.exports,
|
|
58
|
-
module: moduleRecord,
|
|
59
|
-
process,
|
|
60
|
-
require: (specifier: string) => customRequire(specifier, moduleDir),
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
const script = new vm.Script(transpiledCode, { filename: resolvedModulePath })
|
|
64
|
-
script.runInContext(context)
|
|
65
|
-
|
|
66
|
-
moduleCache.set(resolvedModulePath, moduleRecord.exports)
|
|
67
|
-
return moduleRecord.exports
|
|
12
|
+
export function createDynamicWidgetBuildInfo(voltraVersion: string): WidgetModuleBuildInfo {
|
|
13
|
+
return {
|
|
14
|
+
isDev: false,
|
|
15
|
+
metroUrl: null,
|
|
16
|
+
appVersion: 'unknown',
|
|
17
|
+
voltraVersion,
|
|
68
18
|
}
|
|
69
|
-
|
|
70
|
-
return customRequire(filePath, path.dirname(filePath))
|
|
71
19
|
}
|
|
72
20
|
|
|
73
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Loader used by the apply pipeline to evaluate widget source at build time.
|
|
23
|
+
*
|
|
24
|
+
* The evaluation rules — which imports are allowed and what they resolve to — live in
|
|
25
|
+
* `@use-voltra/compiler` so that `voltra apply`, the Expo config plugins, and the Metro
|
|
26
|
+
* widget bundler all apply the same contract.
|
|
27
|
+
*/
|
|
28
|
+
export function createGeneratedWidgetModuleLoader(
|
|
74
29
|
projectRoot: string,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
):
|
|
79
|
-
|
|
80
|
-
const projectBabelConfigPath = resolveProjectBabelConfig(projectRoot)
|
|
81
|
-
const result = babel.transformSync(source, {
|
|
82
|
-
babelrc: false,
|
|
83
|
-
configFile: projectBabelConfigPath,
|
|
84
|
-
cwd: projectRoot,
|
|
85
|
-
filename: filePath,
|
|
86
|
-
presets: projectBabelConfigPath ? undefined : [resolveFallbackBabelPreset(projectRequire, createError)],
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
if (!result?.code) {
|
|
90
|
-
throw createError(`Babel transpilation failed for ${filePath}`)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return result.code
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function resolveProjectBabelConfig(projectRoot: string): string | undefined {
|
|
97
|
-
const candidates = ['babel.config.js', 'babel.config.cjs', 'babel.config.mjs']
|
|
98
|
-
|
|
99
|
-
for (const candidate of candidates) {
|
|
100
|
-
const candidatePath = path.join(projectRoot, candidate)
|
|
101
|
-
if (fs.existsSync(candidatePath)) {
|
|
102
|
-
return candidatePath
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return undefined
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function resolveFallbackBabelPreset(projectRequire: NodeRequire, createError: (message: string) => Error): string {
|
|
110
|
-
try {
|
|
111
|
-
return projectRequire.resolve('@react-native/babel-preset')
|
|
112
|
-
} catch {
|
|
113
|
-
try {
|
|
114
|
-
return projectRequire.resolve('babel-preset-expo')
|
|
115
|
-
} catch {
|
|
116
|
-
throw createError(
|
|
117
|
-
'Could not resolve a Babel preset for widget evaluation. Add a project babel.config.js or install @react-native/babel-preset.'
|
|
118
|
-
)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function createProjectRequire(projectRoot: string): NodeRequire {
|
|
124
|
-
return createRequire(path.join(projectRoot, 'package.json'))
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function isLocalModule(moduleSpecifier: string): boolean {
|
|
128
|
-
return moduleSpecifier.startsWith('.') || moduleSpecifier.startsWith('/')
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function resolveModulePath(moduleSpecifier: string, fromDir: string): string | null {
|
|
132
|
-
const basePath = path.resolve(fromDir, moduleSpecifier)
|
|
133
|
-
|
|
134
|
-
for (const extension of MODULE_EXTENSIONS) {
|
|
135
|
-
const candidate = `${basePath}${extension}`
|
|
136
|
-
if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {
|
|
137
|
-
return candidate
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (!fs.existsSync(basePath) || !fs.statSync(basePath).isDirectory()) {
|
|
142
|
-
return null
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
for (const extension of MODULE_EXTENSIONS) {
|
|
146
|
-
const indexCandidate = path.join(basePath, `index${extension}`)
|
|
147
|
-
if (fs.existsSync(indexCandidate) && fs.statSync(indexCandidate).isFile()) {
|
|
148
|
-
return indexCandidate
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return null
|
|
30
|
+
platform: VoltraPlatform,
|
|
31
|
+
createError: (message: string) => Error,
|
|
32
|
+
onWarning?: (message: string) => void
|
|
33
|
+
): WidgetModuleLoader {
|
|
34
|
+
return createWidgetModuleLoader({ projectRoot, platform, createError, onWarning })
|
|
153
35
|
}
|