skuilder 0.1.1 → 0.1.3

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.
Files changed (93) hide show
  1. package/README.md +155 -12
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +35 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/init.d.ts +3 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +70 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/types.d.ts +35 -0
  11. package/dist/types.d.ts.map +1 -0
  12. package/dist/types.js +35 -0
  13. package/dist/types.js.map +1 -0
  14. package/dist/utils/prompts.d.ts +5 -0
  15. package/dist/utils/prompts.d.ts.map +1 -0
  16. package/dist/utils/prompts.js +185 -0
  17. package/dist/utils/prompts.js.map +1 -0
  18. package/dist/utils/template.d.ts +26 -0
  19. package/dist/utils/template.d.ts.map +1 -0
  20. package/dist/utils/template.js +170 -0
  21. package/dist/utils/template.js.map +1 -0
  22. package/eslint.config.mjs +21 -0
  23. package/package.json +41 -36
  24. package/src/cli.ts +42 -0
  25. package/src/commands/init.ts +83 -0
  26. package/src/types.ts +72 -0
  27. package/src/utils/prompts.ts +204 -0
  28. package/src/utils/template.ts +215 -0
  29. package/tsconfig.json +12 -21
  30. package/.npmignore +0 -56
  31. package/android/app/BUCK +0 -65
  32. package/android/app/build.gradle +0 -139
  33. package/android/app/proguard-rules.pro +0 -66
  34. package/android/app/src/main/AndroidManifest.xml +0 -32
  35. package/android/app/src/main/java/com/rxphelloworld/MainActivity.java +0 -15
  36. package/android/app/src/main/java/com/rxphelloworld/MainApplication.java +0 -40
  37. package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  38. package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  39. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  40. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  41. package/android/app/src/main/res/values/strings.xml +0 -3
  42. package/android/app/src/main/res/values/styles.xml +0 -8
  43. package/android/build.gradle +0 -24
  44. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  45. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  46. package/android/gradle.properties +0 -20
  47. package/android/gradlew +0 -164
  48. package/android/gradlew.bat +0 -90
  49. package/android/keystores/BUCK +0 -8
  50. package/android/keystores/debug.keystore.properties +0 -4
  51. package/android/settings.gradle +0 -3
  52. package/img/fingerCounter/1.PNG +0 -0
  53. package/img/fingerCounter/10.PNG +0 -0
  54. package/img/fingerCounter/2.PNG +0 -0
  55. package/img/fingerCounter/3.PNG +0 -0
  56. package/img/fingerCounter/4.PNG +0 -0
  57. package/img/fingerCounter/5.PNG +0 -0
  58. package/img/fingerCounter/6.PNG +0 -0
  59. package/img/fingerCounter/7.PNG +0 -0
  60. package/img/fingerCounter/8.PNG +0 -0
  61. package/img/fingerCounter/9.PNG +0 -0
  62. package/index.android.js +0 -1
  63. package/index.html +0 -30
  64. package/index.ios.js +0 -1
  65. package/ios/RXPHelloWorld/AppDelegate.h +0 -16
  66. package/ios/RXPHelloWorld/AppDelegate.m +0 -37
  67. package/ios/RXPHelloWorld/Base.lproj/LaunchScreen.xib +0 -42
  68. package/ios/RXPHelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json +0 -38
  69. package/ios/RXPHelloWorld/Info.plist +0 -56
  70. package/ios/RXPHelloWorld/main.m +0 -18
  71. package/ios/RXPHelloWorld.xcodeproj/project.pbxproj +0 -1251
  72. package/ios/RXPHelloWorld.xcodeproj/xcshareddata/xcschemes/RXPHelloWorld-tvOS.xcscheme +0 -129
  73. package/ios/RXPHelloWorld.xcodeproj/xcshareddata/xcschemes/RXPHelloWorld.xcscheme +0 -129
  74. package/ios/RXPHelloWorldTests/Info.plist +0 -24
  75. package/ios/RXPHelloWorldTests/RXPHelloWorldTests.m +0 -70
  76. package/src/App.tsx +0 -206
  77. package/src/appUtilities/Grader.ts +0 -72
  78. package/src/appUtilities/Keybinder.ts +0 -28
  79. package/src/appUtilities/Recorder.ts +0 -73
  80. package/src/cloudantFiles/_users._design._auth.validate_doc_update.js +0 -136
  81. package/src/components/ProgressChart.tsx +0 -155
  82. package/src/components/fingerCounter/fingerCounter.tsx +0 -38
  83. package/src/components/fingerCounter/resources/hands.svg +0 -512
  84. package/src/components/numpad.tsx +0 -146
  85. package/src/components/sessionReport.tsx +0 -87
  86. package/src/index.tsx +0 -8
  87. package/src/questions/addition.tsx +0 -30
  88. package/src/questions/division.tsx +0 -62
  89. package/src/questions/multiplication.tsx +0 -71
  90. package/src/styles/answerStyles.css +0 -22
  91. package/src/typings/react.d.ts +0 -964
  92. package/webpack.config.ts +0 -26
  93. package/yarn.lock +0 -6208
@@ -0,0 +1,215 @@
1
+ import { promises as fs } from 'fs';
2
+ import { existsSync } from 'fs';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import chalk from 'chalk';
6
+ import { ProjectConfig, SkuilderConfig } from '../types.js';
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+
11
+ /**
12
+ * Find the standalone-ui package in node_modules
13
+ */
14
+ export async function findStandaloneUiPath(): Promise<string> {
15
+ // Start from CLI package root and work upward
16
+ let currentDir = path.join(__dirname, '..', '..');
17
+
18
+ while (currentDir !== path.dirname(currentDir)) {
19
+ const nodeModulesPath = path.join(currentDir, 'node_modules', '@vue-skuilder', 'standalone-ui');
20
+ if (existsSync(nodeModulesPath)) {
21
+ return nodeModulesPath;
22
+ }
23
+ currentDir = path.dirname(currentDir);
24
+ }
25
+
26
+ throw new Error('Could not find @vue-skuilder/standalone-ui package. Please ensure it is installed.');
27
+ }
28
+
29
+ /**
30
+ * Copy directory recursively, excluding certain files/directories
31
+ */
32
+ export async function copyDirectory(
33
+ source: string,
34
+ destination: string,
35
+ excludePatterns: string[] = ['node_modules', 'dist', '.git', 'cypress']
36
+ ): Promise<void> {
37
+ const entries = await fs.readdir(source, { withFileTypes: true });
38
+
39
+ await fs.mkdir(destination, { recursive: true });
40
+
41
+ for (const entry of entries) {
42
+ const sourcePath = path.join(source, entry.name);
43
+ const destPath = path.join(destination, entry.name);
44
+
45
+ // Skip excluded patterns
46
+ if (excludePatterns.some(pattern => entry.name.includes(pattern))) {
47
+ continue;
48
+ }
49
+
50
+ if (entry.isDirectory()) {
51
+ await copyDirectory(sourcePath, destPath, excludePatterns);
52
+ } else {
53
+ await fs.copyFile(sourcePath, destPath);
54
+ }
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Transform package.json to use published dependencies instead of workspace references
60
+ */
61
+ export async function transformPackageJson(
62
+ packageJsonPath: string,
63
+ projectName: string,
64
+ cliVersion: string
65
+ ): Promise<void> {
66
+ const content = await fs.readFile(packageJsonPath, 'utf-8');
67
+ const packageJson = JSON.parse(content);
68
+
69
+ // Update basic project info
70
+ packageJson.name = projectName;
71
+ packageJson.description = `Skuilder course application: ${projectName}`;
72
+ packageJson.version = '1.0.0';
73
+
74
+ // Transform workspace dependencies to published versions
75
+ if (packageJson.dependencies) {
76
+ for (const [depName, version] of Object.entries(packageJson.dependencies)) {
77
+ if (typeof version === 'string' && version.startsWith('workspace:')) {
78
+ // Replace workspace references with CLI's version
79
+ packageJson.dependencies[depName] = `^${cliVersion}`;
80
+ }
81
+ }
82
+ }
83
+
84
+ // Remove CLI-specific fields that don't belong in generated projects
85
+ delete packageJson.publishConfig;
86
+
87
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
88
+ }
89
+
90
+ /**
91
+ * Generate skuilder.config.json based on project configuration
92
+ */
93
+ export async function generateSkuilderConfig(
94
+ configPath: string,
95
+ config: ProjectConfig
96
+ ): Promise<void> {
97
+ const skuilderConfig: SkuilderConfig = {
98
+ title: config.title,
99
+ dataLayerType: config.dataLayerType
100
+ };
101
+
102
+ if (config.course) {
103
+ skuilderConfig.course = config.course;
104
+ }
105
+
106
+ if (config.couchdbUrl) {
107
+ skuilderConfig.couchdbUrl = config.couchdbUrl;
108
+ }
109
+
110
+ if (config.theme) {
111
+ skuilderConfig.theme = config.theme;
112
+ }
113
+
114
+ await fs.writeFile(configPath, JSON.stringify(skuilderConfig, null, 2));
115
+ }
116
+
117
+ /**
118
+ * Generate project README.md
119
+ */
120
+ export async function generateReadme(
121
+ readmePath: string,
122
+ config: ProjectConfig
123
+ ): Promise<void> {
124
+ const dataLayerInfo = config.dataLayerType === 'static'
125
+ ? 'This project uses a static data layer with JSON files.'
126
+ : `This project connects to CouchDB at: ${config.couchdbUrl || '[URL not specified]'}`;
127
+
128
+ const readme = `# ${config.title}
129
+
130
+ A Skuilder course application built with Vue 3, Vuetify, and Pinia.
131
+
132
+ ## Data Layer
133
+
134
+ ${dataLayerInfo}
135
+
136
+ ## Development
137
+
138
+ Install dependencies:
139
+ \`\`\`bash
140
+ npm install
141
+ \`\`\`
142
+
143
+ Start the development server:
144
+ \`\`\`bash
145
+ npm run dev
146
+ \`\`\`
147
+
148
+ Build for production:
149
+ \`\`\`bash
150
+ npm run build
151
+ \`\`\`
152
+
153
+ ## Configuration
154
+
155
+ Course configuration is managed in \`skuilder.config.json\`. You can modify:
156
+ - Course title
157
+ - Data layer settings
158
+ - Theme customization
159
+ - Database connection details (for dynamic data layer)
160
+
161
+ ## Theme
162
+
163
+ Current theme: **${config.theme.name}**
164
+ - Primary: ${config.theme.colors.primary}
165
+ - Secondary: ${config.theme.colors.secondary}
166
+ - Accent: ${config.theme.colors.accent}
167
+
168
+ ## Testing
169
+
170
+ Run end-to-end tests:
171
+ \`\`\`bash
172
+ npm run test:e2e
173
+ \`\`\`
174
+
175
+ Run tests in headless mode:
176
+ \`\`\`bash
177
+ npm run test:e2e:headless
178
+ \`\`\`
179
+
180
+ ## Learn More
181
+
182
+ Visit the [Skuilder documentation](https://github.com/NiloCK/vue-skuilder) for more information about building course applications.
183
+ `;
184
+
185
+ await fs.writeFile(readmePath, readme);
186
+ }
187
+
188
+ /**
189
+ * Copy and transform the standalone-ui template to create a new project
190
+ */
191
+ export async function processTemplate(
192
+ projectPath: string,
193
+ config: ProjectConfig,
194
+ cliVersion: string
195
+ ): Promise<void> {
196
+ console.log(chalk.blue('📦 Locating standalone-ui template...'));
197
+ const templatePath = await findStandaloneUiPath();
198
+
199
+ console.log(chalk.blue('📂 Copying project files...'));
200
+ await copyDirectory(templatePath, projectPath);
201
+
202
+ console.log(chalk.blue('⚙️ Configuring package.json...'));
203
+ const packageJsonPath = path.join(projectPath, 'package.json');
204
+ await transformPackageJson(packageJsonPath, config.projectName, cliVersion);
205
+
206
+ console.log(chalk.blue('🔧 Generating configuration...'));
207
+ const configPath = path.join(projectPath, 'skuilder.config.json');
208
+ await generateSkuilderConfig(configPath, config);
209
+
210
+ console.log(chalk.blue('📝 Creating README...'));
211
+ const readmePath = path.join(projectPath, 'README.md');
212
+ await generateReadme(readmePath, config);
213
+
214
+ console.log(chalk.green('✅ Template processing complete!'));
215
+ }
package/tsconfig.json CHANGED
@@ -1,27 +1,18 @@
1
1
  {
2
- "exclude": [
3
- "node_modules"
4
- ],
2
+ "extends": "../../tsconfig.base.json",
5
3
  "compilerOptions": {
6
- "declaration": false,
7
- "noResolve": false,
8
- "jsx": "react",
9
- "reactNamespace": "RX",
10
- "module": "commonjs",
11
- "target": "es5",
12
- "experimentalDecorators": true,
13
- "sourceMap": true,
14
- "noImplicitAny": true,
15
- "noImplicitReturns": true,
16
- "outDir": "./dist/",
17
- "types": [
18
- "node"
19
- ]
20
- },
21
- "typeAcquisition": {
22
- "enable": true
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "outDir": "dist",
7
+ "rootDir": "src",
8
+ "resolveJsonModule": true,
9
+ "allowImportingTsExtensions": false
23
10
  },
24
11
  "include": [
25
- "./src/**/*"
12
+ "src/**/*"
13
+ ],
14
+ "exclude": [
15
+ "node_modules",
16
+ "dist"
26
17
  ]
27
18
  }
package/.npmignore DELETED
@@ -1,56 +0,0 @@
1
- # OSX
2
- #
3
- .DS_Store
4
-
5
- # Xcode
6
- #
7
- build/
8
- *.pbxuser
9
- !default.pbxuser
10
- *.mode1v3
11
- !default.mode1v3
12
- *.mode2v3
13
- !default.mode2v3
14
- *.perspectivev3
15
- !default.perspectivev3
16
- xcuserdata
17
- *.xccheckout
18
- *.moved-aside
19
- DerivedData
20
- *.hmap
21
- *.ipa
22
- *.xcuserstate
23
- project.xcworkspace
24
-
25
- # Android/IntelliJ
26
- #
27
- build/
28
- .idea
29
- .gradle
30
- local.properties
31
- *.iml
32
-
33
- # node.js
34
- #
35
- node_modules/
36
- npm-debug.log
37
- yarn-error.log
38
-
39
- # BUCK
40
- buck-out/
41
- \.buckd/
42
- *.keystore
43
-
44
- # fastlane
45
- #
46
- # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
47
- # screenshots whenever they are needed.
48
- # For more information about the recommended setup visit:
49
- # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
50
-
51
- fastlane/report.xml
52
- fastlane/Preview.html
53
- fastlane/screenshots
54
-
55
- .vscode
56
- dist/
package/android/app/BUCK DELETED
@@ -1,65 +0,0 @@
1
- # To learn about Buck see [Docs](https://buckbuild.com/).
2
- # To run your application with Buck:
3
- # - install Buck
4
- # - `npm start` - to start the packager
5
- # - `cd android`
6
- # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
7
- # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
8
- # - `buck install -r android/app` - compile, install and run application
9
- #
10
-
11
- lib_deps = []
12
-
13
- for jarfile in glob(['libs/*.jar']):
14
- name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
15
- lib_deps.append(':' + name)
16
- prebuilt_jar(
17
- name = name,
18
- binary_jar = jarfile,
19
- )
20
-
21
- for aarfile in glob(['libs/*.aar']):
22
- name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
23
- lib_deps.append(':' + name)
24
- android_prebuilt_aar(
25
- name = name,
26
- aar = aarfile,
27
- )
28
-
29
- android_library(
30
- name = "all-libs",
31
- exported_deps = lib_deps,
32
- )
33
-
34
- android_library(
35
- name = "app-code",
36
- srcs = glob([
37
- "src/main/java/**/*.java",
38
- ]),
39
- deps = [
40
- ":all-libs",
41
- ":build_config",
42
- ":res",
43
- ],
44
- )
45
-
46
- android_build_config(
47
- name = "build_config",
48
- package = "com.rxphelloworld",
49
- )
50
-
51
- android_resource(
52
- name = "res",
53
- package = "com.rxphelloworld",
54
- res = "src/main/res",
55
- )
56
-
57
- android_binary(
58
- name = "app",
59
- keystore = "//android/keystores:debug",
60
- manifest = "src/main/AndroidManifest.xml",
61
- package_type = "debug",
62
- deps = [
63
- ":app-code",
64
- ],
65
- )
@@ -1,139 +0,0 @@
1
- apply plugin: "com.android.application"
2
-
3
- import com.android.build.OutputFile
4
-
5
- /**
6
- * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
7
- * and bundleReleaseJsAndAssets).
8
- * These basically call `react-native bundle` with the correct arguments during the Android build
9
- * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
10
- * bundle directly from the development server. Below you can see all the possible configurations
11
- * and their defaults. If you decide to add a configuration block, make sure to add it before the
12
- * `apply from: "../../node_modules/react-native/react.gradle"` line.
13
- *
14
- * project.ext.react = [
15
- * // the name of the generated asset file containing your JS bundle
16
- * bundleAssetName: "index.android.bundle",
17
- *
18
- * // the entry file for bundle generation
19
- * entryFile: "index.android.js",
20
- *
21
- * // whether to bundle JS and assets in debug mode
22
- * bundleInDebug: false,
23
- *
24
- * // whether to bundle JS and assets in release mode
25
- * bundleInRelease: true,
26
- *
27
- * // whether to bundle JS and assets in another build variant (if configured).
28
- * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
29
- * // The configuration property can be in the following formats
30
- * // 'bundleIn${productFlavor}${buildType}'
31
- * // 'bundleIn${buildType}'
32
- * // bundleInFreeDebug: true,
33
- * // bundleInPaidRelease: true,
34
- * // bundleInBeta: true,
35
- *
36
- * // the root of your project, i.e. where "package.json" lives
37
- * root: "../../",
38
- *
39
- * // where to put the JS bundle asset in debug mode
40
- * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
41
- *
42
- * // where to put the JS bundle asset in release mode
43
- * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
44
- *
45
- * // where to put drawable resources / React Native assets, e.g. the ones you use via
46
- * // require('./image.png')), in debug mode
47
- * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
48
- *
49
- * // where to put drawable resources / React Native assets, e.g. the ones you use via
50
- * // require('./image.png')), in release mode
51
- * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
52
- *
53
- * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
54
- * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
55
- * // date; if you have any other folders that you want to ignore for performance reasons (gradle
56
- * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
57
- * // for example, you might want to remove it from here.
58
- * inputExcludes: ["android/**", "ios/**"],
59
- *
60
- * // override which node gets called and with what additional arguments
61
- * nodeExecutableAndArgs: ["node"]
62
- *
63
- * // supply additional arguments to the packager
64
- * extraPackagerArgs: []
65
- * ]
66
- */
67
-
68
- apply from: "../../node_modules/react-native/react.gradle"
69
-
70
- /**
71
- * Set this to true to create two separate APKs instead of one:
72
- * - An APK that only works on ARM devices
73
- * - An APK that only works on x86 devices
74
- * The advantage is the size of the APK is reduced by about 4MB.
75
- * Upload all the APKs to the Play Store and people will download
76
- * the correct one based on the CPU architecture of their device.
77
- */
78
- def enableSeparateBuildPerCPUArchitecture = false
79
-
80
- /**
81
- * Run Proguard to shrink the Java bytecode in release builds.
82
- */
83
- def enableProguardInReleaseBuilds = false
84
-
85
- android {
86
- compileSdkVersion 23
87
- buildToolsVersion '25.0.0'
88
-
89
- defaultConfig {
90
- applicationId "com.rxphelloworld"
91
- minSdkVersion 16
92
- targetSdkVersion 22
93
- versionCode 1
94
- versionName "1.0"
95
- ndk {
96
- abiFilters "armeabi-v7a", "x86"
97
- }
98
- }
99
- splits {
100
- abi {
101
- reset()
102
- enable enableSeparateBuildPerCPUArchitecture
103
- universalApk false // If true, also generate a universal APK
104
- include "armeabi-v7a", "x86"
105
- }
106
- }
107
- buildTypes {
108
- release {
109
- minifyEnabled enableProguardInReleaseBuilds
110
- proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
111
- }
112
- }
113
- // applicationVariants are e.g. debug, release
114
- applicationVariants.all { variant ->
115
- variant.outputs.each { output ->
116
- // For each separate APK per architecture, set a unique version code as described here:
117
- // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
118
- def versionCodes = ["armeabi-v7a":1, "x86":2]
119
- def abi = output.getFilter(OutputFile.ABI)
120
- if (abi != null) { // null for the universal-debug, universal-release variants
121
- output.versionCodeOverride =
122
- versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
123
- }
124
- }
125
- }
126
- }
127
-
128
- dependencies {
129
- compile fileTree(dir: "libs", include: ["*.jar"])
130
- compile "com.android.support:appcompat-v7:23.0.1"
131
- compile "com.facebook.react:react-native:+" // From node_modules
132
- }
133
-
134
- // Run this once to be able to run the application with BUCK
135
- // puts all compile dependencies into folder libs for BUCK to use
136
- task copyDownloadableDepsToLibs(type: Copy) {
137
- from configurations.compile
138
- into 'libs'
139
- }
@@ -1,66 +0,0 @@
1
- # Add project specific ProGuard rules here.
2
- # By default, the flags in this file are appended to flags specified
3
- # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4
- # You can edit the include path and order by changing the proguardFiles
5
- # directive in build.gradle.
6
- #
7
- # For more details, see
8
- # http://developer.android.com/guide/developing/tools/proguard.html
9
-
10
- # Add any project specific keep options here:
11
-
12
- # If your project uses WebView with JS, uncomment the following
13
- # and specify the fully qualified class name to the JavaScript interface
14
- # class:
15
- #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16
- # public *;
17
- #}
18
-
19
- # Disabling obfuscation is useful if you collect stack traces from production crashes
20
- # (unless you are using a system that supports de-obfuscate the stack traces).
21
- -dontobfuscate
22
-
23
- # React Native
24
-
25
- # Keep our interfaces so they can be used by other ProGuard rules.
26
- # See http://sourceforge.net/p/proguard/bugs/466/
27
- -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
28
- -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
29
- -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
30
-
31
- # Do not strip any method/class that is annotated with @DoNotStrip
32
- -keep @com.facebook.proguard.annotations.DoNotStrip class *
33
- -keep @com.facebook.common.internal.DoNotStrip class *
34
- -keepclassmembers class * {
35
- @com.facebook.proguard.annotations.DoNotStrip *;
36
- @com.facebook.common.internal.DoNotStrip *;
37
- }
38
-
39
- -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
40
- void set*(***);
41
- *** get*();
42
- }
43
-
44
- -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
45
- -keep class * extends com.facebook.react.bridge.NativeModule { *; }
46
- -keepclassmembers,includedescriptorclasses class * { native <methods>; }
47
- -keepclassmembers class * { @com.facebook.react.uimanager.UIProp <fields>; }
48
- -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
49
- -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
50
-
51
- -dontwarn com.facebook.react.**
52
-
53
- # okhttp
54
-
55
- -keepattributes Signature
56
- -keepattributes *Annotation*
57
- -keep class okhttp3.** { *; }
58
- -keep interface okhttp3.** { *; }
59
- -dontwarn okhttp3.**
60
-
61
- # okio
62
-
63
- -keep class sun.misc.Unsafe { *; }
64
- -dontwarn java.nio.file.*
65
- -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
66
- -dontwarn okio.**
@@ -1,32 +0,0 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
- package="com.rxphelloworld"
3
- android:versionCode="1"
4
- android:versionName="1.0">
5
-
6
- <uses-permission android:name="android.permission.INTERNET" />
7
- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
8
-
9
- <uses-sdk
10
- android:minSdkVersion="16"
11
- android:targetSdkVersion="22" />
12
-
13
- <application
14
- android:name=".MainApplication"
15
- android:allowBackup="true"
16
- android:label="@string/app_name"
17
- android:icon="@mipmap/ic_launcher"
18
- android:theme="@style/AppTheme">
19
- <activity
20
- android:name=".MainActivity"
21
- android:label="@string/app_name"
22
- android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
23
- android:windowSoftInputMode="adjustResize">
24
- <intent-filter>
25
- <action android:name="android.intent.action.MAIN" />
26
- <category android:name="android.intent.category.LAUNCHER" />
27
- </intent-filter>
28
- </activity>
29
- <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
30
- </application>
31
-
32
- </manifest>
@@ -1,15 +0,0 @@
1
- package com.rxphelloworld;
2
-
3
- import com.facebook.react.ReactActivity;
4
-
5
- public class MainActivity extends ReactActivity {
6
-
7
- /**
8
- * Returns the name of the main component registered from JavaScript.
9
- * This is used to schedule rendering of the component.
10
- */
11
- @Override
12
- protected String getMainComponentName() {
13
- return "RXApp";
14
- }
15
- }
@@ -1,40 +0,0 @@
1
- package com.rxphelloworld;
2
-
3
- import android.app.Application;
4
-
5
- import com.facebook.react.ReactApplication;
6
- import com.facebook.react.ReactNativeHost;
7
- import com.facebook.react.ReactPackage;
8
- import com.facebook.react.shell.MainReactPackage;
9
- import com.facebook.soloader.SoLoader;
10
-
11
- import java.util.Arrays;
12
- import java.util.List;
13
-
14
- public class MainApplication extends Application implements ReactApplication {
15
-
16
- private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
17
- @Override
18
- public boolean getUseDeveloperSupport() {
19
- return BuildConfig.DEBUG;
20
- }
21
-
22
- @Override
23
- protected List<ReactPackage> getPackages() {
24
- return Arrays.<ReactPackage>asList(
25
- new MainReactPackage()
26
- );
27
- }
28
- };
29
-
30
- @Override
31
- public ReactNativeHost getReactNativeHost() {
32
- return mReactNativeHost;
33
- }
34
-
35
- @Override
36
- public void onCreate() {
37
- super.onCreate();
38
- SoLoader.init(this, /* native exopackage */ false);
39
- }
40
- }
@@ -1,3 +0,0 @@
1
- <resources>
2
- <string name="app_name">RXPHelloWorld</string>
3
- </resources>