@eskea/super-app-sdk 1.0.0

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.
@@ -0,0 +1,17 @@
1
+ // source: https://github.com/facebook/react-native/pull/39520
2
+ // TODO remove in the future when this lands in RN
3
+
4
+ ext.resolveNodePackage = { String packageName, File startDir ->
5
+ def candidate = new File(startDir, "node_modules/$packageName")
6
+
7
+ if (candidate.exists()) {
8
+ return candidate.canonicalFile
9
+ }
10
+
11
+ def parentDir = startDir.parentFile
12
+ if (parentDir == null || startDir.canonicalPath == parentDir.canonicalPath) {
13
+ throw new GradleException("Failed to find the package '$packageName'. Ensure you have installed node_modules.")
14
+ }
15
+
16
+ return resolveNodePackage(packageName, parentDir)
17
+ }
package/index.js ADDED
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ getSharedDependencies: require("./lib/sharedDeps"),
3
+ };
@@ -0,0 +1,17 @@
1
+ # TODO remove this after upgrading to RN 0.72
2
+
3
+ resolve_react_native = <<-JS
4
+ require.resolve("react-native", {paths: ["#{Dir.pwd}"]})
5
+ JS
6
+
7
+ react_native_path = File.dirname(Pod::Executable.execute_command('node', ['-p', resolve_react_native]).strip)
8
+ react_native_pods_path = react_native_path + '/scripts/react_native_pods.rb'
9
+
10
+ resolve_cli_native_modules_script = <<-JS
11
+ require.resolve("@react-native-community/cli-platform-ios/native_modules.rb", {paths: ["#{react_native_path}"]})
12
+ JS
13
+
14
+ cli_native_modules_script_path = Pod::Executable.execute_command('node', ['-p', resolve_cli_native_modules_script]).strip
15
+
16
+ require react_native_pods_path
17
+ require cli_native_modules_script_path
@@ -0,0 +1,23 @@
1
+ {
2
+ "react": {
3
+ "name": "react",
4
+ "version": "19.1.0"
5
+ },
6
+ "react-native": {
7
+ "name": "react-native",
8
+ "version": "0.81.5"
9
+ },
10
+ "@react-native/new-app-screen": {
11
+ "name": "@react-native/new-app-screen",
12
+ "version": "0.81.5"
13
+ },
14
+ "react-native-safe-area-context": {
15
+ "name": "react-native-safe-area-context",
16
+ "version": "^5.5.2"
17
+ },
18
+ "@module-federation/enhanced": {
19
+ "name": "@module-federation/enhanced",
20
+ "version": "0.23.0",
21
+ "shared": false
22
+ }
23
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "@babel/core": {
3
+ "name": "@babel/core",
4
+ "version": "^7.25.2",
5
+ "devOnly": true
6
+ },
7
+ "@babel/preset-env": {
8
+ "name": "@babel/preset-env",
9
+ "version": "^7.25.3",
10
+ "devOnly": true
11
+ },
12
+ "@babel/runtime": {
13
+ "name": "@babel/runtime",
14
+ "version": "^7.25.0",
15
+ "devOnly": true
16
+ },
17
+ "@callstack/repack": {
18
+ "name": "@callstack/repack",
19
+ "version": "^5.2.3",
20
+ "devOnly": true
21
+ },
22
+ "@react-native-community/cli": {
23
+ "name": "@react-native-community/cli",
24
+ "version": "20.0.0",
25
+ "devOnly": true
26
+ },
27
+ "@react-native-community/cli-platform-android": {
28
+ "name": "@react-native-community/cli-platform-android",
29
+ "version": "20.0.0",
30
+ "devOnly": true
31
+ },
32
+ "@react-native-community/cli-platform-ios": {
33
+ "name": "@react-native-community/cli-platform-ios",
34
+ "version": "20.0.0",
35
+ "devOnly": true
36
+ },
37
+ "@react-native/babel-preset": {
38
+ "name": "@react-native/babel-preset",
39
+ "version": "0.81.5",
40
+ "devOnly": true
41
+ },
42
+ "@react-native/eslint-config": {
43
+ "name": "@react-native/eslint-config",
44
+ "version": "0.81.5",
45
+ "devOnly": true
46
+ },
47
+ "@react-native/metro-config": {
48
+ "name": "@react-native/metro-config",
49
+ "version": "0.81.5",
50
+ "devOnly": true
51
+ },
52
+ "@react-native/typescript-config": {
53
+ "name": "@react-native/typescript-config",
54
+ "version": "0.81.5",
55
+ "devOnly": true
56
+ },
57
+ "@rspack/core": {
58
+ "name": "@rspack/core",
59
+ "version": "^1.3.4",
60
+ "devOnly": true
61
+ },
62
+ "@swc/helpers": {
63
+ "name": "@swc/helpers",
64
+ "version": "^0.5.17",
65
+ "devOnly": true
66
+ },
67
+ "@types/jest": {
68
+ "name": "@types/jest",
69
+ "version": "^29.5.13",
70
+ "devOnly": true
71
+ },
72
+ "@types/react": {
73
+ "name": "@types/react",
74
+ "version": "^19.1.0",
75
+ "devOnly": true
76
+ },
77
+ "@types/react-test-renderer": {
78
+ "name": "@types/react-test-renderer",
79
+ "version": "^19.1.0",
80
+ "devOnly": true
81
+ },
82
+ "eslint": {
83
+ "name": "eslint",
84
+ "version": "^8.19.0",
85
+ "devOnly": true
86
+ },
87
+ "jest": {
88
+ "name": "jest",
89
+ "version": "^29.6.3",
90
+ "devOnly": true
91
+ },
92
+ "prettier": {
93
+ "name": "prettier",
94
+ "version": "2.8.8",
95
+ "devOnly": true
96
+ },
97
+ "react-test-renderer": {
98
+ "name": "react-test-renderer",
99
+ "version": "19.1.0",
100
+ "devOnly": true
101
+ },
102
+ "typescript": {
103
+ "name": "typescript",
104
+ "version": "^5.8.3",
105
+ "devOnly": true
106
+ }
107
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Creates a final dependency preset to be used
3
+ * in the host/mini-apps by doing the following:
4
+ * - adds depenendencies from dependencies.json and devDependencies.json
5
+ * - adds the SDK as a dev dependency
6
+ * - adds the `super-app` as a capability
7
+ *
8
+ * We use `rnx-kit/align-deps` to align the dependencies.
9
+ * Learn more about it here: https://microsoft.github.io/rnx-kit/docs/guides/dependency-management
10
+ *
11
+ * How to use:
12
+ * 1. Add the following to your package.json:
13
+ * "rnx-kit": {
14
+ * "kitType": "app",
15
+ * "alignDeps": {
16
+ * "presets": [
17
+ * "./node_modules/super-app-sdk/preset"
18
+ * ],
19
+ * "requirements": [
20
+ * "super-app-sdk@0.0.1"
21
+ * ],
22
+ * "capabilities": [
23
+ * "super-app"
24
+ * ]
25
+ * }
26
+ * }
27
+ *
28
+ * 2. Run `rnx-align-deps` to check alignment of dependnecies or `rnx-align-deps --write` to align them.
29
+ */
30
+ const addSdkCapabilities = (dependencies, devDependencies) => {
31
+ const path = require("path");
32
+ const sdkPackagePath = path.resolve(__dirname, "..", "package.json");
33
+ const sdkPackageJson = require(sdkPackagePath);
34
+
35
+ const profile = {
36
+ ...dependencies,
37
+ ...devDependencies,
38
+ "super-app-sdk": {
39
+ name: "super-app-sdk",
40
+ version: sdkPackageJson.version,
41
+ devOnly: true,
42
+ },
43
+ };
44
+
45
+ return Object.assign(profile, {
46
+ "super-app": {
47
+ name: "#meta",
48
+ capabilities: Object.keys(profile),
49
+ },
50
+ });
51
+ };
52
+
53
+ module.exports = {
54
+ main: addSdkCapabilities(
55
+ require("./dependencies.json"),
56
+ require("./devDependencies.json"),
57
+ ),
58
+ };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Collect shared dependencies from the SDK and expose them
3
+ * for the ModuleFederationPluginV1.
4
+ *
5
+ * @param {{ eager: boolean }} options Options for the shared dependencies. Use eager: false if using in a mini-app.
6
+ * @returns Shared dependencies object.
7
+ */
8
+ const getSharedDependencies = ({ eager = true }) => {
9
+ const dependencies = require("./dependencies.json");
10
+
11
+ const shared = Object.entries(dependencies)
12
+ .filter(([dep, props]) => props.shared !== false)
13
+ .map(([dep, { version }]) => {
14
+ return [dep, { singleton: true, eager, requiredVersion: version }];
15
+ });
16
+ return Object.fromEntries(shared);
17
+ };
18
+
19
+ module.exports = getSharedDependencies;
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@eskea/super-app-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Dependency management & utils for the Super App",
5
+ "main": "index.js",
6
+ "files": [
7
+ "android",
8
+ "ios",
9
+ "lib",
10
+ "index.js",
11
+ "preset.js"
12
+ ],
13
+ "scripts": {
14
+ "test": "echo \"Error: no test specified\" && exit 1"
15
+ },
16
+ "keywords": [],
17
+ "author": "",
18
+ "license": "ISC",
19
+ "publishConfig": {
20
+ "registry": "https://registry.npmjs.org/",
21
+ "access": "public"
22
+ }
23
+ }
package/preset.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require("./lib/rnxPreset");