create-expo-stack 2.10.4 → 2.10.5-next.08640a3
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/README.md +50 -50
- package/build/cli.js +21 -51
- package/build/commands/create-expo-stack.js +320 -364
- package/build/templates/base/components/Button.tsx.ejs +2 -3
- package/build/templates/packages/nativewind/components/Button.tsx.ejs +4 -5
- package/build/templates/packages/nativewindui/components/Button.tsx.ejs +2 -3
- package/build/templates/packages/restyle/components/Button.tsx.ejs +7 -3
- package/build/templates/packages/tamagui/components/Button.tsx.ejs +11 -5
- package/build/templates/packages/tamagui/tamagui.config.ts.ejs +24 -25
- package/build/templates/packages/unistyles/components/Button.tsx.ejs +8 -3
- package/build/types/utilities/configAnalytics.d.ts +17 -0
- package/build/utilities/bumpVersion.js +6 -6
- package/build/utilities/clearNavigationPackages.js +2 -2
- package/build/utilities/clearStylingPackages.js +2 -2
- package/build/utilities/configAnalytics.js +70 -0
- package/build/utilities/configStorage.js +31 -88
- package/build/utilities/configureProjectFiles.js +98 -83
- package/build/utilities/copyBaseAssets.js +4 -36
- package/build/utilities/generateProjectFiles.js +16 -16
- package/build/utilities/getPackageManager.js +7 -7
- package/build/utilities/printOutput.js +156 -211
- package/build/utilities/renderTitle.js +22 -62
- package/build/utilities/runCLI.js +334 -393
- package/build/utilities/runEasConfigure.js +61 -106
- package/build/utilities/runIgnite.js +9 -45
- package/build/utilities/systemCommand.js +11 -48
- package/build/utilities/usePackage.js +2 -2
- package/build/utilities/validateProjectName.js +27 -64
- package/package.json +70 -69
|
@@ -2,13 +2,12 @@ import { forwardRef } from 'react';
|
|
|
2
2
|
import { StyleSheet, Text, TouchableOpacity, TouchableOpacityProps } from 'react-native';
|
|
3
3
|
|
|
4
4
|
type ButtonProps = {
|
|
5
|
-
onPress?: TouchableOpacityProps['onPress'];
|
|
6
5
|
title?: string;
|
|
7
6
|
} & TouchableOpacityProps;
|
|
8
7
|
|
|
9
|
-
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({
|
|
8
|
+
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({ title, ...touchableProps }, ref) => {
|
|
10
9
|
return (
|
|
11
|
-
<TouchableOpacity ref={ref} style={styles.button
|
|
10
|
+
<TouchableOpacity ref={ref} {...touchableProps} style={[styles.button, touchableProps.style]}>
|
|
12
11
|
<Text style={styles.buttonText}>{title}</Text>
|
|
13
12
|
</TouchableOpacity>
|
|
14
13
|
);
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { forwardRef } from 'react';
|
|
2
2
|
import { Text, TouchableOpacity, TouchableOpacityProps } from 'react-native';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
onPress?: () => void;
|
|
4
|
+
type ButtonProps = {
|
|
6
5
|
title: string;
|
|
7
|
-
}
|
|
6
|
+
} & TouchableOpacityProps;
|
|
8
7
|
|
|
9
|
-
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({
|
|
8
|
+
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({ title, ...touchableProps }, ref) => {
|
|
10
9
|
return (
|
|
11
|
-
<TouchableOpacity ref={ref} className={styles.button}
|
|
10
|
+
<TouchableOpacity ref={ref} {...touchableProps} className={`${styles.button} ${touchableProps.className}`}>
|
|
12
11
|
<Text className={styles.buttonText}>{title}</Text>
|
|
13
12
|
</TouchableOpacity>
|
|
14
13
|
);
|
|
@@ -2,13 +2,12 @@ import { forwardRef } from 'react';
|
|
|
2
2
|
import { StyleSheet, Text, TouchableOpacity, TouchableOpacityProps } from 'react-native';
|
|
3
3
|
|
|
4
4
|
type ButtonProps = {
|
|
5
|
-
onPress?: TouchableOpacityProps['onPress'];
|
|
6
5
|
title?: string;
|
|
7
6
|
} & TouchableOpacityProps;
|
|
8
7
|
|
|
9
|
-
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({
|
|
8
|
+
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({ title, ...touchableProps }, ref) => {
|
|
10
9
|
return (
|
|
11
|
-
<TouchableOpacity ref={ref} style={styles.button
|
|
10
|
+
<TouchableOpacity ref={ref} {...touchableProps} style={[styles.button, touchableProps.style]}>
|
|
12
11
|
<Text style={styles.buttonText}>{title}</Text>
|
|
13
12
|
</TouchableOpacity>
|
|
14
13
|
);
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { forwardRef } from 'react';
|
|
2
|
-
import { TouchableOpacity } from 'react-native';
|
|
2
|
+
import { TouchableOpacity, TouchableOpacityProps } from 'react-native';
|
|
3
3
|
import { Text, makeStyles } from 'theme';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type ButtonProps = {
|
|
6
|
+
title?: string;
|
|
7
|
+
} & TouchableOpacityProps;
|
|
8
|
+
|
|
9
|
+
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({ title, ...touchableProps }, ref) => {
|
|
6
10
|
const styles = useStyles();
|
|
7
11
|
|
|
8
12
|
return (
|
|
9
|
-
<TouchableOpacity style={styles.button
|
|
13
|
+
<TouchableOpacity ref={ref} {...touchableProps} style={[styles.button, touchableProps.style]}>
|
|
10
14
|
<Text variant="body" textAlign="center" color="white" fontWeight="600">
|
|
11
15
|
{title}
|
|
12
16
|
</Text>
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { forwardRef } from 'react';
|
|
2
|
-
import {
|
|
1
|
+
import { ComponentProps, forwardRef } from 'react';
|
|
2
|
+
import { TamaguiElement } from 'tamagui';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
import { Button as TButton } from '../tamagui.config';
|
|
5
|
+
|
|
6
|
+
type ButtonProps = {
|
|
7
|
+
title: string;
|
|
8
|
+
} & ComponentProps<typeof TButton>;
|
|
9
|
+
|
|
10
|
+
export const Button = forwardRef<TamaguiElement, ButtonProps>(({ title, ...tButtonProps }, ref) => {
|
|
5
11
|
return (
|
|
6
|
-
<TButton
|
|
7
|
-
|
|
12
|
+
<TButton {...tButtonProps} ref={ref}>
|
|
13
|
+
{title}
|
|
8
14
|
</TButton>
|
|
9
15
|
);
|
|
10
16
|
});
|
|
@@ -4,7 +4,7 @@ import { createMedia } from "@tamagui/react-native-media-driver";
|
|
|
4
4
|
import { shorthands } from "@tamagui/shorthands";
|
|
5
5
|
import { themes, tokens } from "@tamagui/themes";
|
|
6
6
|
<% if (props.navigationPackage?.type === "navigation") { %>
|
|
7
|
-
import { createTamagui, styled, SizableText, H1, YStack } from "tamagui";
|
|
7
|
+
import { createTamagui, styled, SizableText, H1, YStack, Button as ButtonTamagui } from "tamagui";
|
|
8
8
|
<% } else { %>
|
|
9
9
|
import { createTamagui } from "tamagui";
|
|
10
10
|
<% } %>
|
|
@@ -54,33 +54,32 @@ const bodyFont = createInterFont();
|
|
|
54
54
|
color: '#38434D',
|
|
55
55
|
size: '$9',
|
|
56
56
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
backgroundColor: '#6366F1',
|
|
62
|
-
borderRadius: 28,
|
|
57
|
+
|
|
58
|
+
export const Button = styled(ButtonTamagui, {
|
|
59
|
+
backgroundColor: '#6366F1',
|
|
60
|
+
borderRadius: 28,
|
|
63
61
|
hoverStyle: {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
backgroundColor: '#5a5fcf',
|
|
63
|
+
},
|
|
64
|
+
pressStyle: {
|
|
65
|
+
backgroundColor: '#5a5fcf',
|
|
66
|
+
},
|
|
67
67
|
maxWidth: 500,
|
|
68
|
-
padding: 16,
|
|
69
|
-
shadowColor: '#000',
|
|
70
|
-
shadowOffset: {
|
|
71
|
-
height: 2,
|
|
72
|
-
width: 0,
|
|
73
|
-
},
|
|
74
|
-
shadowOpacity: 0.25,
|
|
75
|
-
shadowRadius: 3.84,
|
|
76
|
-
});
|
|
77
68
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
// Shaddows
|
|
70
|
+
shadowColor: '#000',
|
|
71
|
+
shadowOffset: {
|
|
72
|
+
height: 2,
|
|
73
|
+
width: 0,
|
|
74
|
+
},
|
|
75
|
+
shadowOpacity: 0.25,
|
|
76
|
+
shadowRadius: 3.84,
|
|
77
|
+
|
|
78
|
+
// Button text
|
|
79
|
+
color: '#FFFFFF',
|
|
80
|
+
fontWeight: '600', // Is not passed down to the text. Probably a bug in Tamagui: https://github.com/tamagui/tamagui/issues/1156#issuecomment-1802594930
|
|
81
|
+
fontSize: 16,
|
|
82
|
+
});
|
|
84
83
|
<% } %>
|
|
85
84
|
|
|
86
85
|
const config = createTamagui({
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { forwardRef } from 'react';
|
|
2
|
-
import { Text, TouchableOpacity } from 'react-native';
|
|
2
|
+
import { Text, TouchableOpacity, TouchableOpacityProps } from 'react-native';
|
|
3
3
|
import { useStyles } from 'react-native-unistyles';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
type ButtonProps = {
|
|
6
|
+
title?: string;
|
|
7
|
+
} & TouchableOpacityProps;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({ title, ...touchableProps }, ref) => {
|
|
6
11
|
const { theme } = useStyles();
|
|
7
12
|
|
|
8
13
|
return (
|
|
9
|
-
<TouchableOpacity style={theme.components.button
|
|
14
|
+
<TouchableOpacity ref={ref} {...touchableProps} style={[theme.components.button, touchableProps.style]}>
|
|
10
15
|
<Text style={theme.components.buttonText}>{title}</Text>
|
|
11
16
|
</TouchableOpacity>
|
|
12
17
|
);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AuthenticationSelect, CliFlags, Internalization, NavigationSelect, NavigationTypes, PackageManager, SelectedComponents, StylingSelect } from '../types';
|
|
2
|
+
export declare function storeConfigAnalytics({ timestamp, cesVersion, authType, internalization, nativeWindUIComponents, navigationLibrary, navigationType, packageManager, packageManagerVersion, stylingLibrary, eas, importAlias, noGit, noInstall, overwrite, os, osPlatform, osArch, osRelease }: {
|
|
3
|
+
timestamp: string;
|
|
4
|
+
cesVersion: string;
|
|
5
|
+
authType?: AuthenticationSelect;
|
|
6
|
+
navigationLibrary?: NavigationSelect;
|
|
7
|
+
navigationType?: NavigationTypes;
|
|
8
|
+
stylingLibrary?: StylingSelect;
|
|
9
|
+
packageManager: PackageManager;
|
|
10
|
+
packageManagerVersion: string;
|
|
11
|
+
internalization?: Internalization;
|
|
12
|
+
nativeWindUIComponents?: SelectedComponents[];
|
|
13
|
+
os: string;
|
|
14
|
+
osPlatform: string;
|
|
15
|
+
osArch: string;
|
|
16
|
+
osRelease: string;
|
|
17
|
+
} & Partial<CliFlags>): Promise<void>;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
3
|
+
const child_process_1 = require("child_process");
|
|
4
4
|
function bumpVersion(type) {
|
|
5
5
|
if (['major', 'minor', 'patch'].includes(type)) {
|
|
6
6
|
try {
|
|
7
|
-
(0, child_process_1.execSync)(
|
|
8
|
-
console.log(
|
|
7
|
+
(0, child_process_1.execSync)(`npm version ${type}`, { stdio: 'inherit' });
|
|
8
|
+
console.log(`${type.charAt(0).toUpperCase() + type.slice(1)} version bumped successfully.`);
|
|
9
9
|
}
|
|
10
10
|
catch (error) {
|
|
11
|
-
console.error(
|
|
11
|
+
console.error(`Error bumping the ${type} version:`, error);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
else {
|
|
@@ -16,6 +16,6 @@ function bumpVersion(type) {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
// Get the argument from the command line
|
|
19
|
-
|
|
19
|
+
const versionType = process.argv[2];
|
|
20
20
|
bumpVersion(versionType);
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVtcFZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL2J1bXBWZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaURBQXlDO0FBRXpDLFNBQVMsV0FBVyxDQUFDLElBQVk7SUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsSUFBQSx3QkFBUSxFQUFDLGVBQWUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7QUFDSCxDQUFDO0FBRUQseUNBQXlDO0FBQ3pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDIn0=
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
function clearNavigationPackages(cliResults) {
|
|
4
|
-
|
|
4
|
+
const stylingPackageIndex = cliResults.packages.findIndex((p) => p.type === 'navigation');
|
|
5
5
|
if (stylingPackageIndex !== -1) {
|
|
6
6
|
cliResults.packages.splice(stylingPackageIndex, 1);
|
|
7
7
|
}
|
|
8
8
|
return cliResults;
|
|
9
9
|
}
|
|
10
10
|
exports.default = clearNavigationPackages;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXJOYXZpZ2F0aW9uUGFja2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL2NsZWFyTmF2aWdhdGlvblBhY2thZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsU0FBd0IsdUJBQXVCLENBQUMsVUFBc0I7SUFDcEUsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztJQUMxRixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFORCwwQ0FNQyJ9
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
function clearStylingPackages(cliResults) {
|
|
4
|
-
|
|
4
|
+
const stylingPackageIndex = cliResults.packages.findIndex((p) => p.type === 'styling');
|
|
5
5
|
if (stylingPackageIndex !== -1) {
|
|
6
6
|
cliResults.packages.splice(stylingPackageIndex, 1);
|
|
7
7
|
}
|
|
8
8
|
return cliResults;
|
|
9
9
|
}
|
|
10
10
|
exports.default = clearStylingPackages;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXJTdHlsaW5nUGFja2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbGl0aWVzL2NsZWFyU3R5bGluZ1BhY2thZ2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsU0FBd0Isb0JBQW9CLENBQUMsVUFBc0I7SUFDakUsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN2RixJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFORCx1Q0FNQyJ9
|
|
@@ -0,0 +1,70 @@
|
|
|
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.storeConfigAnalytics = void 0;
|
|
13
|
+
const google_auth_library_1 = require("google-auth-library");
|
|
14
|
+
const googleapis_1 = require("googleapis");
|
|
15
|
+
const key_data = 'eyJ0eXBlIjoic2VydmljZV9hY2NvdW50IiwicHJvamVjdF9pZCI6ImNyZWF0ZS1leHBvLXN0YWNrLWFuYWx5dGljcyIsInByaXZhdGVfa2V5X2lkIjoiNTdmZTc1OThmYTRkM2NkNWNhN2E0MmU4OGM1ZWYwMzdjODljNDI3NiIsInByaXZhdGVfa2V5IjoiLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXG5NSUlFdkFJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0JLWXdnZ1NpQWdFQUFvSUJBUURndnl6TTV3cFMrUnJRXG5hRmJBZmhwRU15dnhQK1IxV1p6Ykx1Nm1QblpsOVNvZmVHK0hHejdHWWNoZ29ScU9iaEk0MERpL1ZmblA0MVpEXG5kQVZTYXhMSlZSdm9ESHlEUkxRQzcrRE5TWWFEWlRSMXpIdGl6Z2M4UUhxbjV0Qmt0YXdWdWc5ZkhBUFk0MmtBXG4xcjlhdmttakNoM2sxSTNxdFhlbVlUQWt5Z09FZXVLbzJzbmptajcyNUZLRDBRREJKSlVhYnVyd3RrR1doV3pKXG5LaEd6YlNlb0JIeGJMemNlUDlGang1RFlTdW5oS2E1blFXdGRzS2dwdlgzSGthZEU2V0NYQjg1ZHd4MytHVGRVXG5ybnFUSTRRVWpWRHV3SnFaOEpWUEZjYUF2L0dlbHdUT1VGNGNROFQ4VWVadGtHUzN2L1hlRmROL1BTZGZYM0tZXG5CNVEwdXNtREFnTUJBQUVDZ2dFQU9KK0J5b2dGSGwxN1ozbDZMZG8zaE9vOWpuVVIrb3pleTR3Wi9WRnNaQWl1XG5HYXF1c3FQbkgzVWdWbFFRakVUb0cxOCtoTnBFNjU3enExL3VQVk1Uc3h6WndJOXd5V1BFVko4YURLNlRFTVN0XG5RR2FKeVoxdHpqelNpajNKVUM1RFVtQURvbXM4L3VaZ25LRCtLZjhhTDFVTHJnenRTbTU0M0RiTk9kK1pua1VjXG5zeDYzVXVQNmdVY0tiVDRhTVl3Wk5mL3BzUW9SMkdwaXdSQjhQd3hzS0x1Uk5qcC8rTHZuYXV4dkRvY1hvbHFRXG41UHFFYi9pOFlKMlJ3alI2THBUc3FIdWtIZ056ZytOci9JQnpUWDR5Y0V2OWh6bWw4VzVGOGRDd1IzQkYyV05XXG52VmFYZVRNY1ZFcWcxWS9TMDd0UUMrTlFuWHlFY0pSOGRVcW8zQU1qTVFLQmdRRDFkbE54TXlXYnRVSDZPaWx2XG4rbXF2OWdkSVZ1eVJWeEtydG9PcVlqd2gzWEVYZW9seU9Selhac0hvNlQ5b0NpZnRpenBQOXFmYkNWYVAzdk1BXG43OWl3cE4vUE1QY1NoeWtnR2RyR1ArRUY3ODV0amtLQ2dmSE9PbUxUbEp5Z3psdTFuUU1vcTcwOGdoeXd6MEtmXG5tekc4OVlHQ1RmaTMvSmQ5MWN3WU5IRHhrd0tCZ1FEcVpTN0ZYNEt2cjlpWll0Vko4VDRHNE0zUVJ2dWJRMUFoXG5Yd0ZVN2JDUzJ1M294cktlZnJPTFlCTHJsbXQ0Qk1tL2NLMVNteHBndHZrdEQ3WFVtcVdrUGRnRUhGaUxjcHoxXG5XS0tTKytpRHE4SXplZzUxMFBkcVAwbVNlY1R6cHk1V2hmMHJwTi9vVDY0YVJnVUVmaEZtZHdVYWZRcnlOY1B1XG5uMWlEa0loK1VRS0JnSEJWODhBbHdUdHVpOEJoNTk3b2d2VCtxcnlQazNxOGw3M2dMSWZJcDI1ME1yS2xFTXdtXG5tUzEzU0owNFNoMXFNSFhGTnkyclc0eWh6R3pSZ3ZMVjBaeWVDQk9CZkVHTmUrUEdFVnFUbDM4cERaY1QrUnBUXG5MLy9LdHJuUUZKSi9mbmN5WVdTMm5FZFo0Sm1HY1I0c1gybjBEWTQ5OHVyNC9iZklKYnlhRzJwakFvR0FkRG9DXG5EQ3JGRWJyZmE0ZWZmWS9iRXV3TUFqZ0FjVWZhaHdHbUZtZmFRNmU5aXN4a0s4Vmw0RG1laUNWSld2VDgyU25WXG5OLzNqQVl3WldLZk9vUUtpR2lQMFptMXIxcEhabEtzRHltQ1JOaUZJSmVCakpUYWVTSmZqTW5laEdyU09mS2JxXG5GK2NrZy94bXQyNTY5SFJTeW4xQUVaZHBneHIzOGU0ZnBQVlpTVkVDZ1lBWkw2K0pTdXoxY3BsaXloQ3lJU2NXXG5RWEFTMTNiRXMvbHd6MjhZT3ltN2JnMzVzZjdhOFBPMjBocGNPWnVERERySlpjME9LbG9tNXQzSHYxUDIreWNOXG5NczFQbnBqRjFEYlZ6ZFBDcm8xTkxKdTk4eEVYNWJXSXRDUkF1Q1hKUS90MWVKL3d6TThjbGhLYnRYVGdQTHl4XG5mSnViMERTWFpqUmtYUFNDcU0yb0t3PT1cbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1cbiIsImNsaWVudF9lbWFpbCI6ImNlcy1hbmFseXRpY3NAY3JlYXRlLWV4cG8tc3RhY2stYW5hbHl0aWNzLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwiY2xpZW50X2lkIjoiMTEyMjg4MzM5NDYxNTA5NDM0MTcwIiwiYXV0aF91cmkiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvYXV0aCIsInRva2VuX3VyaSI6Imh0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuIiwiYXV0aF9wcm92aWRlcl94NTA5X2NlcnRfdXJsIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vb2F1dGgyL3YxL2NlcnRzIiwiY2xpZW50X3g1MDlfY2VydF91cmwiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9yb2JvdC92MS9tZXRhZGF0YS94NTA5L2Nlcy1hbmFseXRpY3MlNDBjcmVhdGUtZXhwby1zdGFjay1hbmFseXRpY3MuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJ1bml2ZXJzZV9kb21haW4iOiJnb29nbGVhcGlzLmNvbSJ9';
|
|
16
|
+
const keys = Buffer.from(key_data, 'base64').toString('utf-8');
|
|
17
|
+
function storeConfigAnalytics(_a) {
|
|
18
|
+
return __awaiter(this, arguments, void 0, function* ({ timestamp, cesVersion, authType, internalization, nativeWindUIComponents = [], navigationLibrary, navigationType, packageManager, packageManagerVersion, stylingLibrary, eas, importAlias, noGit, noInstall, overwrite, os, osPlatform, osArch, osRelease }) {
|
|
19
|
+
var _b;
|
|
20
|
+
if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test') {
|
|
21
|
+
console.log('Skipping analytics in development or test environment');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const auth = new google_auth_library_1.GoogleAuth({
|
|
26
|
+
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
|
|
27
|
+
credentials: JSON.parse(keys)
|
|
28
|
+
});
|
|
29
|
+
const service = googleapis_1.google.sheets({ version: 'v4', auth });
|
|
30
|
+
const result = yield service.spreadsheets.values.append({
|
|
31
|
+
spreadsheetId: '1Nav_XXi8stJjaBBK8bX0CebRF5QKXU25BZc57I06yGQ',
|
|
32
|
+
range: 'Sheet1!A:A',
|
|
33
|
+
valueInputOption: 'RAW',
|
|
34
|
+
requestBody: {
|
|
35
|
+
values: [
|
|
36
|
+
[
|
|
37
|
+
timestamp !== null && timestamp !== void 0 ? timestamp : '',
|
|
38
|
+
cesVersion !== null && cesVersion !== void 0 ? cesVersion : '',
|
|
39
|
+
navigationLibrary !== null && navigationLibrary !== void 0 ? navigationLibrary : '',
|
|
40
|
+
navigationType !== null && navigationType !== void 0 ? navigationType : '',
|
|
41
|
+
stylingLibrary !== null && stylingLibrary !== void 0 ? stylingLibrary : '',
|
|
42
|
+
packageManager,
|
|
43
|
+
packageManagerVersion !== null && packageManagerVersion !== void 0 ? packageManagerVersion : '',
|
|
44
|
+
internalization !== null && internalization !== void 0 ? internalization : '',
|
|
45
|
+
(_b = nativeWindUIComponents === null || nativeWindUIComponents === void 0 ? void 0 : nativeWindUIComponents.join(',')) !== null && _b !== void 0 ? _b : '',
|
|
46
|
+
authType !== null && authType !== void 0 ? authType : '',
|
|
47
|
+
eas ? 'true' : 'false',
|
|
48
|
+
importAlias ? 'true' : 'false',
|
|
49
|
+
noGit ? 'false' : 'true', // reverse logic because column is "git"
|
|
50
|
+
noInstall ? 'false' : 'true', // reverse logic because column is "install"
|
|
51
|
+
overwrite ? 'true' : 'false',
|
|
52
|
+
os !== null && os !== void 0 ? os : '',
|
|
53
|
+
osPlatform !== null && osPlatform !== void 0 ? osPlatform : '',
|
|
54
|
+
osArch !== null && osArch !== void 0 ? osArch : '',
|
|
55
|
+
osRelease !== null && osRelease !== void 0 ? osRelease : ''
|
|
56
|
+
]
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
insertDataOption: 'INSERT_ROWS'
|
|
60
|
+
});
|
|
61
|
+
console.log(`${result.data.updates.updatedCells} cells appended.`);
|
|
62
|
+
// return result;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.warn('analytics API returned an error: ' + err);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
exports.storeConfigAnalytics = storeConfigAnalytics;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnQW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9jb25maWdBbmFseXRpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkRBQWlEO0FBQ2pELDJDQUFvQztBQVlwQyxNQUFNLFFBQVEsR0FDWixza0dBQXNrRyxDQUFDO0FBRXprRyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFL0QsU0FBc0Isb0JBQW9CO3lEQUFDLEVBQ3pDLFNBQVMsRUFDVCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGVBQWUsRUFDZixzQkFBc0IsR0FBRyxFQUFFLEVBQzNCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsR0FBRyxFQUNILFdBQVcsRUFDWCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxFQUFFLEVBQ0YsVUFBVSxFQUNWLE1BQU0sRUFDTixTQUFTLEVBZ0JVOztRQUNuQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM5RSxPQUFPLENBQUMsR0FBRyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDckUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLGdDQUFVLENBQUM7Z0JBQzFCLE1BQU0sRUFBRSxDQUFDLDhDQUE4QyxDQUFDO2dCQUN4RCxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxPQUFPLEdBQUcsbUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3RELGFBQWEsRUFBRSw4Q0FBOEM7Z0JBQzdELEtBQUssRUFBRSxZQUFZO2dCQUNuQixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QixXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFO3dCQUNOOzRCQUNFLFNBQVMsYUFBVCxTQUFTLGNBQVQsU0FBUyxHQUFJLEVBQUU7NEJBQ2YsVUFBVSxhQUFWLFVBQVUsY0FBVixVQUFVLEdBQUksRUFBRTs0QkFDaEIsaUJBQWlCLGFBQWpCLGlCQUFpQixjQUFqQixpQkFBaUIsR0FBSSxFQUFFOzRCQUN2QixjQUFjLGFBQWQsY0FBYyxjQUFkLGNBQWMsR0FBSSxFQUFFOzRCQUNwQixjQUFjLGFBQWQsY0FBYyxjQUFkLGNBQWMsR0FBSSxFQUFFOzRCQUNwQixjQUFjOzRCQUNkLHFCQUFxQixhQUFyQixxQkFBcUIsY0FBckIscUJBQXFCLEdBQUksRUFBRTs0QkFDM0IsZUFBZSxhQUFmLGVBQWUsY0FBZixlQUFlLEdBQUksRUFBRTs0QkFDckIsTUFBQSxzQkFBc0IsYUFBdEIsc0JBQXNCLHVCQUF0QixzQkFBc0IsQ0FBRSxJQUFJLENBQUMsR0FBRyxDQUFDLG1DQUFJLEVBQUU7NEJBQ3ZDLFFBQVEsYUFBUixRQUFRLGNBQVIsUUFBUSxHQUFJLEVBQUU7NEJBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87NEJBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPOzRCQUM5QixLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLHdDQUF3Qzs0QkFDbEUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSw0Q0FBNEM7NEJBQzFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPOzRCQUM1QixFQUFFLGFBQUYsRUFBRSxjQUFGLEVBQUUsR0FBSSxFQUFFOzRCQUNSLFVBQVUsYUFBVixVQUFVLGNBQVYsVUFBVSxHQUFJLEVBQUU7NEJBQ2hCLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEVBQUU7NEJBQ1osU0FBUyxhQUFULFNBQVMsY0FBVCxTQUFTLEdBQUksRUFBRTt5QkFDaEI7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsZ0JBQWdCLEVBQUUsYUFBYTthQUNoQyxDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO1lBRW5FLGlCQUFpQjtRQUNuQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7Q0FBQTtBQXZGRCxvREF1RkMifQ==
|
|
@@ -8,100 +8,43 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
13
|
};
|
|
41
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
15
|
exports.loadConfigs = exports.saveConfig = void 0;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
case 1:
|
|
56
|
-
_a.sent();
|
|
57
|
-
return [3 /*break*/, 3];
|
|
58
|
-
case 2:
|
|
59
|
-
error_1 = _a.sent();
|
|
60
|
-
if (error_1.code !== 'EEXIST') {
|
|
61
|
-
throw error_1;
|
|
62
|
-
}
|
|
63
|
-
return [3 /*break*/, 3];
|
|
64
|
-
case 3: return [2 /*return*/];
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}); };
|
|
68
|
-
var saveConfig = function (config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
69
|
-
var configs;
|
|
70
|
-
return __generator(this, function (_a) {
|
|
71
|
-
switch (_a.label) {
|
|
72
|
-
case 0: return [4 /*yield*/, ensureConfigDirExists()];
|
|
73
|
-
case 1:
|
|
74
|
-
_a.sent();
|
|
75
|
-
return [4 /*yield*/, (0, exports.loadConfigs)()];
|
|
76
|
-
case 2:
|
|
77
|
-
configs = _a.sent();
|
|
78
|
-
return [4 /*yield*/, fs_1.promises.writeFile(CONFIG_FILE, JSON.stringify(configs, null, 2))];
|
|
79
|
-
case 3:
|
|
80
|
-
_a.sent();
|
|
81
|
-
return [2 /*return*/];
|
|
16
|
+
const fs_1 = require("fs");
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const os_1 = __importDefault(require("os"));
|
|
19
|
+
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.create-expo-stack');
|
|
20
|
+
const CONFIG_FILE = path_1.default.join(CONFIG_DIR, 'configurations.json');
|
|
21
|
+
const ensureConfigDirExists = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
try {
|
|
23
|
+
yield fs_1.promises.mkdir(CONFIG_DIR, { recursive: true });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code !== 'EEXIST') {
|
|
27
|
+
throw error;
|
|
82
28
|
}
|
|
83
|
-
}
|
|
84
|
-
});
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const saveConfig = (config) => __awaiter(void 0, void 0, void 0, function* () {
|
|
32
|
+
yield ensureConfigDirExists();
|
|
33
|
+
const configs = yield (0, exports.loadConfigs)();
|
|
34
|
+
yield fs_1.promises.writeFile(CONFIG_FILE, JSON.stringify(configs, null, 2));
|
|
35
|
+
});
|
|
85
36
|
exports.saveConfig = saveConfig;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
data = _a.sent();
|
|
95
|
-
return [2 /*return*/, JSON.parse(data)];
|
|
96
|
-
case 2:
|
|
97
|
-
error_2 = _a.sent();
|
|
98
|
-
if (error_2.code === 'ENOENT') {
|
|
99
|
-
return [2 /*return*/, []];
|
|
100
|
-
}
|
|
101
|
-
throw error_2;
|
|
102
|
-
case 3: return [2 /*return*/];
|
|
37
|
+
const loadConfigs = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
+
try {
|
|
39
|
+
const data = yield fs_1.promises.readFile(CONFIG_FILE, 'utf8');
|
|
40
|
+
return JSON.parse(data);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error.code === 'ENOENT') {
|
|
44
|
+
return [];
|
|
103
45
|
}
|
|
104
|
-
|
|
105
|
-
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
106
49
|
exports.loadConfigs = loadConfigs;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnU3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnU3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQkFBb0M7QUFDcEMsZ0RBQXdCO0FBRXhCLDRDQUFvQjtBQUVwQixNQUFNLFVBQVUsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFlBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sV0FBVyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFPakUsTUFBTSxxQkFBcUIsR0FBRyxHQUFTLEVBQUU7SUFDdkMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxhQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQztBQUVLLE1BQU0sVUFBVSxHQUFHLENBQU8sTUFBaUIsRUFBaUIsRUFBRTtJQUNuRSxNQUFNLHFCQUFxQixFQUFFLENBQUM7SUFDOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLG1CQUFXLEdBQUUsQ0FBQztJQUNwQyxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQSxDQUFDO0FBSlcsUUFBQSxVQUFVLGNBSXJCO0FBRUssTUFBTSxXQUFXLEdBQUcsR0FBK0IsRUFBRTtJQUMxRCxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLGFBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQztBQVZXLFFBQUEsV0FBVyxlQVV0QiJ9
|