create-react-native-library 0.45.5 → 0.46.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.
package/lib/template.js CHANGED
@@ -55,7 +55,7 @@ function generateTemplateConfiguration({
55
55
  languages,
56
56
  type
57
57
  } = answers;
58
- const arch = type === 'legacy-module' || type === 'legacy-view' ? 'legacy' : 'new';
58
+ const arch = type === 'legacy-module' || type === 'legacy-view' || type === 'library' ? 'legacy' : 'new';
59
59
  const project = slug.replace(/^(react-native-|@[^/]+\/)/, '');
60
60
  let namespace;
61
61
  if (slug.startsWith('@') && slug.includes('/')) {
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","e","__esModule","default","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_LOCAL_FILES","EXAMPLE_COMMON_FILES","EXAMPLE_MODULE_LEGACY_FILES","EXAMPLE_MODULE_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","CPP_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_legacy","module_new","view_legacy","view_new","OBJC_FILES","module_common","KOTLIN_FILES","SWIFT_FILES","generateTemplateConfiguration","bobVersion","basename","answers","slug","languages","type","arch","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","bob","version","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","package_cpp","identifier","native","cpp","swift","view","endsWith","module","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","year","Date","getFullYear","applyTemplates","config","folder","local","applyTemplate","templateType","fs","remove","join","source","destination","mkdirp","files","readdir","f","target","ejs","render","openDelimiter","closeDelimiter","file","stats","stat","isDirectory","some","r","content","readFile","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, SupportedArchitecture } from './input';\n\n// Please think at least 5 times before introducing a new config key\n// You can just reuse the existing ones most of the time\nexport type TemplateConfiguration = {\n bob: {\n version: string;\n };\n project: {\n slug: string;\n description: string;\n name: string;\n package: string;\n package_dir: string;\n package_cpp: string;\n identifier: string;\n native: boolean;\n arch: SupportedArchitecture;\n cpp: boolean;\n swift: boolean;\n view: boolean;\n module: boolean;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n repo: string;\n example: ExampleApp;\n year: number;\n};\n\nconst BINARIES = [\n /(gradlew|\\.(jar|keystore|png|jpg|gif))$/,\n /\\$\\.yarn(?![a-z])/,\n];\n\nconst COMMON_FILES = path.resolve(__dirname, '../templates/common');\nconst COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local');\nconst EXAMPLE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/example-common'\n);\nconst EXAMPLE_MODULE_LEGACY_FILES = path.resolve(\n __dirname,\n '../templates/example-module-legacy'\n);\nconst EXAMPLE_MODULE_NEW_FILES = path.resolve(\n __dirname,\n '../templates/example-module-new'\n);\nconst EXAMPLE_VIEW_FILES = path.resolve(__dirname, '../templates/example-view');\n\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst EXPO_FILES = path.resolve(__dirname, '../templates/expo-library');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst NATIVE_COMMON_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/native-common-example'\n);\n\nconst NATIVE_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/native-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/native-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_legacy: path.resolve(__dirname, '../templates/objc-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/kotlin-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nconst SWIFT_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/swift-library-legacy'),\n view_legacy: path.resolve(__dirname, '../templates/swift-view-legacy'),\n} as const;\n\nexport function generateTemplateConfiguration({\n bobVersion,\n basename,\n answers,\n}: {\n bobVersion: string;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const arch =\n type === 'legacy-module' || type === 'legacy-view' ? 'legacy' : 'new';\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n let namespace: string | undefined;\n\n if (slug.startsWith('@') && slug.includes('/')) {\n namespace = slug\n .split('/')[0]\n ?.replace(/[^a-z0-9]/g, '')\n .toLowerCase();\n }\n\n // Create a package identifier with specified namespace when possible\n const pack = `${namespace ? `${namespace}.` : ''}${project\n .replace(/[^a-z0-9]/g, '')\n .toLowerCase()}`;\n\n return {\n bob: {\n version: bobVersion,\n },\n project: {\n slug,\n description: answers.description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, '/'),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n arch,\n cpp: languages === 'cpp',\n swift: languages === 'kotlin-swift',\n view: answers.type.endsWith('-view'),\n module: answers.type.endsWith('-module'),\n },\n author: {\n name: answers.authorName,\n email: answers.authorEmail,\n url: answers.authorUrl,\n },\n repo: answers.repoUrl,\n example: answers.example,\n year: new Date().getFullYear(),\n };\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\n if (local) {\n await applyTemplate(config, COMMON_LOCAL_FILES, folder);\n } else {\n await applyTemplate(config, COMMON_FILES, folder);\n\n if (config.example !== 'none') {\n await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);\n\n if (config.project.view) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n if (config.project.arch === 'legacy') {\n await applyTemplate(config, EXAMPLE_MODULE_LEGACY_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n await applyTemplate(config, EXPO_FILES, folder);\n } else {\n await applyTemplate(config, NATIVE_COMMON_FILES, folder);\n\n if (config.example !== 'none') {\n await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (config.project.module) {\n await applyTemplate(\n config,\n NATIVE_FILES[`module_${config.project.arch}`],\n folder\n );\n } else {\n await applyTemplate(\n config,\n NATIVE_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n\n if (config.project.swift) {\n await applyTemplate(config, SWIFT_FILES[`module_legacy`], folder);\n } else {\n if (config.project.module) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(\n config,\n OBJC_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n }\n\n const templateType = `${config.project.module ? 'module' : 'view'}_${\n config.project.arch\n }` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n\n if (config.project.cpp) {\n await applyTemplate(config, CPP_FILES, folder);\n await fs.remove(path.join(folder, 'ios', `${config.project.name}.m`));\n }\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nasync function applyTemplate(\n config: TemplateConfiguration,\n source: string,\n destination: string\n) {\n await fs.mkdirp(destination);\n\n const files = await fs.readdir(source);\n\n for (const f of files) {\n const target = path.join(\n destination,\n ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n })\n );\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await applyTemplate(config, file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n await fs.writeFile(target, ejs.render(content, config));\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"template.js","names":["_path","_interopRequireDefault","require","_fsExtra","_ejs","e","__esModule","default","BINARIES","COMMON_FILES","path","resolve","__dirname","COMMON_LOCAL_FILES","EXAMPLE_COMMON_FILES","EXAMPLE_MODULE_LEGACY_FILES","EXAMPLE_MODULE_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","CPP_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_legacy","module_new","view_legacy","view_new","OBJC_FILES","module_common","KOTLIN_FILES","SWIFT_FILES","generateTemplateConfiguration","bobVersion","basename","answers","slug","languages","type","arch","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","bob","version","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","package_cpp","identifier","native","cpp","swift","view","endsWith","module","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","year","Date","getFullYear","applyTemplates","config","folder","local","applyTemplate","templateType","fs","remove","join","source","destination","mkdirp","files","readdir","f","target","ejs","render","openDelimiter","closeDelimiter","file","stats","stat","isDirectory","some","r","content","readFile","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, SupportedArchitecture } from './input';\n\n// Please think at least 5 times before introducing a new config key\n// You can just reuse the existing ones most of the time\nexport type TemplateConfiguration = {\n bob: {\n version: string;\n };\n project: {\n slug: string;\n description: string;\n name: string;\n package: string;\n package_dir: string;\n package_cpp: string;\n identifier: string;\n native: boolean;\n arch: SupportedArchitecture;\n cpp: boolean;\n swift: boolean;\n view: boolean;\n module: boolean;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n repo: string;\n example: ExampleApp;\n year: number;\n};\n\nconst BINARIES = [\n /(gradlew|\\.(jar|keystore|png|jpg|gif))$/,\n /\\$\\.yarn(?![a-z])/,\n];\n\nconst COMMON_FILES = path.resolve(__dirname, '../templates/common');\nconst COMMON_LOCAL_FILES = path.resolve(__dirname, '../templates/common-local');\nconst EXAMPLE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/example-common'\n);\nconst EXAMPLE_MODULE_LEGACY_FILES = path.resolve(\n __dirname,\n '../templates/example-module-legacy'\n);\nconst EXAMPLE_MODULE_NEW_FILES = path.resolve(\n __dirname,\n '../templates/example-module-new'\n);\nconst EXAMPLE_VIEW_FILES = path.resolve(__dirname, '../templates/example-view');\n\nconst JS_FILES = path.resolve(__dirname, '../templates/js-library');\nconst EXPO_FILES = path.resolve(__dirname, '../templates/expo-library');\nconst CPP_FILES = path.resolve(__dirname, '../templates/cpp-library');\nconst NATIVE_COMMON_FILES = path.resolve(\n __dirname,\n '../templates/native-common'\n);\nconst NATIVE_COMMON_EXAMPLE_FILES = path.resolve(\n __dirname,\n '../templates/native-common-example'\n);\n\nconst NATIVE_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/native-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/native-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_legacy: path.resolve(__dirname, '../templates/objc-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/kotlin-library-legacy'),\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nconst SWIFT_FILES = {\n module_legacy: path.resolve(__dirname, '../templates/swift-library-legacy'),\n view_legacy: path.resolve(__dirname, '../templates/swift-view-legacy'),\n} as const;\n\nexport function generateTemplateConfiguration({\n bobVersion,\n basename,\n answers,\n}: {\n bobVersion: string;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\n\n const arch =\n type === 'legacy-module' || type === 'legacy-view' || type === 'library'\n ? 'legacy'\n : 'new';\n\n const project = slug.replace(/^(react-native-|@[^/]+\\/)/, '');\n let namespace: string | undefined;\n\n if (slug.startsWith('@') && slug.includes('/')) {\n namespace = slug\n .split('/')[0]\n ?.replace(/[^a-z0-9]/g, '')\n .toLowerCase();\n }\n\n // Create a package identifier with specified namespace when possible\n const pack = `${namespace ? `${namespace}.` : ''}${project\n .replace(/[^a-z0-9]/g, '')\n .toLowerCase()}`;\n\n return {\n bob: {\n version: bobVersion,\n },\n project: {\n slug,\n description: answers.description,\n name:\n /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)\n ? // If the project name is already in PascalCase, use it as-is\n basename\n : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters\n `${project.charAt(0).toUpperCase()}${project\n .replace(/[^a-z0-9](\\w)/g, (_, $1) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, '/'),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n arch,\n cpp: languages === 'cpp',\n swift: languages === 'kotlin-swift',\n view: answers.type.endsWith('-view'),\n module: answers.type.endsWith('-module'),\n },\n author: {\n name: answers.authorName,\n email: answers.authorEmail,\n url: answers.authorUrl,\n },\n repo: answers.repoUrl,\n example: answers.example,\n year: new Date().getFullYear(),\n };\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\n if (local) {\n await applyTemplate(config, COMMON_LOCAL_FILES, folder);\n } else {\n await applyTemplate(config, COMMON_FILES, folder);\n\n if (config.example !== 'none') {\n await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);\n\n if (config.project.view) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n if (config.project.arch === 'legacy') {\n await applyTemplate(config, EXAMPLE_MODULE_LEGACY_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\n }\n }\n }\n }\n\n if (answers.languages === 'js') {\n await applyTemplate(config, JS_FILES, folder);\n await applyTemplate(config, EXPO_FILES, folder);\n } else {\n await applyTemplate(config, NATIVE_COMMON_FILES, folder);\n\n if (config.example !== 'none') {\n await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (config.project.module) {\n await applyTemplate(\n config,\n NATIVE_FILES[`module_${config.project.arch}`],\n folder\n );\n } else {\n await applyTemplate(\n config,\n NATIVE_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n\n if (config.project.swift) {\n await applyTemplate(config, SWIFT_FILES[`module_legacy`], folder);\n } else {\n if (config.project.module) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(\n config,\n OBJC_FILES[`view_${config.project.arch}`],\n folder\n );\n }\n }\n\n const templateType = `${config.project.module ? 'module' : 'view'}_${\n config.project.arch\n }` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n\n if (config.project.cpp) {\n await applyTemplate(config, CPP_FILES, folder);\n await fs.remove(path.join(folder, 'ios', `${config.project.name}.m`));\n }\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nasync function applyTemplate(\n config: TemplateConfiguration,\n source: string,\n destination: string\n) {\n await fs.mkdirp(destination);\n\n const files = await fs.readdir(source);\n\n for (const f of files) {\n const target = path.join(\n destination,\n ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n })\n );\n\n const file = path.join(source, f);\n const stats = await fs.stat(file);\n\n if (stats.isDirectory()) {\n await applyTemplate(config, file, target);\n } else if (!BINARIES.some((r) => r.test(file))) {\n const content = await fs.readFile(file, 'utf8');\n\n await fs.writeFile(target, ejs.render(content, config));\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-react-native-library",
3
- "version": "0.45.5",
3
+ "version": "0.46.0",
4
4
  "description": "CLI to scaffold React Native libraries",
5
5
  "keywords": [
6
6
  "react-native",
@@ -65,5 +65,5 @@
65
65
  "@types/validate-npm-package-name": "^3.0.3",
66
66
  "@types/yargs": "^17.0.10"
67
67
  },
68
- "gitHead": "a0ca7d2626d730080fb7f5b6f9291244b0cd711d"
68
+ "gitHead": "0bacd58eab2ce56f20be84009aa6f4315dd95c52"
69
69
  }
@@ -0,0 +1,68 @@
1
+ name: 🐛 Bug report
2
+ description: Report a reproducible bug or regression in this library.
3
+ labels: [bug]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ # Bug report
9
+
10
+ 👋 Hi!
11
+
12
+ **Please fill the following carefully before opening a new issue ❗**
13
+ *(Your issue may be closed if it doesn't provide the required pieces of information)*
14
+ - type: checkboxes
15
+ attributes:
16
+ label: Before submitting a new issue
17
+ description: Please perform simple checks first.
18
+ options:
19
+ - label: I tested using the latest version of the library, as the bug might be already fixed.
20
+ required: true
21
+ - label: I tested using a [supported version](https://github.com/reactwg/react-native-releases/blob/main/docs/support.md) of react native.
22
+ required: true
23
+ - label: I checked for possible duplicate issues, with possible answers.
24
+ required: true
25
+ - type: textarea
26
+ id: summary
27
+ attributes:
28
+ label: Bug summary
29
+ description: |
30
+ Provide a clear and concise description of what the bug is.
31
+ If needed, you can also provide other samples: error messages / stack traces, screenshots, gifs, etc.
32
+ validations:
33
+ required: true
34
+ - type: input
35
+ id: library-version
36
+ attributes:
37
+ label: Library version
38
+ description: What version of the library are you using?
39
+ placeholder: "x.x.x"
40
+ validations:
41
+ required: true
42
+ - type: textarea
43
+ id: react-native-info
44
+ attributes:
45
+ label: Environment info
46
+ description: Run `react-native info` in your terminal and paste the results here.
47
+ render: shell
48
+ validations:
49
+ required: true
50
+ - type: textarea
51
+ id: steps-to-reproduce
52
+ attributes:
53
+ label: Steps to reproduce
54
+ description: |
55
+ You must provide a clear list of steps and code to reproduce the problem.
56
+ value: |
57
+ 1. …
58
+ 2. …
59
+ validations:
60
+ required: true
61
+ - type: input
62
+ id: reproducible-example
63
+ attributes:
64
+ label: Reproducible example repository
65
+ description: Please provide a link to a repository on GitHub with a reproducible example.
66
+ render: js
67
+ validations:
68
+ required: true
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Feature Request 💡
4
+ url: <%- repo -%>/discussions/new?category=ideas
5
+ about: If you have a feature request, please create a new discussion on GitHub.
6
+ - name: Discussions on GitHub 💬
7
+ url: <%- repo -%>/discussions
8
+ about: If this library works as promised but you need help, please ask questions there.
@@ -9,9 +9,9 @@ runs:
9
9
  with:
10
10
  node-version-file: .nvmrc
11
11
 
12
- - name: Cache dependencies
12
+ - name: Restore dependencies
13
13
  id: yarn-cache
14
- uses: actions/cache@v3
14
+ uses: actions/cache/restore@v4
15
15
  with:
16
16
  path: |
17
17
  **/node_modules
@@ -25,3 +25,12 @@ runs:
25
25
  if: steps.yarn-cache.outputs.cache-hit != 'true'
26
26
  run: yarn install --immutable
27
27
  shell: bash
28
+
29
+ - name: Cache dependencies
30
+ if: steps.yarn-cache.outputs.cache-hit != 'true'
31
+ uses: actions/cache/save@v4
32
+ with:
33
+ path: |
34
+ **/node_modules
35
+ .yarn/install-state.gz
36
+ key: ${{ steps.yarn-cache.outputs.cache-primary-key }}
@@ -63,7 +63,7 @@ jobs:
63
63
  uses: ./.github/actions/setup
64
64
 
65
65
  - name: Cache turborepo for Android
66
- uses: actions/cache@v3
66
+ uses: actions/cache@v4
67
67
  with:
68
68
  path: ${{ env.TURBO_CACHE_DIR }}
69
69
  key: ${{ runner.os }}-turborepo-android-${{ hashFiles('yarn.lock') }}
@@ -92,7 +92,7 @@ jobs:
92
92
 
93
93
  - name: Cache Gradle
94
94
  if: env.turbo_cache_hit != 1
95
- uses: actions/cache@v3
95
+ uses: actions/cache@v4
96
96
  with:
97
97
  path: |
98
98
  ~/.gradle/wrapper
@@ -108,7 +108,7 @@ jobs:
108
108
  yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}"
109
109
 
110
110
  build-ios:
111
- runs-on: macos-14
111
+ runs-on: macos-latest
112
112
  env:
113
113
  TURBO_CACHE_DIR: .turbo/ios
114
114
  steps:
@@ -119,7 +119,7 @@ jobs:
119
119
  uses: ./.github/actions/setup
120
120
 
121
121
  - name: Cache turborepo for iOS
122
- uses: actions/cache@v3
122
+ uses: actions/cache@v4
123
123
  with:
124
124
  path: ${{ env.TURBO_CACHE_DIR }}
125
125
  key: ${{ runner.os }}-turborepo-ios-${{ hashFiles('yarn.lock') }}
@@ -134,10 +134,10 @@ jobs:
134
134
  echo "turbo_cache_hit=1" >> $GITHUB_ENV
135
135
  fi
136
136
 
137
- - name: Cache cocoapods
137
+ - name: Restore cocoapods
138
138
  if: env.turbo_cache_hit != 1
139
139
  id: cocoapods-cache
140
- uses: actions/cache@v3
140
+ uses: actions/cache/restore@v4
141
141
  with:
142
142
  path: |
143
143
  **/ios/Pods
@@ -153,6 +153,14 @@ jobs:
153
153
  env:
154
154
  NO_FLIPPER: 1
155
155
 
156
+ - name: Cache cocoapods
157
+ if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true'
158
+ uses: actions/cache/save@v4
159
+ with:
160
+ path: |
161
+ **/ios/Pods
162
+ key: ${{ steps.cocoapods-cache.outputs.cache-key }}
163
+
156
164
  - name: Build example for iOS
157
165
  run: |
158
166
  yarn turbo run build:ios --cache-dir="${{ env.TURBO_CACHE_DIR }}"
@@ -1,6 +1,7 @@
1
- import { useState, useEffect } from 'react';
2
- import { Text, View, StyleSheet } from 'react-native';
3
1
  import { multiply } from '<%- project.slug -%>';
2
+ import { Text, View, StyleSheet } from 'react-native';
3
+ <% if (project.native) { -%>
4
+ import { useState, useEffect } from 'react';
4
5
 
5
6
  export default function App() {
6
7
  const [result, setResult] = useState<number | undefined>();
@@ -9,6 +10,12 @@ export default function App() {
9
10
  multiply(3, 7).then(setResult);
10
11
  }, []);
11
12
 
13
+ <% } else { -%>
14
+
15
+ const result = multiply(3, 7);
16
+
17
+ export default function App() {
18
+ <% } -%>
12
19
  return (
13
20
  <View style={styles.container}>
14
21
  <Text>Result: {result}</Text>
@@ -24,7 +24,6 @@ class <%- project.name -%>Package : BaseReactPackage() {
24
24
  <%- project.name -%>Module.NAME,
25
25
  false, // canOverrideExistingModule
26
26
  false, // needsEagerInit
27
- true, // hasConstants
28
27
  false, // isCxxModule
29
28
  true // isTurboModule
30
29
  )