@ronas-it/nx-generators 0.22.0 → 0.23.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/package.json +1 -1
- package/src/generators/code-checks/files/.eslint.ronasit.cjs.template +2 -0
- package/src/generators/expo-app/app-files/app/_layout.tsx.template +3 -0
- package/src/generators/expo-app/easignore.js +6 -0
- package/src/generators/expo-app/easignore.js.map +1 -1
- package/src/generators/expo-app/scripts.js +2 -2
- package/src/generators/expo-app/scripts.js.map +1 -1
- package/src/generators/sentry/utils/generate-sentry-expo.js +12 -5
- package/src/generators/sentry/utils/generate-sentry-expo.js.map +1 -1
- package/src/shared/dependencies.d.ts +3 -0
- package/src/shared/dependencies.js +6 -3
- package/src/shared/dependencies.js.map +1 -1
- package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/app-version/component.tsx.template +27 -0
- package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/app-version/index.ts.template +1 -0
- package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/header/component.tsx.template +35 -8
- package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/index.ts.template +2 -0
- package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/keyboard-avoiding-view/component.tsx.template +47 -0
- package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/keyboard-avoiding-view/index.ts.template +1 -0
- package/src/shared/tests-utils/common-mocks.d.ts +0 -14
- package/src/shared/tests-utils/common-mocks.js +0 -75
- package/src/shared/tests-utils/common-mocks.js.map +0 -1
- package/src/shared/tests-utils/index.d.ts +0 -2
- package/src/shared/tests-utils/index.js +0 -6
- package/src/shared/tests-utils/index.js.map +0 -1
- package/src/shared/tests-utils/utils.d.ts +0 -10
- package/src/shared/tests-utils/utils.js +0 -92
- package/src/shared/tests-utils/utils.js.map +0 -1
package/package.json
CHANGED
|
@@ -7,6 +7,7 @@ import * as SplashScreen from 'expo-splash-screen';
|
|
|
7
7
|
import { StatusBar } from 'expo-status-bar';
|
|
8
8
|
import { Fragment, ReactElement, useEffect } from 'react';
|
|
9
9
|
<% if(isStoreEnabled) { %>import { Provider } from 'react-redux';<% } %>
|
|
10
|
+
<% if(withUiKit) { %>import { KeyboardProvider } from 'react-native-keyboard-controller';<% } %>
|
|
10
11
|
|
|
11
12
|
export { ErrorBoundary } from 'expo-router';
|
|
12
13
|
|
|
@@ -54,7 +55,9 @@ export default function RootLayout(): ReactElement | null {
|
|
|
54
55
|
<Fragment>
|
|
55
56
|
<% if(isStoreEnabled) { %><Provider store={store}><% } %>
|
|
56
57
|
<StatusBar style='light' />
|
|
58
|
+
<% if(withUiKit) { %><KeyboardProvider><% } %>
|
|
57
59
|
<App />
|
|
60
|
+
<% if(withUiKit) { %></KeyboardProvider><% } %>
|
|
58
61
|
<% if(isStoreEnabled) { %></Provider><% } %>
|
|
59
62
|
</Fragment>
|
|
60
63
|
);
|
|
@@ -28,6 +28,10 @@ i18n/*
|
|
|
28
28
|
!patches
|
|
29
29
|
!patches/**
|
|
30
30
|
|
|
31
|
+
# Tools
|
|
32
|
+
!tools
|
|
33
|
+
!tools/**
|
|
34
|
+
|
|
31
35
|
# Root config files required for the build
|
|
32
36
|
!package.json
|
|
33
37
|
!package-lock.json
|
|
@@ -43,6 +47,8 @@ function getAppSpecificLines(directory) {
|
|
|
43
47
|
!apps/${directory}
|
|
44
48
|
!apps/${directory}/**
|
|
45
49
|
apps/${directory}/.expo
|
|
50
|
+
apps/${directory}/android
|
|
51
|
+
apps/${directory}/ios
|
|
46
52
|
|
|
47
53
|
# Libraries: ${directory}
|
|
48
54
|
!libs/${directory}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easignore.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/easignore.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"easignore.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/easignore.ts"],"names":[],"mappings":";;AA8DA,8CAgBC;AA5ED,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAsCT,CAAC;AAEb,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,OAAO;gBACO,SAAS;QACjB,SAAS;QACT,SAAS;OACV,SAAS;OACT,SAAS;OACT,SAAS;;eAED,SAAS;QAChB,SAAS;QACT,SAAS;;UAEP,SAAS;QACX,SAAS;QACT,SAAS,KAAK,CAAC;AACvB,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAU,EAAE,SAAiB;IAC7D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAAC,CAAC;QAE1E,OAAO;IACT,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAE,CAAC;IAE5D,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,SAAS,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -11,7 +11,7 @@ exports.default = {
|
|
|
11
11
|
'update:prod': 'cross-env EXPO_PUBLIC_APP_ENV=production eas update --branch production',
|
|
12
12
|
'submit:dev': 'cross-env EXPO_PUBLIC_APP_ENV=development eas submit --no-wait --profile=development',
|
|
13
13
|
'submit:prod': 'cross-env EXPO_PUBLIC_APP_ENV=production eas submit --no-wait --profile=production',
|
|
14
|
-
android: 'npx expo run:android',
|
|
15
|
-
ios: 'npx expo run:ios',
|
|
14
|
+
android: 'cross-env EXPO_PUBLIC_APP_ENV=development npx expo run:android',
|
|
15
|
+
ios: 'cross-env EXPO_PUBLIC_APP_ENV=development npx expo run:ios',
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=scripts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/scripts.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,KAAK,EAAE,0DAA0D;IACjE,YAAY,EAAE,yDAAyD;IACvE,WAAW,EAAE,kDAAkD;IAC/D,gBAAgB,EAAE,yCAAyC;IAC3D,aAAa,EAAE,sCAAsC;IACrD,YAAY,EAAE,2CAA2C;IACzD,YAAY,EAAE,2EAA2E;IACzF,aAAa,EAAE,yEAAyE;IACxF,YAAY,EAAE,sFAAsF;IACpG,aAAa,EAAE,oFAAoF;IACnG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"scripts.js","sourceRoot":"","sources":["../../../../../plugin/src/generators/expo-app/scripts.ts"],"names":[],"mappings":";;AAAA,kBAAe;IACb,KAAK,EAAE,0DAA0D;IACjE,YAAY,EAAE,yDAAyD;IACvE,WAAW,EAAE,kDAAkD;IAC/D,gBAAgB,EAAE,yCAAyC;IAC3D,aAAa,EAAE,sCAAsC;IACrD,YAAY,EAAE,2CAA2C;IACzD,YAAY,EAAE,2EAA2E;IACzF,aAAa,EAAE,yEAAyE;IACxF,YAAY,EAAE,sFAAsF;IACpG,aAAa,EAAE,oFAAoF;IACnG,OAAO,EAAE,gEAAgE;IACzE,GAAG,EAAE,4DAA4D;CAClE,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generateSentryExpo = generateSentryExpo;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
6
|
+
const ts_morph_1 = require("ts-morph");
|
|
6
7
|
const typescript_1 = require("typescript");
|
|
7
8
|
const dependencies_1 = require("../../../shared/dependencies");
|
|
8
9
|
const utils_1 = require("../../../shared/utils");
|
|
@@ -11,10 +12,16 @@ const addRequiredImportsExpo = (content) => tsquery_1.tsquery.replace(content, '
|
|
|
11
12
|
import * as Sentry from "@sentry/react-native";
|
|
12
13
|
import Constants from "expo-constants";
|
|
13
14
|
import { isRunningInExpoGo } from 'expo';`);
|
|
14
|
-
const removeExportsKeywordForRootLayout = (content) =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const removeExportsKeywordForRootLayout = (content) => {
|
|
16
|
+
const sourceFile = new ts_morph_1.Project({ useInMemoryFileSystem: true }).createSourceFile('file.tsx', content, {
|
|
17
|
+
scriptKind: ts_morph_1.ScriptKind.TSX,
|
|
18
|
+
});
|
|
19
|
+
const rootLayout = sourceFile.getFunctions().find((func) => func.getName() === 'RootLayout');
|
|
20
|
+
rootLayout === null || rootLayout === void 0 ? void 0 : rootLayout.setIsDefaultExport(false);
|
|
21
|
+
rootLayout === null || rootLayout === void 0 ? void 0 : rootLayout.setIsExported(false);
|
|
22
|
+
return sourceFile.getFullText();
|
|
23
|
+
};
|
|
24
|
+
const updateExtraConfig = (content, dsn) => (0, typescript_1.createPrinter)().printFile(tsquery_1.tsquery.map(tsquery_1.tsquery.ast(content), 'VariableDeclaration:has(Identifier[name="extra"]) > ObjectLiteralExpression', (node) => (0, create_object_literal_expression_1.createObjectLiteralExpression)([
|
|
18
25
|
{
|
|
19
26
|
key: 'sentry',
|
|
20
27
|
initializer: typescript_1.factory.createObjectLiteralExpression([
|
|
@@ -55,7 +62,7 @@ function generateSentryExpo(tree, options, projectRoot) {
|
|
|
55
62
|
|
|
56
63
|
Sentry.init({
|
|
57
64
|
dsn: Constants.expoConfig?.extra?.sentry?.dsn,
|
|
58
|
-
environment:
|
|
65
|
+
environment: process.env.EXPO_PUBLIC_APP_ENV,
|
|
59
66
|
debug: false,
|
|
60
67
|
integrations: [navigationIntegration],
|
|
61
68
|
enableNativeFramesTracking: !isRunningInExpoGo(), // Tracks slow and frozen frames in the application
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-sentry-expo.js","sourceRoot":"","sources":["../../../../../../plugin/src/generators/sentry/utils/generate-sentry-expo.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generate-sentry-expo.js","sourceRoot":"","sources":["../../../../../../plugin/src/generators/sentry/utils/generate-sentry-expo.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,10 +44,13 @@ export declare const dependencies: {
|
|
|
44
44
|
'react-native-nitro-modules': string;
|
|
45
45
|
};
|
|
46
46
|
'ui-kit': {
|
|
47
|
+
'expo-constants': string;
|
|
47
48
|
'react-native-reanimated': string;
|
|
48
49
|
'react-native-worklets': string;
|
|
49
50
|
'expo-image': string;
|
|
51
|
+
'expo-router': string;
|
|
50
52
|
'react-native-toast-message': string;
|
|
53
|
+
'react-native-keyboard-controller': string;
|
|
51
54
|
};
|
|
52
55
|
store: {
|
|
53
56
|
'@ronas-it/rtkq-entity-api': string;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.devDependencies = exports.dependencies = void 0;
|
|
4
4
|
exports.dependencies = {
|
|
5
5
|
'expo-app': {
|
|
6
|
-
'@ronas-it/react-native-common-modules': '~
|
|
6
|
+
'@ronas-it/react-native-common-modules': '~2.0.0',
|
|
7
7
|
'react-native-mmkv': '~3.3.3',
|
|
8
8
|
'expo-constants': '~18.0.9',
|
|
9
9
|
'expo-dev-client': '~6.0.15',
|
|
@@ -33,7 +33,7 @@ exports.dependencies = {
|
|
|
33
33
|
'react-dom': '~19.2.4',
|
|
34
34
|
},
|
|
35
35
|
'api-client': {
|
|
36
|
-
'@ronas-it/axios-api-client': '^0.
|
|
36
|
+
'@ronas-it/axios-api-client': '^0.2.0',
|
|
37
37
|
},
|
|
38
38
|
auth: {
|
|
39
39
|
luxon: '^3.7.2',
|
|
@@ -47,13 +47,16 @@ exports.dependencies = {
|
|
|
47
47
|
'react-native-nitro-modules': '~0.35.2',
|
|
48
48
|
},
|
|
49
49
|
'ui-kit': {
|
|
50
|
+
'expo-constants': '~18.0.13',
|
|
50
51
|
'react-native-reanimated': '~4.1.1',
|
|
51
52
|
'react-native-worklets': '0.5.1',
|
|
52
53
|
'expo-image': '~3.0.10',
|
|
54
|
+
'expo-router': '~6.0.12',
|
|
53
55
|
'react-native-toast-message': '^2.3.3',
|
|
56
|
+
'react-native-keyboard-controller': '^1.20.7',
|
|
54
57
|
},
|
|
55
58
|
store: {
|
|
56
|
-
'@ronas-it/rtkq-entity-api': '^
|
|
59
|
+
'@ronas-it/rtkq-entity-api': '^1.1.1',
|
|
57
60
|
'react-redux': '^9.2.0',
|
|
58
61
|
},
|
|
59
62
|
form: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../plugin/src/shared/dependencies.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG;IAC1B,UAAU,EAAE;QACV,uCAAuC,EAAE,QAAQ;QACjD,mBAAmB,EAAE,QAAQ;QAC7B,gBAAgB,EAAE,SAAS;QAC3B,iBAAiB,EAAE,SAAS;QAC5B,aAAa,EAAE,SAAS;QACxB,gCAAgC,EAAE,QAAQ;QAC1C,sBAAsB,EAAE,SAAS;QACjC,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,QAAQ;QAC3B,cAAc,EAAE,UAAU;QAC1B,eAAe,EAAE,SAAS;QAC1B,mBAAmB,EAAE,SAAS;QAC9B,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,UAAU;QACvB,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,SAAS;QACzB,kBAAkB,EAAE,UAAU;QAC9B,8BAA8B,EAAE,QAAQ;KACzC;IACD,UAAU,EAAE;QACV,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,UAAU;QACvB,mBAAmB,EAAE,QAAQ;QAC7B,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,WAAW,EAAE,SAAS;KACvB;IACD,YAAY,EAAE;QACZ,4BAA4B,EAAE,QAAQ;KACvC;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,QAAQ;KAChB;IACD,WAAW,EAAE;QACX,WAAW,EAAE,QAAQ;KACtB;IACD,WAAW,EAAE;QACX,wBAAwB,EAAE,QAAQ;QAClC,2BAA2B,EAAE,QAAQ;QACrC,4BAA4B,EAAE,SAAS;KACxC;IACD,QAAQ,EAAE;QACR,yBAAyB,EAAE,QAAQ;QACnC,uBAAuB,EAAE,OAAO;QAChC,YAAY,EAAE,SAAS;QACvB,4BAA4B,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../plugin/src/shared/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import Constants from 'expo-constants';
|
|
2
|
+
import { ReactElement } from 'react';
|
|
3
|
+
import { Platform, View } from 'react-native';
|
|
4
|
+
import { StyleSheet } from 'react-native-unistyles';
|
|
5
|
+
import { AppText } from '../text';
|
|
6
|
+
|
|
7
|
+
export function AppVersion(): ReactElement {
|
|
8
|
+
const build =
|
|
9
|
+
Platform.OS === 'ios'
|
|
10
|
+
? Constants.expoConfig?.ios?.buildNumber
|
|
11
|
+
: Constants.expoConfig?.android?.versionCode;
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<View style={styles.container}>
|
|
15
|
+
<AppText>{Constants.expoConfig?.version}</AppText>
|
|
16
|
+
<AppText>{`(${build})`}</AppText>
|
|
17
|
+
</View>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const styles = StyleSheet.create(({ spacings }) => ({
|
|
22
|
+
container: {
|
|
23
|
+
gap: spacings.xs,
|
|
24
|
+
flexDirection: 'row',
|
|
25
|
+
justifyContent: 'center',
|
|
26
|
+
},
|
|
27
|
+
}));
|
package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/app-version/index.ts.template
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './component';
|
package/src/shared/generators/ui-kit/lib-files/shared/ui/ui-kit/src/header/component.tsx.template
CHANGED
|
@@ -1,38 +1,54 @@
|
|
|
1
1
|
import { NativeStackHeaderProps } from '@react-navigation/native-stack';
|
|
2
2
|
import { AppSafeAreaView } from '@ronas-it/react-native-common-modules/safe-area-view';
|
|
3
|
+
import { useRouter } from 'expo-router';
|
|
3
4
|
import { ReactElement } from 'react';
|
|
4
5
|
import { View } from 'react-native';
|
|
5
6
|
import { StyleSheet } from 'react-native-unistyles';
|
|
6
7
|
import { AppPressableIcon } from '../pressable-icon';
|
|
7
|
-
import { AppText } from '../text';
|
|
8
|
+
import { AppText, type AppTextProps } from '../text';
|
|
8
9
|
|
|
9
10
|
export interface AppHeaderProps {
|
|
10
11
|
title?: string;
|
|
12
|
+
titleOptions?: Omit<AppTextProps, 'children'>;
|
|
13
|
+
subtitle?: string;
|
|
14
|
+
subtitleOptions?: Omit<AppTextProps, 'children'>;
|
|
11
15
|
accessoryLeft?: ReactElement;
|
|
12
16
|
accessoryRight?: ReactElement;
|
|
13
|
-
onGoBack?: () => void;
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
export function AppHeader({
|
|
17
20
|
title,
|
|
21
|
+
titleOptions,
|
|
22
|
+
subtitle,
|
|
23
|
+
subtitleOptions,
|
|
18
24
|
accessoryLeft,
|
|
19
25
|
accessoryRight,
|
|
20
|
-
onGoBack,
|
|
21
26
|
...props
|
|
22
27
|
}: AppHeaderProps & NativeStackHeaderProps): ReactElement {
|
|
28
|
+
const router = useRouter();
|
|
29
|
+
const canGoBack = router.canGoBack();
|
|
30
|
+
const goBack = (): void => router.back();
|
|
31
|
+
|
|
23
32
|
const options = props.options;
|
|
24
33
|
const titleText = title || options.title;
|
|
25
34
|
|
|
26
35
|
const renderBackButton = (): ReactElement | null => {
|
|
27
|
-
return
|
|
36
|
+
return canGoBack ? <AppPressableIcon name='chevronLeft' onPress={goBack} /> : null;
|
|
28
37
|
};
|
|
29
38
|
|
|
30
39
|
return (
|
|
31
40
|
<AppSafeAreaView edges={['top']} style={styles.container}>
|
|
32
41
|
<View style={styles.accessory}>{accessoryLeft ? accessoryLeft : renderBackButton()}</View>
|
|
33
|
-
<
|
|
34
|
-
{titleText}
|
|
35
|
-
|
|
42
|
+
<View style={styles.center}>
|
|
43
|
+
<AppText variant='bodyLargeBold' {...titleOptions} style={[styles.titleText, titleOptions?.style]}>
|
|
44
|
+
{titleText}
|
|
45
|
+
</AppText>
|
|
46
|
+
{!!subtitle && (
|
|
47
|
+
<AppText variant='bodySmall' {...subtitleOptions} style={[styles.subtitleText, subtitleOptions?.style]}>
|
|
48
|
+
{subtitle}
|
|
49
|
+
</AppText>
|
|
50
|
+
)}
|
|
51
|
+
</View>
|
|
36
52
|
<View style={styles.accessory}>{accessoryRight}</View>
|
|
37
53
|
</AppSafeAreaView>
|
|
38
54
|
);
|
|
@@ -47,11 +63,22 @@ const styles = StyleSheet.create(({ colors, spacings }, { screen }) => ({
|
|
|
47
63
|
justifyContent: 'space-between',
|
|
48
64
|
alignItems: 'center',
|
|
49
65
|
},
|
|
50
|
-
|
|
66
|
+
center: {
|
|
67
|
+
flex: 1,
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
justifyContent: 'center',
|
|
70
|
+
},
|
|
71
|
+
titleText: {
|
|
51
72
|
textAlign: 'center',
|
|
52
73
|
// 44 - header accessory width, spacings.md - header horizontal padding
|
|
53
74
|
maxWidth: screen.width - 44 * 2 - spacings.md * 2,
|
|
54
75
|
},
|
|
76
|
+
subtitleText: {
|
|
77
|
+
textAlign: 'center',
|
|
78
|
+
marginTop: spacings.xxs,
|
|
79
|
+
color: colors.textSecondary,
|
|
80
|
+
maxWidth: screen.width - 44 * 2 - spacings.md * 2,
|
|
81
|
+
},
|
|
55
82
|
accessory: {
|
|
56
83
|
minHeight: 44,
|
|
57
84
|
minWidth: 44,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './assets';
|
|
2
|
+
export * from './app-version';
|
|
2
3
|
export * from './button';
|
|
3
4
|
export * from './icon';
|
|
4
5
|
export * from './pressable';
|
|
@@ -9,6 +10,7 @@ export * from './text';
|
|
|
9
10
|
export * from './text-input';
|
|
10
11
|
export * from './header';
|
|
11
12
|
export * from './image';
|
|
13
|
+
export * from './keyboard-avoiding-view';
|
|
12
14
|
export * from './checkbox';
|
|
13
15
|
export * from './under-construction';
|
|
14
16
|
export * from './search-input';
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ReactElement, Ref } from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
import {
|
|
4
|
+
KeyboardAvoidingView,
|
|
5
|
+
KeyboardAvoidingViewProps,
|
|
6
|
+
KeyboardAwareScrollView,
|
|
7
|
+
KeyboardAwareScrollViewProps,
|
|
8
|
+
KeyboardAwareScrollViewRef,
|
|
9
|
+
} from 'react-native-keyboard-controller';
|
|
10
|
+
import { commonStyle, rem } from '<%= libPath %>/shared/ui/styles';
|
|
11
|
+
|
|
12
|
+
type AppKeyboardAvoidingViewProps =
|
|
13
|
+
| ({
|
|
14
|
+
isScrollable: true;
|
|
15
|
+
ref?: Ref<KeyboardAwareScrollViewRef>;
|
|
16
|
+
} & KeyboardAwareScrollViewProps)
|
|
17
|
+
| ({
|
|
18
|
+
isScrollable?: false;
|
|
19
|
+
ref?: Ref<View>;
|
|
20
|
+
} & KeyboardAvoidingViewProps);
|
|
21
|
+
|
|
22
|
+
export const AppKeyboardAvoidingView = ({
|
|
23
|
+
children,
|
|
24
|
+
ref,
|
|
25
|
+
isScrollable,
|
|
26
|
+
...restProps
|
|
27
|
+
}: AppKeyboardAvoidingViewProps): ReactElement => {
|
|
28
|
+
return isScrollable ? (
|
|
29
|
+
<KeyboardAwareScrollView
|
|
30
|
+
ref={ref as Ref<KeyboardAwareScrollViewRef>}
|
|
31
|
+
keyboardShouldPersistTaps='handled'
|
|
32
|
+
showsVerticalScrollIndicator={false}
|
|
33
|
+
alwaysBounceVertical={false}
|
|
34
|
+
bottomOffset={rem}
|
|
35
|
+
style={commonStyle.fullHeight}
|
|
36
|
+
{...restProps}>
|
|
37
|
+
{children}
|
|
38
|
+
</KeyboardAwareScrollView>
|
|
39
|
+
) : (
|
|
40
|
+
<KeyboardAvoidingView
|
|
41
|
+
ref={ref as Ref<View>}
|
|
42
|
+
behavior='padding'
|
|
43
|
+
{...(restProps as Omit<KeyboardAvoidingViewProps, 'behavior' | 'contentContainerStyle'>)}>
|
|
44
|
+
{children}
|
|
45
|
+
</KeyboardAvoidingView>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './component';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare const installPackagesTaskMock: jest.Mock;
|
|
2
|
-
export declare const execSyncMock: jest.Mock;
|
|
3
|
-
export declare const existsSyncMock: jest.Mock;
|
|
4
|
-
export declare const generateFilesMock: jest.Mock;
|
|
5
|
-
export declare const formatFilesMock: jest.Mock;
|
|
6
|
-
export declare const addDependenciesMock: jest.Mock;
|
|
7
|
-
export declare const readJsonMock: jest.Mock;
|
|
8
|
-
export declare const writeJsonMock: jest.Mock;
|
|
9
|
-
export declare const readProjectConfigurationMock: jest.Mock;
|
|
10
|
-
export declare const getProjectsMock: jest.Mock;
|
|
11
|
-
export declare const confirmMock: jest.Mock;
|
|
12
|
-
export declare const askQuestionMock: jest.Mock;
|
|
13
|
-
export declare const getLibraryDetailsByNameMock: jest.Mock;
|
|
14
|
-
export declare const getImportPathPrefixMock: jest.Mock;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getImportPathPrefixMock = exports.getLibraryDetailsByNameMock = exports.askQuestionMock = exports.confirmMock = exports.getProjectsMock = exports.readProjectConfigurationMock = exports.writeJsonMock = exports.readJsonMock = exports.addDependenciesMock = exports.formatFilesMock = exports.generateFilesMock = exports.existsSyncMock = exports.execSyncMock = exports.installPackagesTaskMock = void 0;
|
|
4
|
-
/// <reference types="jest" />
|
|
5
|
-
const child_process = require("child_process");
|
|
6
|
-
const fs = require("fs");
|
|
7
|
-
const devkit = require("@nx/devkit");
|
|
8
|
-
const utils_1 = require("./utils");
|
|
9
|
-
// Mock child_process.execSync globally
|
|
10
|
-
jest.mock('child_process', () => ({
|
|
11
|
-
execSync: jest.fn(),
|
|
12
|
-
}));
|
|
13
|
-
// Mock fs methods commonly used
|
|
14
|
-
jest.mock('fs', () => {
|
|
15
|
-
const actualFs = jest.requireActual('fs');
|
|
16
|
-
return Object.assign(Object.assign({}, actualFs), { existsSync: jest.fn(), readdirSync: actualFs.readdirSync, readFileSync: actualFs.readFileSync });
|
|
17
|
-
});
|
|
18
|
-
// Mock @nx/devkit utilities commonly used in generators
|
|
19
|
-
jest.mock('@nx/devkit', () => ({
|
|
20
|
-
readJson: jest.fn(),
|
|
21
|
-
writeJson: jest.fn(),
|
|
22
|
-
generateFiles: jest.fn((tree, src, dest, vars) => {
|
|
23
|
-
(0, utils_1.mockGenerateFiles)(tree, src, dest, vars);
|
|
24
|
-
}),
|
|
25
|
-
formatFiles: jest.fn(),
|
|
26
|
-
addDependenciesToPackageJson: jest.fn(),
|
|
27
|
-
removeDependenciesFromPackageJson: jest.fn(),
|
|
28
|
-
installPackagesTask: jest.fn(),
|
|
29
|
-
readProjectConfiguration: jest.fn(),
|
|
30
|
-
updateProjectConfiguration: jest.fn(),
|
|
31
|
-
getProjects: jest.fn(),
|
|
32
|
-
output: {
|
|
33
|
-
log: jest.fn(),
|
|
34
|
-
warn: jest.fn(),
|
|
35
|
-
bold: (text) => text,
|
|
36
|
-
},
|
|
37
|
-
Tree: jest.fn(),
|
|
38
|
-
}));
|
|
39
|
-
// Mock enquirer AutoComplete used in some generators
|
|
40
|
-
jest.mock('enquirer', () => ({
|
|
41
|
-
Confirm: jest.fn().mockImplementation(() => ({
|
|
42
|
-
run: jest.fn().mockResolvedValue(true), // simulate user confirmed "yes"
|
|
43
|
-
})),
|
|
44
|
-
AutoComplete: jest.fn().mockImplementation(() => ({
|
|
45
|
-
run: jest.fn().mockResolvedValue('libs/shared/ui'),
|
|
46
|
-
})),
|
|
47
|
-
}));
|
|
48
|
-
// Mock cli-utils common functions partially
|
|
49
|
-
jest.mock('../utils/cli-utils', () => {
|
|
50
|
-
const actualUtils = jest.requireActual('../utils/cli-utils');
|
|
51
|
-
return Object.assign(Object.assign({}, actualUtils), { confirm: jest.fn(() => Promise.resolve(true)), askQuestion: jest.fn(), getLibraryDetailsByName: jest.fn() });
|
|
52
|
-
});
|
|
53
|
-
// Mock config-utils common functions partially
|
|
54
|
-
jest.mock('../utils/config-utils', () => {
|
|
55
|
-
const actualUtils = jest.requireActual('../utils/config-utils');
|
|
56
|
-
return Object.assign(Object.assign({}, actualUtils), { getImportPathPrefix: jest.fn(() => '@proj') });
|
|
57
|
-
});
|
|
58
|
-
jest.mock('../utils/get-app-framework-name', () => ({
|
|
59
|
-
getAppFrameworkName: jest.fn(),
|
|
60
|
-
}));
|
|
61
|
-
exports.installPackagesTaskMock = devkit.installPackagesTask;
|
|
62
|
-
exports.execSyncMock = child_process.execSync;
|
|
63
|
-
exports.existsSyncMock = fs.existsSync;
|
|
64
|
-
exports.generateFilesMock = devkit.generateFiles;
|
|
65
|
-
exports.formatFilesMock = devkit.formatFiles;
|
|
66
|
-
exports.addDependenciesMock = devkit.addDependenciesToPackageJson;
|
|
67
|
-
exports.readJsonMock = devkit.readJson;
|
|
68
|
-
exports.writeJsonMock = devkit.writeJson;
|
|
69
|
-
exports.readProjectConfigurationMock = devkit.readProjectConfiguration;
|
|
70
|
-
exports.getProjectsMock = devkit.getProjects;
|
|
71
|
-
exports.confirmMock = require('../utils/cli-utils').confirm;
|
|
72
|
-
exports.askQuestionMock = require('../utils/cli-utils').askQuestion;
|
|
73
|
-
exports.getLibraryDetailsByNameMock = require('../utils/cli-utils').getLibraryDetailsByName;
|
|
74
|
-
exports.getImportPathPrefixMock = require('../utils/config-utils').getImportPathPrefix;
|
|
75
|
-
//# sourceMappingURL=common-mocks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"common-mocks.js","sourceRoot":"","sources":["../../../../../plugin/src/shared/tests-utils/common-mocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../plugin/src/shared/tests-utils/index.ts"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,yDAA+B"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import * as devkit from '@nx/devkit';
|
|
2
|
-
import { Tree } from '@nx/devkit';
|
|
3
|
-
interface AssertFirstLineOptions {
|
|
4
|
-
placeholders?: Record<string, string>;
|
|
5
|
-
/** Basename match, or glob with `*` (e.g. `*.ttf`). */
|
|
6
|
-
ignoreFiles?: Array<string>;
|
|
7
|
-
}
|
|
8
|
-
export declare function assertFirstLine(sourceDir: string, targetDir: string, tree: devkit.Tree, options?: AssertFirstLineOptions): void;
|
|
9
|
-
export declare function mockGenerateFiles(tree: Tree, srcDir: string, destDir: string, templateVars?: Record<string, string>): void;
|
|
10
|
-
export {};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertFirstLine = assertFirstLine;
|
|
4
|
-
exports.mockGenerateFiles = mockGenerateFiles;
|
|
5
|
-
const fs = require("fs");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const BINARY_FILE_PATTERN = /\.(ttf|otf|eot|woff2?|png|jpe?g|gif|ico|webp|pdf)$/i;
|
|
8
|
-
function fileNameMatchesIgnorePattern(fileName, pattern) {
|
|
9
|
-
if (!pattern.includes('*')) {
|
|
10
|
-
return fileName === pattern;
|
|
11
|
-
}
|
|
12
|
-
const regexSource = pattern
|
|
13
|
-
.split('*')
|
|
14
|
-
.map((segment) => segment.replace(/[.+^${}()|[\]\\]/g, '\\$&'))
|
|
15
|
-
.join('.*');
|
|
16
|
-
return new RegExp(`^${regexSource}$`).test(fileName);
|
|
17
|
-
}
|
|
18
|
-
function assertFirstLine(sourceDir, targetDir, tree, options = {}) {
|
|
19
|
-
var _a;
|
|
20
|
-
const { placeholders = {}, ignoreFiles = [] } = options;
|
|
21
|
-
const entries = fs.readdirSync(sourceDir, { withFileTypes: true });
|
|
22
|
-
for (const entry of entries) {
|
|
23
|
-
const srcPath = path.join(sourceDir, entry.name);
|
|
24
|
-
if (entry.isDirectory()) {
|
|
25
|
-
assertFirstLine(srcPath, path.join(targetDir, entry.name), tree, options);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
if (ignoreFiles.some((p) => fileNameMatchesIgnorePattern(entry.name, p))) {
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
let fileName = entry.name.replace(/\.template$/, '');
|
|
32
|
-
Object.entries(placeholders).forEach(([key, value]) => {
|
|
33
|
-
fileName = fileName.replace(new RegExp(`__${key}__`, 'g'), value);
|
|
34
|
-
});
|
|
35
|
-
const targetFile = path.join(targetDir, fileName).split(path.sep).join('/');
|
|
36
|
-
let expectedFirstLine = fs.readFileSync(srcPath, 'utf8').split('\n')[0].trim();
|
|
37
|
-
// Substitute placeholders in first line
|
|
38
|
-
Object.entries(placeholders).forEach(([key, value]) => {
|
|
39
|
-
expectedFirstLine = expectedFirstLine.replace(new RegExp(`<%=\\s*${key}\\s*%>`, 'g'), value);
|
|
40
|
-
expectedFirstLine = expectedFirstLine.replace(new RegExp(`__${key}__`, 'g'), value);
|
|
41
|
-
});
|
|
42
|
-
// Check for unresolved placeholders in expected line
|
|
43
|
-
const unresolved = expectedFirstLine.match(/<%=?\s*\w+\s*%>|__\w+__/);
|
|
44
|
-
if (unresolved) {
|
|
45
|
-
throw new Error(`Unresolved placeholder '${unresolved[0]}' found in template '${srcPath}' first line: '${expectedFirstLine}'. ` +
|
|
46
|
-
`You may have forgotten to pass it in placeholders.`);
|
|
47
|
-
}
|
|
48
|
-
const generatedContent = (_a = tree.read(targetFile)) === null || _a === void 0 ? void 0 : _a.toString();
|
|
49
|
-
if (!generatedContent) {
|
|
50
|
-
throw new Error(`Expected generated file not found: ${targetFile}`);
|
|
51
|
-
}
|
|
52
|
-
const actualFirstLine = generatedContent.split('\n')[0].trim();
|
|
53
|
-
expect(actualFirstLine).toBe(expectedFirstLine);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function mockGenerateFiles(tree, srcDir, destDir, templateVars) {
|
|
58
|
-
function copyRecursive(src, dest) {
|
|
59
|
-
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
60
|
-
for (const entry of entries) {
|
|
61
|
-
const srcPath = path.join(src, entry.name);
|
|
62
|
-
if (entry.isDirectory()) {
|
|
63
|
-
copyRecursive(srcPath, path.join(dest, entry.name));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
let fileName = entry.name.replace(/\.template$/, '');
|
|
67
|
-
if (templateVars) {
|
|
68
|
-
Object.entries(templateVars).forEach(([key, value]) => {
|
|
69
|
-
fileName = fileName.replace(new RegExp(`__${key}__`, 'g'), value);
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
const destPath = path.join(dest, fileName).split(path.sep).join('/');
|
|
73
|
-
if (BINARY_FILE_PATTERN.test(fileName)) {
|
|
74
|
-
tree.write(destPath, fs.readFileSync(srcPath));
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
let content = fs.readFileSync(srcPath, 'utf8');
|
|
78
|
-
if (templateVars) {
|
|
79
|
-
Object.entries(templateVars).forEach(([key, value]) => {
|
|
80
|
-
const regex1 = new RegExp(`<%=\\s*${key}\\s*%>`, 'g');
|
|
81
|
-
const regex2 = new RegExp(`__${key}__`, 'g');
|
|
82
|
-
content = content.replace(regex1, value);
|
|
83
|
-
content = content.replace(regex2, value);
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
tree.write(destPath, content);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
copyRecursive(srcDir, destDir.split(path.sep).join('/'));
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../plugin/src/shared/tests-utils/utils.ts"],"names":[],"mappings":"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"}
|