@yahoo/uds 0.1.13 → 0.1.14
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.
@@ -1,22 +1,21 @@
|
|
1
1
|
import { EasJsonAccessor, EasJsonUtils, Platform } from '@expo/eas-json';
|
2
2
|
import { type Props, print } from 'bluebun';
|
3
|
-
import {
|
3
|
+
import { $, semver, which } from 'bun';
|
4
4
|
|
5
5
|
export interface MobileProps extends Props {
|
6
6
|
options: {
|
7
7
|
profile: string;
|
8
|
-
platform: Platform
|
8
|
+
platform: Platform;
|
9
9
|
jsEngine?: 'hermes' | 'jsc';
|
10
10
|
debug?: boolean;
|
11
11
|
};
|
12
12
|
}
|
13
13
|
|
14
|
-
async function needsBinary(lib: string) {
|
15
|
-
|
16
|
-
return whichLib.includes('not found');
|
14
|
+
export async function needsBinary(lib: string) {
|
15
|
+
return which(lib) === null;
|
17
16
|
}
|
18
17
|
|
19
|
-
async function needsBrewFormula(formula: string) {
|
18
|
+
export async function needsBrewFormula(formula: string) {
|
20
19
|
return (await $`brew list --formula | grep ${formula} | wc -l`.text()).trim() === '0';
|
21
20
|
}
|
22
21
|
|
@@ -28,87 +27,67 @@ export async function setup({
|
|
28
27
|
env?: Partial<typeof Bun.env>;
|
29
28
|
}) {
|
30
29
|
const { profile, platform, jsEngine = 'hermes', debug = false } = props.options;
|
30
|
+
const isIOS = platform === Platform.IOS;
|
31
|
+
const isAndroid = platform === Platform.ANDROID;
|
31
32
|
|
32
33
|
/* -------------------------------------------------------------------------- */
|
33
|
-
/*
|
34
|
+
/* XCODE SETUP */
|
34
35
|
/* -------------------------------------------------------------------------- */
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
if (isIOS) {
|
37
|
+
const xcodePath = await $`xcode-select -p`.text();
|
38
|
+
const needsXcode = !xcodePath.startsWith('/Applications');
|
39
|
+
const needsXcrun = await needsBinary('xcrun');
|
40
|
+
|
41
|
+
if (needsXcode) {
|
42
|
+
console.write(
|
43
|
+
'You must have XCode installed before continuing... Visit https://apps.apple.com/us/app/xcode/id497799835?mt=12 to download.',
|
44
|
+
);
|
45
|
+
throw new Error('XCode not installed');
|
46
|
+
}
|
40
47
|
|
41
48
|
/**
|
42
|
-
*
|
43
|
-
*
|
44
|
-
*
|
45
|
-
* brew to their path, but doesn't do it for them. This logic attempts to do that
|
46
|
-
* so we can automatically proceed to the next steps of auto-installing
|
47
|
-
* the necessary dependencies for local development.
|
49
|
+
* Installing the XCode command line tools & simulators normally
|
50
|
+
* requires opening up XCode to install.
|
51
|
+
* This conditional is to avoid having to do that.
|
48
52
|
*/
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
if (isLinux) {
|
56
|
-
shellRcFile = shellType.includes('zsh') ? '.zshrc' : '.bashrc';
|
57
|
-
} else {
|
58
|
-
shellRcFile = shellType.includes('zsh') ? '.zprofile' : '.bash_profile';
|
59
|
-
}
|
60
|
-
|
61
|
-
const shellRcPath = `${Bun.env.HOME}/${shellRcFile}`;
|
62
|
-
let shellRcContents = '';
|
63
|
-
try {
|
64
|
-
shellRcContents = await Bun.file(shellRcPath).text();
|
65
|
-
} catch (err) {
|
66
|
-
// Ignore if it doesn't exist. We create it below.
|
67
|
-
}
|
68
|
-
|
69
|
-
if (!shellRcContents.includes('homebrew')) {
|
70
|
-
console.log('Adding brew to $PATH...');
|
71
|
-
const newShellRcContents = `${shellRcContents}\neval "$(${homebrewPrefix}/bin/brew shellenv)"`;
|
72
|
-
await Bun.write(shellRcPath, newShellRcContents);
|
53
|
+
if (needsXcrun) {
|
54
|
+
/**
|
55
|
+
* https://developer.apple.com/documentation/xcode/installing-additional-simulator-runtimes#Install-and-manage-Simulator-runtimes-from-the-command-line
|
56
|
+
*/
|
57
|
+
await $`xcodebuild -runFirstLaunch`;
|
58
|
+
await $`xcodebuild -downloadPlatform iOS`;
|
73
59
|
}
|
74
60
|
}
|
75
61
|
|
76
|
-
/* -------------------------------------------------------------------------- */
|
77
|
-
/* FASTLANE SETUP */
|
78
|
-
/* -------------------------------------------------------------------------- */
|
79
|
-
const needsFastlane = await needsBrewFormula('fastlane');
|
80
|
-
if (needsFastlane) {
|
81
|
-
console.log('Installing fastlane...');
|
82
|
-
await $`brew install fastlane`;
|
83
|
-
}
|
84
|
-
|
85
|
-
/* -------------------------------------------------------------------------- */
|
86
|
-
/* COCOAPODS SETUP */
|
87
|
-
/* -------------------------------------------------------------------------- */
|
88
|
-
const needsCocoapods = await needsBrewFormula('cocoapods');
|
89
|
-
if (needsCocoapods) {
|
90
|
-
console.log('Installing cocoapods...');
|
91
|
-
await $`brew install cocoapods`;
|
92
|
-
}
|
93
|
-
|
94
62
|
/* -------------------------------------------------------------------------- */
|
95
63
|
/* JAVA DEVELOPMENT KIT */
|
96
64
|
/* -------------------------------------------------------------------------- */
|
97
|
-
if (
|
65
|
+
if (isAndroid) {
|
98
66
|
const jdkPath = await $`brew info --cask zulu17`.text();
|
99
67
|
const needsJdk = jdkPath.includes('unavailable');
|
100
68
|
if (needsJdk) {
|
101
|
-
console.
|
69
|
+
console.write('Installing Java Development Kit for Android...');
|
102
70
|
await $`brew install --cask zulu17`;
|
103
71
|
}
|
104
72
|
}
|
105
73
|
|
106
74
|
/* -------------------------------------------------------------------------- */
|
107
|
-
/*
|
75
|
+
/* EAS CONFIG SETUP */
|
108
76
|
/* -------------------------------------------------------------------------- */
|
77
|
+
/**
|
78
|
+
* eas.json is used to define build profiles for different environments.
|
79
|
+
* For example, you may have a profile for development, staging, and production.
|
80
|
+
*
|
81
|
+
* The EAS CLI is used to build and run an app locally based on the eas.json,
|
82
|
+
* but it isn't opinionated about how you define your profiles.
|
83
|
+
*
|
84
|
+
* We however want to enforce some conventions to make it easier to get started.
|
85
|
+
* We also want to store our builds outside of EAS ecosystem since they auto
|
86
|
+
* delete after 30 days & our builds infrequently.
|
87
|
+
*
|
88
|
+
*/
|
109
89
|
const appDirectory = Bun.env.PWD;
|
110
90
|
const easJsonAccessor = EasJsonAccessor.fromProjectPath(appDirectory);
|
111
|
-
|
112
91
|
const easProfiles = await EasJsonUtils.getBuildProfileNamesAsync(easJsonAccessor);
|
113
92
|
|
114
93
|
if (!easProfiles.includes(profile)) {
|
@@ -126,20 +105,22 @@ export async function setup({
|
|
126
105
|
}
|
127
106
|
|
128
107
|
const easJsonConfig = await EasJsonUtils.getBuildProfileAsync(easJsonAccessor, platform, profile);
|
129
|
-
|
130
108
|
const easCliConfig = await EasJsonUtils.getCliConfigAsync(easJsonAccessor);
|
131
109
|
const easCliVersion = easCliConfig?.version ?? 'latest';
|
132
110
|
|
133
111
|
/* -------------------------------------------------------------------------- */
|
134
112
|
/* EAS CLI SETUP */
|
135
113
|
/* -------------------------------------------------------------------------- */
|
114
|
+
/**
|
115
|
+
* EAS CLI is used to build and run an app locally.
|
116
|
+
*/
|
136
117
|
const needsEasCli = await needsBinary('eas');
|
137
118
|
if (needsEasCli) {
|
138
|
-
await $`bun install eas-cli@${easCliVersion} -g
|
119
|
+
await $`bun install eas-cli@${easCliVersion} -g`.quiet();
|
139
120
|
} else {
|
140
121
|
const currentEasCliVersion = await $`eas --version`.text();
|
141
|
-
if (currentEasCliVersion
|
142
|
-
await $`bun install eas-cli@${easCliVersion} -g
|
122
|
+
if (!semver.satisfies(currentEasCliVersion, easCliVersion)) {
|
123
|
+
await $`bun install eas-cli@${easCliVersion} -g`.quiet();
|
143
124
|
}
|
144
125
|
}
|
145
126
|
|
@@ -150,7 +131,7 @@ export async function setup({
|
|
150
131
|
} = easJsonConfig.env ?? {};
|
151
132
|
|
152
133
|
// TODO: Add additional checks for ensuring this value adheres to Android formatting specs
|
153
|
-
if (
|
134
|
+
if (isAndroid && !androidId) {
|
154
135
|
throw new Error(`
|
155
136
|
APP_ANDROID_BUNDLE_IDENTIFIER must be defined in eas.json within the ${profile} > env config.
|
156
137
|
See https://docs.expo.dev/build-reference/variables/#setting-plaintext-environment-variables-in-easjson for information about env variables in eas.json
|
@@ -174,7 +155,7 @@ export async function setup({
|
|
174
155
|
}
|
175
156
|
|
176
157
|
// TODO: Add additional checks for ensuring this value adheres to Uniform Type Identifier
|
177
|
-
if (
|
158
|
+
if (isIOS && !appleId) {
|
178
159
|
throw new Error(`
|
179
160
|
APP_APPLE_BUNDLE_IDENTIFIER must be defined in eas.json within the ${profile} > env config.
|
180
161
|
See https://docs.expo.dev/build-reference/variables/#setting-plaintext-environment-variables-in-easjson for information about env variables in eas.json
|
@@ -197,11 +178,13 @@ export async function setup({
|
|
197
178
|
}
|
198
179
|
|
199
180
|
const outputName = `${platform}-${profile}-${jsEngine}`;
|
200
|
-
// TODO: make this configurable
|
201
|
-
const prebuildsDir = `${appDirectory}/prebuilds`;
|
181
|
+
const prebuildsDir = `${appDirectory}/prebuilds`; // TODO: make this configurable
|
202
182
|
const outputDir = `${prebuildsDir}/${outputName}`;
|
203
183
|
const outputFileBase = `${outputDir}/${outputName}`;
|
204
184
|
|
185
|
+
/* -------------------------------------------------------------------------- */
|
186
|
+
/* ENVIRONMENT VARIABLES */
|
187
|
+
/* -------------------------------------------------------------------------- */
|
205
188
|
let envVars = Bun.env;
|
206
189
|
|
207
190
|
envVars = {
|
@@ -226,6 +209,7 @@ export async function setup({
|
|
226
209
|
envVars = { ...envVars, ...envOpts };
|
227
210
|
}
|
228
211
|
|
212
|
+
/** Change the default environment variables for shells created by this instance. */
|
229
213
|
$.env(envVars);
|
230
214
|
|
231
215
|
const output = {
|
@@ -233,10 +217,10 @@ export async function setup({
|
|
233
217
|
dir: outputDir,
|
234
218
|
prebuildsDir: prebuildsDir,
|
235
219
|
fileBase: outputFileBase,
|
236
|
-
artifact:
|
237
|
-
app:
|
220
|
+
artifact: isIOS ? `${outputFileBase}.tar.gz` : `${outputFileBase}.zip`,
|
221
|
+
app: isIOS ? `${outputFileBase}.app` : 'todo fix android',
|
238
222
|
get launchFile() {
|
239
|
-
return
|
223
|
+
return isIOS ? this.artifact : this.apk.signed;
|
240
224
|
},
|
241
225
|
apk: {
|
242
226
|
contents: `${outputFileBase}/build`,
|
@@ -248,7 +232,7 @@ export async function setup({
|
|
248
232
|
};
|
249
233
|
|
250
234
|
return {
|
251
|
-
scheme:
|
235
|
+
scheme: isIOS ? appleId : androidId,
|
252
236
|
channel: easJsonConfig.channel,
|
253
237
|
debug,
|
254
238
|
profile,
|
@@ -1,6 +1,5 @@
|
|
1
|
-
import {
|
2
|
-
import type
|
3
|
-
import { setup } from './_setup';
|
1
|
+
import { $, semver } from 'bun';
|
2
|
+
import { setup, needsBinary, needsBrewFormula, type MobileProps } from './_setup';
|
4
3
|
|
5
4
|
export default {
|
6
5
|
name: 'build',
|
@@ -10,6 +9,88 @@ export default {
|
|
10
9
|
props,
|
11
10
|
});
|
12
11
|
|
12
|
+
/* ----- Homebrew, Fastlane, and Cocoapods are only required for builds. ---- */
|
13
|
+
/* -------------------------------------------------------------------------- */
|
14
|
+
/* HOMEBREW SETUP */
|
15
|
+
/* -------------------------------------------------------------------------- */
|
16
|
+
const needsBrew = await needsBinary('brew');
|
17
|
+
if (needsBrew) {
|
18
|
+
console.write('Installing brew...');
|
19
|
+
await $`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`;
|
20
|
+
console.write('Installing brew...Complete');
|
21
|
+
|
22
|
+
/**
|
23
|
+
* This logic was ported from the homebrew installer script
|
24
|
+
* https://github.com/Homebrew/install/blob/master/install.sh#L153C5-L153C63.
|
25
|
+
* However, their script just alerts users to the fact that they need to add
|
26
|
+
* brew to their path, but doesn't do it for them. This logic attempts to do that
|
27
|
+
* so we can automatically proceed to the next steps of auto-installing
|
28
|
+
* the necessary dependencies for local development.
|
29
|
+
*/
|
30
|
+
const machineArch = await $`uname -m`.text();
|
31
|
+
const isLinux = (await $`uname`.text()) === 'Linux';
|
32
|
+
const shellType = await $`echo $SHELL`.text();
|
33
|
+
const homebrewPrefix = machineArch.includes('arm64') ? '/opt/homebrew' : '/usr/local';
|
34
|
+
let shellRcFile;
|
35
|
+
|
36
|
+
if (isLinux) {
|
37
|
+
shellRcFile = shellType.includes('zsh') ? '.zshrc' : '.bashrc';
|
38
|
+
} else {
|
39
|
+
shellRcFile = shellType.includes('zsh') ? '.zprofile' : '.bash_profile';
|
40
|
+
}
|
41
|
+
|
42
|
+
const shellRcPath = `${Bun.env.HOME}/${shellRcFile}`;
|
43
|
+
let shellRcContents = '';
|
44
|
+
try {
|
45
|
+
shellRcContents = await Bun.file(shellRcPath).text();
|
46
|
+
} catch (err) {
|
47
|
+
// Ignore if it doesn't exist. We create it below.
|
48
|
+
}
|
49
|
+
|
50
|
+
if (!shellRcContents.includes('homebrew')) {
|
51
|
+
console.write('Adding brew to $PATH...');
|
52
|
+
const newShellRcContents = `${shellRcContents}\neval "$(${homebrewPrefix}/bin/brew shellenv)"`;
|
53
|
+
await Bun.write(shellRcPath, newShellRcContents);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
/* -------------------------------------------------------------------------- */
|
58
|
+
/* FASTLANE SETUP */
|
59
|
+
/* -------------------------------------------------------------------------- */
|
60
|
+
const needsFastlane = await needsBrewFormula('fastlane');
|
61
|
+
if (needsFastlane) {
|
62
|
+
console.write('Installing fastlane...');
|
63
|
+
await $`brew install fastlane`;
|
64
|
+
}
|
65
|
+
|
66
|
+
/* -------------------------------------------------------------------------- */
|
67
|
+
/* COCOAPODS SETUP */
|
68
|
+
/* -------------------------------------------------------------------------- */
|
69
|
+
const needsCocoapods = await needsBrewFormula('cocoapods');
|
70
|
+
/** https://github.com/facebook/react-native/issues/42698#issuecomment-1915670708 */
|
71
|
+
const validCocoapodsVersion = '1.14.3';
|
72
|
+
|
73
|
+
const installCocoapods = async () =>
|
74
|
+
await $`brew install ${import.meta.dirname}/install/cocoapods.rb`;
|
75
|
+
|
76
|
+
if (needsCocoapods) {
|
77
|
+
console.write('Installing cocoapods...');
|
78
|
+
await installCocoapods();
|
79
|
+
} else {
|
80
|
+
const cocoapodsVersion = await $`pod --version`.text();
|
81
|
+
const needsDowngrade = semver.satisfies(cocoapodsVersion, `>${validCocoapodsVersion}`);
|
82
|
+
if (needsDowngrade) {
|
83
|
+
await $`brew unlink cocoapods`;
|
84
|
+
await $`brew uninstall cocoapods`;
|
85
|
+
console.write(
|
86
|
+
`Downgrading cocoapods from ${cocoapodsVersion} to ${validCocoapodsVersion}...`,
|
87
|
+
);
|
88
|
+
await installCocoapods();
|
89
|
+
await $`brew link cocoapods`;
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
13
93
|
await $`eas build --local --non-interactive --json --clear-cache --platform ${platform} --profile ${profile} --output ${output.artifact}`;
|
94
|
+
console.write('You can now run your dev command to start the app!');
|
14
95
|
},
|
15
96
|
};
|
package/cli/commands/expo/dev.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Props } from 'bluebun';
|
2
|
-
import {
|
2
|
+
import { $, sleep } from 'bun';
|
3
3
|
import { setup, type MobileProps } from './_setup';
|
4
4
|
|
5
5
|
interface MobileStartProps extends Props {
|
@@ -12,7 +12,7 @@ interface MobileStartProps extends Props {
|
|
12
12
|
type SimDevice = { udid: string; name: string; state: 'Booted' | 'Shutdown' };
|
13
13
|
type SimList = {
|
14
14
|
devices: {
|
15
|
-
[
|
15
|
+
[key: string]: SimDevice[];
|
16
16
|
};
|
17
17
|
};
|
18
18
|
|
@@ -20,7 +20,6 @@ export default {
|
|
20
20
|
name: 'dev',
|
21
21
|
description: '🚧 Dev',
|
22
22
|
run: async (props: MobileStartProps) => {
|
23
|
-
console.log('running dev');
|
24
23
|
const { platform, scheme, output } = await setup({
|
25
24
|
props,
|
26
25
|
env: {
|
@@ -28,52 +27,56 @@ export default {
|
|
28
27
|
},
|
29
28
|
});
|
30
29
|
|
31
|
-
if (platform === 'ios') {
|
32
|
-
const xcodePath = await $`xcode-select -p`.text();
|
33
|
-
const xcodeExists = xcodePath.startsWith('/Applications');
|
34
|
-
|
35
|
-
if (xcodeExists) {
|
36
|
-
await $`open -a simulator`;
|
37
|
-
const deviceList = (await $`xcrun simctl list devices available -j -e`.json()) as SimList;
|
38
|
-
|
39
|
-
const devices = Object.values(deviceList?.devices).flatMap((item) => item);
|
40
|
-
|
41
|
-
if (devices.length === 0) {
|
42
|
-
throw new Error('No devices found');
|
43
|
-
} else {
|
44
|
-
const isBooted = devices.find((device: SimDevice) => device.state === 'Booted');
|
45
|
-
if (!isBooted) {
|
46
|
-
const iphone15Max = devices.find(
|
47
|
-
(device: SimDevice) => device.name === 'iPhone 15 Pro Max',
|
48
|
-
);
|
49
|
-
if (!iphone15Max) {
|
50
|
-
throw new Error('iPhone 15 Pro Max not found');
|
51
|
-
} else {
|
52
|
-
const udid = iphone15Max.udid;
|
53
|
-
await $`xcrun simctl boot ${udid}`;
|
54
|
-
}
|
55
|
-
}
|
56
|
-
}
|
57
|
-
} else {
|
58
|
-
console.log(
|
59
|
-
'You must have XCode installed before continuing... Visit https://apps.apple.com/us/app/xcode/id497799835?mt=12 to download.',
|
60
|
-
);
|
61
|
-
throw new Error('XCode not installed');
|
62
|
-
}
|
63
|
-
}
|
64
|
-
|
65
|
-
await $`eas build:run --platform ${platform} --path ${output.launchFile}`;
|
66
|
-
|
67
30
|
const extraArgs = [];
|
68
31
|
|
69
32
|
if (props.options.clear) {
|
70
33
|
extraArgs.push('--clear');
|
71
34
|
}
|
72
|
-
|
73
35
|
const extrArgsString = extraArgs.join(' ');
|
74
36
|
|
75
|
-
|
37
|
+
try {
|
38
|
+
/**
|
39
|
+
* Get list of devices.
|
40
|
+
* If there is a booted device, open the simulator on that device.
|
41
|
+
* If no booted device is found, open the simulator on iPhone 15 Pro Max.
|
42
|
+
* * https://github.com/expo/orbit/blob/main/packages/eas-shared/src/run/ios/simulator.ts#L98
|
43
|
+
*
|
44
|
+
* TODO:
|
45
|
+
* Should we open app on all booted devices if there are multiple open?
|
46
|
+
* Should we prompt user to pick from one of the booted devices?
|
47
|
+
* Should we prompt user to pick a device if there are no booted devices?
|
48
|
+
*/
|
49
|
+
if (platform === 'ios') {
|
50
|
+
const deviceList =
|
51
|
+
(await $`xcrun simctl list devices available --json -e`.json()) as SimList;
|
52
|
+
const devices = Object.values(deviceList?.devices).flatMap((item) => item);
|
53
|
+
const bootedDevice = devices.find((device: SimDevice) => device.state === 'Booted');
|
54
|
+
if (!bootedDevice) {
|
55
|
+
const iphone15ProMax = devices.find((device) => device.name === 'iPhone 15 Pro Max');
|
56
|
+
const iphone15Udid = iphone15ProMax?.udid;
|
57
|
+
await $`open -a Simulator --args -CurrentDeviceUDID ${iphone15Udid}`;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
/**
|
62
|
+
* In dev mode we use a debug build, which requires a metro server to serve
|
63
|
+
* the Javascript bundle.
|
64
|
+
*
|
65
|
+
* To avoid the, "Could not find metro server" error screen on launch,
|
66
|
+
* we delay the launch of the app until after the metro server has started.
|
67
|
+
*/
|
68
|
+
sleep(3000).then(async () => {
|
69
|
+
/**
|
70
|
+
* Launch the app on the booted device
|
71
|
+
* https://github.com/expo/eas-cli?tab=readme-ov-file#eas-buildrun
|
72
|
+
*/
|
73
|
+
await $`eas build:run --platform ${platform} --path ${output.launchFile}`;
|
74
|
+
});
|
76
75
|
|
77
|
-
|
76
|
+
console.write('Starting Metro server...');
|
77
|
+
await $`expo start --${platform} --dev-client --localhost --scheme ${scheme} ${extrArgsString}`;
|
78
|
+
} catch (err) {
|
79
|
+
throw err;
|
80
|
+
}
|
78
81
|
},
|
79
82
|
};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Cocoapods < Formula
|
2
|
+
desc "Dependency manager for Cocoa projects"
|
3
|
+
homepage "https://cocoapods.org/"
|
4
|
+
url "https://github.com/CocoaPods/CocoaPods/archive/refs/tags/1.14.3.tar.gz"
|
5
|
+
sha256 "de05766e5771e0cef7af89f73b0e42a1f1c52a76ce1288592cd9511bcd688a9e"
|
6
|
+
license "MIT"
|
7
|
+
revision 1
|
8
|
+
|
9
|
+
bottle do
|
10
|
+
sha256 cellar: :any, arm64_sonoma: "0fb8e638fb4901b6c578c44ae1af0098a0b3530e7a339bf43f2fb67f2819d412"
|
11
|
+
sha256 cellar: :any, arm64_ventura: "e3d0c8624df429cb30c5cf818f3a358d4f678b374410e9fbc8fde090889f9b61"
|
12
|
+
sha256 cellar: :any, arm64_monterey: "a6df519bae3f51b1609cfcd017b4d47cb688200780ffb9b27d57a5dc05ea93de"
|
13
|
+
sha256 cellar: :any, sonoma: "5c2ee41824fcb154b46f9fa967f203fbf9009d2051f8c898375d69d333052988"
|
14
|
+
sha256 cellar: :any, ventura: "91459cb108161201a81fdd0e96a126e9843be8213112c208051e8e72ce9736f9"
|
15
|
+
sha256 cellar: :any, monterey: "316b0954e21f76c013d8c581c589e4f884231687eb2253a9f9a38a77a87728a6"
|
16
|
+
sha256 cellar: :any_skip_relocation, x86_64_linux: "2d5be1290e8161d9a49b3fd191fc8423aac29f61fbc84148c8ba08cdc03d8d84"
|
17
|
+
end
|
18
|
+
|
19
|
+
depends_on "pkg-config" => :build
|
20
|
+
depends_on "ruby"
|
21
|
+
uses_from_macos "libffi", since: :catalina
|
22
|
+
|
23
|
+
def install
|
24
|
+
ENV["GEM_HOME"] = libexec
|
25
|
+
system "gem", "build", "cocoapods.gemspec"
|
26
|
+
system "gem", "install", "cocoapods-#{version}.gem"
|
27
|
+
# Other executables don't work currently.
|
28
|
+
bin.install libexec/"bin/pod", libexec/"bin/xcodeproj"
|
29
|
+
bin.env_script_all_files(libexec/"bin", GEM_HOME: ENV["GEM_HOME"])
|
30
|
+
end
|
31
|
+
|
32
|
+
test do
|
33
|
+
system "#{bin}/pod", "list"
|
34
|
+
end
|
35
|
+
end
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@yahoo/uds",
|
3
3
|
"description": "Yahoo Universal System",
|
4
|
-
"version": "0.1.
|
4
|
+
"version": "0.1.14",
|
5
5
|
"type": "module",
|
6
6
|
"bin": {
|
7
7
|
"uds": "./cli/uds-cli"
|
@@ -88,10 +88,10 @@
|
|
88
88
|
"build": "bun run build:fontcss && bun run build:fixtures && tsup",
|
89
89
|
"build:css": "tailwindcss --input ./src/tailwind/uds.css --output ./generated/uds.css --config ./src/tailwind/tailwind.config.ts",
|
90
90
|
"build:fixtures": "bun run ./scripts/buildFixtures.ts",
|
91
|
-
"build:fontcss": "
|
91
|
+
"build:fontcss": "bun run ./scripts/generateFontCSS.ts --output ./generated/fonts.css",
|
92
92
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
93
93
|
"dev": "concurrently bun:dev:*",
|
94
|
-
"dev:fontcss": "
|
94
|
+
"dev:fontcss": "bun run --watch --clear-screen=false ./scripts/generateFontCSS.ts --output ./generated/fonts.css",
|
95
95
|
"dev:ts": "tsup --watch",
|
96
96
|
"lint": "ESLINT_USE_FLAT_CONFIG=true eslint -c eslint.config.mjs .",
|
97
97
|
"lint:pkg": "bun publint",
|
@@ -113,18 +113,9 @@
|
|
113
113
|
"tailwind-merge": "^2.2.1"
|
114
114
|
},
|
115
115
|
"devDependencies": {
|
116
|
-
"@gorhom/bottom-sheet": "^4.6.0",
|
117
|
-
"@react-navigation/native": "^6.0.2",
|
118
116
|
"@types/react": "^18.2.48",
|
119
117
|
"@types/react-dom": "^18.2.18",
|
120
118
|
"concurrently": "^8.2.2",
|
121
|
-
"expo-constants": "^15.4.5",
|
122
|
-
"expo-image": "^1.10.4",
|
123
|
-
"expo-status-bar": "^1.11.1",
|
124
|
-
"react": "^18.2.0",
|
125
|
-
"react-dom": "^18.2.0",
|
126
|
-
"react-native": "^0.73.2",
|
127
|
-
"react-native-safe-area-context": "^4.8.2",
|
128
119
|
"shared": "workspace:*",
|
129
120
|
"tsconfig": "workspace:*",
|
130
121
|
"tsup": "^8.0.1",
|
@@ -143,9 +134,6 @@
|
|
143
134
|
"tailwindcss": "^3.4.1"
|
144
135
|
},
|
145
136
|
"peerDependenciesMeta": {
|
146
|
-
"@expo/eas-json": {
|
147
|
-
"optional": true
|
148
|
-
},
|
149
137
|
"@gorhom/bottom-sheet": {
|
150
138
|
"optional": true
|
151
139
|
},
|