voltra 2.0.0 → 2.1.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/config/normalize.js +93 -0
- package/build/cjs/config/normalize.js.map +1 -1
- package/build/cjs/index.js +5 -2
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/platforms/android/apply.js +11 -2
- package/build/cjs/platforms/android/apply.js.map +1 -1
- package/build/cjs/platforms/android/generated.js +152 -130
- package/build/cjs/platforms/android/generated.js.map +1 -1
- package/build/cjs/platforms/android/gradle.js +120 -0
- package/build/cjs/platforms/android/gradle.js.map +1 -0
- package/build/cjs/platforms/ios/generated.js +246 -142
- package/build/cjs/platforms/ios/generated.js.map +1 -1
- package/build/cjs/platforms/ios/xcodeTarget.js +68 -0
- package/build/cjs/platforms/ios/xcodeTarget.js.map +1 -1
- package/build/cjs/platforms/shared/widgetModule.js +151 -0
- package/build/cjs/platforms/shared/widgetModule.js.map +1 -0
- package/build/esm/config/normalize.js +93 -0
- package/build/esm/config/normalize.js.map +1 -1
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/platforms/android/apply.js +11 -2
- package/build/esm/platforms/android/apply.js.map +1 -1
- package/build/esm/platforms/android/generated.js +152 -97
- package/build/esm/platforms/android/generated.js.map +1 -1
- package/build/esm/platforms/android/gradle.js +112 -0
- package/build/esm/platforms/android/gradle.js.map +1 -0
- package/build/esm/platforms/ios/generated.js +246 -109
- package/build/esm/platforms/ios/generated.js.map +1 -1
- package/build/esm/platforms/ios/xcodeTarget.js +69 -1
- package/build/esm/platforms/ios/xcodeTarget.js.map +1 -1
- package/build/esm/platforms/shared/widgetModule.js +111 -0
- package/build/esm/platforms/shared/widgetModule.js.map +1 -0
- package/build/types/config/normalize.d.ts.map +1 -1
- package/build/types/config/types.d.ts +32 -0
- package/build/types/config/types.d.ts.map +1 -1
- package/build/types/index.d.ts +3 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/platforms/android/apply.d.ts.map +1 -1
- package/build/types/platforms/android/generated.d.ts.map +1 -1
- package/build/types/platforms/android/gradle.d.ts +18 -0
- package/build/types/platforms/android/gradle.d.ts.map +1 -0
- package/build/types/platforms/ios/generated.d.ts.map +1 -1
- package/build/types/platforms/ios/xcodeTarget.d.ts.map +1 -1
- package/build/types/platforms/shared/widgetModule.d.ts +9 -0
- package/build/types/platforms/shared/widgetModule.d.ts.map +1 -0
- package/package.json +2 -1
- package/src/apply/index.ts +309 -0
- package/src/apply/preflight.ts +172 -0
- package/src/bin.ts +14 -0
- package/src/commands/apply.ts +114 -0
- package/src/config/defaults.ts +34 -0
- package/src/config/load.ts +100 -0
- package/src/config/normalize.ts +562 -0
- package/src/config/types.ts +317 -0
- package/src/cosmiconfig.d.ts +21 -0
- package/src/dependencies/platformPackages.ts +75 -0
- package/src/discovery/android.ts +233 -0
- package/src/discovery/ios.ts +579 -0
- package/src/fs/path.ts +25 -0
- package/src/fs/readWrite.ts +102 -0
- package/src/git/status.ts +205 -0
- package/src/index.ts +204 -0
- package/src/platforms/android/apply.ts +106 -0
- package/src/platforms/android/generated.ts +1284 -0
- package/src/platforms/android/gradle.ts +155 -0
- package/src/platforms/android/manifest.ts +379 -0
- package/src/platforms/ios/apply.ts +139 -0
- package/src/platforms/ios/deploymentTarget.ts +47 -0
- package/src/platforms/ios/entitlements.ts +146 -0
- package/src/platforms/ios/generated.ts +1233 -0
- package/src/platforms/ios/mainAppEntitlements.ts +11 -0
- package/src/platforms/ios/plist.ts +321 -0
- package/src/platforms/ios/podfile.ts +255 -0
- package/src/platforms/ios/targetName.ts +11 -0
- package/src/platforms/ios/xcode.ts +181 -0
- package/src/platforms/ios/xcodeTarget.ts +899 -0
- package/src/platforms/shared/widgetModule.ts +153 -0
- package/src/reporting/clack.ts +67 -0
- package/src/reporting/summary.ts +116 -0
- package/src/state/diff.ts +21 -0
- package/src/state/files.ts +52 -0
- package/src/state/load.ts +66 -0
- package/src/state/save.ts +31 -0
- package/src/xml2js.d.ts +23 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import fs from 'node:fs/promises'
|
|
2
|
+
|
|
3
|
+
import { PBXNativeTarget, XcodeProject } from '@bacons/xcode'
|
|
4
|
+
|
|
5
|
+
import { VoltraCliError } from '../../reporting/summary'
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
PBXCopyFilesBuildPhase,
|
|
9
|
+
PBXFrameworksBuildPhase,
|
|
10
|
+
PBXGroup,
|
|
11
|
+
PBXResourcesBuildPhase,
|
|
12
|
+
PBXSourcesBuildPhase,
|
|
13
|
+
XCBuildConfiguration,
|
|
14
|
+
} from '@bacons/xcode'
|
|
15
|
+
import type { IOSProjectDiscovery } from '../../discovery/ios'
|
|
16
|
+
|
|
17
|
+
const IOS_APP_PRODUCT_TYPE = 'com.apple.product-type.application'
|
|
18
|
+
const { build: buildXcodeProjectJson } = require('@bacons/xcode/json') as {
|
|
19
|
+
build(project: ReturnType<XcodeProject['toJSON']>): string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface IOSXcodeTargetBuildConfigurations {
|
|
23
|
+
all: XCBuildConfiguration[]
|
|
24
|
+
default: XCBuildConfiguration
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface IOSXcodeTargetBuildPhases {
|
|
28
|
+
sources: PBXSourcesBuildPhase
|
|
29
|
+
resources: PBXResourcesBuildPhase
|
|
30
|
+
frameworks: PBXFrameworksBuildPhase
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface IOSXcodeTargetContext {
|
|
34
|
+
target: PBXNativeTarget
|
|
35
|
+
buildConfigurations: IOSXcodeTargetBuildConfigurations
|
|
36
|
+
buildPhases: IOSXcodeTargetBuildPhases
|
|
37
|
+
getCopyFilesBuildPhaseFor(target: PBXNativeTarget): PBXCopyFilesBuildPhase
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface IOSXcodeProjectContext {
|
|
41
|
+
project: XcodeProject
|
|
42
|
+
mainAppTarget: IOSXcodeTargetContext
|
|
43
|
+
mainGroup: PBXGroup
|
|
44
|
+
productsGroup: PBXGroup
|
|
45
|
+
frameworksGroup: PBXGroup
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export class IOSXcodeProjectError extends VoltraCliError {
|
|
49
|
+
constructor(message: string) {
|
|
50
|
+
super(message, 'VOLTRA_IOS_XCODE_FAILED')
|
|
51
|
+
this.name = 'IOSXcodeProjectError'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function openIOSXcodeProject(discovery: IOSProjectDiscovery): IOSXcodeProjectContext {
|
|
56
|
+
try {
|
|
57
|
+
const project = XcodeProject.open(discovery.pbxprojPath)
|
|
58
|
+
const mainGroup = project.rootObject.props.mainGroup
|
|
59
|
+
|
|
60
|
+
if (!mainGroup) {
|
|
61
|
+
throw new IOSXcodeProjectError(`Xcode project is missing a main group: ${discovery.pbxprojPath}`)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const mainAppTarget = resolveMainAppTarget(project, discovery)
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
project,
|
|
68
|
+
mainAppTarget,
|
|
69
|
+
mainGroup,
|
|
70
|
+
productsGroup: getExistingProductGroup(project, discovery),
|
|
71
|
+
frameworksGroup: getExistingFrameworksGroup(project, discovery),
|
|
72
|
+
}
|
|
73
|
+
} catch (error: unknown) {
|
|
74
|
+
if (error instanceof IOSXcodeProjectError) {
|
|
75
|
+
throw error
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
throw new IOSXcodeProjectError(`Failed to open Xcode project ${discovery.pbxprojPath}: ${getErrorMessage(error)}`)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function getApplicationTargets(project: XcodeProject): PBXNativeTarget[] {
|
|
83
|
+
return project.rootObject.props.targets.filter((target): target is PBXNativeTarget => {
|
|
84
|
+
return PBXNativeTarget.is(target) && target.props.productType === IOS_APP_PRODUCT_TYPE
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function getTargetBuildConfigurations(target: PBXNativeTarget): IOSXcodeTargetBuildConfigurations {
|
|
89
|
+
const configurationList = target.props.buildConfigurationList
|
|
90
|
+
|
|
91
|
+
if (!configurationList) {
|
|
92
|
+
throw new IOSXcodeProjectError(`Target '${target.props.name}' is missing a build configuration list.`)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const all = configurationList.props.buildConfigurations
|
|
96
|
+
|
|
97
|
+
if (all.length === 0) {
|
|
98
|
+
throw new IOSXcodeProjectError(`Target '${target.props.name}' does not define any build configurations.`)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
all,
|
|
103
|
+
default: configurationList.getDefaultConfiguration(),
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function getTargetBuildPhases(target: PBXNativeTarget): IOSXcodeTargetBuildPhases {
|
|
108
|
+
return {
|
|
109
|
+
sources: target.getSourcesBuildPhase(),
|
|
110
|
+
resources: target.getResourcesBuildPhase(),
|
|
111
|
+
frameworks: target.getFrameworksBuildPhase(),
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function ensureMainGroupChild(context: IOSXcodeProjectContext, name: string): PBXGroup {
|
|
116
|
+
return context.project.rootObject.ensureMainGroupChild(name)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function ensureProductsGroup(context: IOSXcodeProjectContext): PBXGroup {
|
|
120
|
+
return context.project.rootObject.ensureProductGroup()
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function ensureFrameworksGroup(context: IOSXcodeProjectContext): PBXGroup {
|
|
124
|
+
return context.project.rootObject.getFrameworksGroup()
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function saveIOSXcodeProject(context: IOSXcodeProjectContext): Promise<void> {
|
|
128
|
+
const contents = buildXcodeProjectJson(context.project.toJSON())
|
|
129
|
+
return fs.writeFile(context.project.filePath, contents, 'utf8')
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function resolveMainAppTarget(project: XcodeProject, discovery: IOSProjectDiscovery): IOSXcodeTargetContext {
|
|
133
|
+
const applicationTargets = getApplicationTargets(project)
|
|
134
|
+
const target = applicationTargets.find((candidate) => candidate.props.name === discovery.mainTargetName)
|
|
135
|
+
|
|
136
|
+
if (!target) {
|
|
137
|
+
throw new IOSXcodeProjectError(
|
|
138
|
+
`Xcode project does not contain the discovered main app target '${
|
|
139
|
+
discovery.mainTargetName
|
|
140
|
+
}'. Available application targets: ${applicationTargets
|
|
141
|
+
.map((candidate) => candidate.props.name)
|
|
142
|
+
.sort()
|
|
143
|
+
.join(', ')}`
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return {
|
|
148
|
+
target,
|
|
149
|
+
buildConfigurations: getTargetBuildConfigurations(target),
|
|
150
|
+
buildPhases: getTargetBuildPhases(target),
|
|
151
|
+
getCopyFilesBuildPhaseFor(dependencyTarget: PBXNativeTarget): PBXCopyFilesBuildPhase {
|
|
152
|
+
return target.getCopyBuildPhaseForTarget(dependencyTarget)
|
|
153
|
+
},
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function getExistingProductGroup(project: XcodeProject, discovery: IOSProjectDiscovery): PBXGroup {
|
|
158
|
+
const productGroup = project.rootObject.props.productRefGroup
|
|
159
|
+
|
|
160
|
+
if (!productGroup) {
|
|
161
|
+
throw new IOSXcodeProjectError(`Xcode project is missing the Products group: ${discovery.pbxprojPath}`)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return productGroup
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function getExistingFrameworksGroup(project: XcodeProject, discovery: IOSProjectDiscovery): PBXGroup {
|
|
168
|
+
const frameworksGroup = project.rootObject.props.mainGroup
|
|
169
|
+
?.getChildGroups()
|
|
170
|
+
.find((group) => group.getDisplayName() === 'Frameworks')
|
|
171
|
+
|
|
172
|
+
if (!frameworksGroup) {
|
|
173
|
+
throw new IOSXcodeProjectError(`Xcode project is missing the Frameworks group: ${discovery.pbxprojPath}`)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
return frameworksGroup
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function getErrorMessage(error: unknown): string {
|
|
180
|
+
return error instanceof Error ? error.message : String(error)
|
|
181
|
+
}
|