create-react-native-library 0.61.0 → 0.62.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.
Files changed (92) hide show
  1. package/bin/create-react-native-library +1 -1
  2. package/lib/package.json +69 -0
  3. package/lib/src/constants.d.ts +5 -0
  4. package/lib/src/constants.js +6 -0
  5. package/lib/src/constants.js.map +1 -0
  6. package/lib/src/exampleApp/dependencies.d.ts +8 -0
  7. package/lib/src/exampleApp/dependencies.js +34 -0
  8. package/lib/src/exampleApp/dependencies.js.map +1 -0
  9. package/lib/src/exampleApp/generateExampleApp.d.ts +6 -0
  10. package/lib/src/exampleApp/generateExampleApp.js +309 -0
  11. package/lib/src/exampleApp/generateExampleApp.js.map +1 -0
  12. package/lib/src/index.d.ts +1 -0
  13. package/lib/src/index.js +134 -0
  14. package/lib/src/index.js.map +1 -0
  15. package/lib/src/inform.d.ts +10 -0
  16. package/lib/src/inform.js +56 -0
  17. package/lib/src/inform.js.map +1 -0
  18. package/lib/src/prompt.d.ts +125 -0
  19. package/lib/src/prompt.js +325 -0
  20. package/lib/src/prompt.js.map +1 -0
  21. package/lib/src/template.d.ts +44 -0
  22. package/lib/src/template.js +258 -0
  23. package/lib/src/template.js.map +1 -0
  24. package/lib/src/utils/assert.d.ts +1 -0
  25. package/lib/src/utils/assert.js +17 -0
  26. package/lib/src/utils/assert.js.map +1 -0
  27. package/lib/src/utils/configureTools.d.ts +43 -0
  28. package/lib/src/utils/configureTools.js +122 -0
  29. package/lib/src/utils/configureTools.js.map +1 -0
  30. package/lib/src/utils/createMetadata.d.ts +4 -0
  31. package/lib/src/utils/createMetadata.js +23 -0
  32. package/lib/src/utils/createMetadata.js.map +1 -0
  33. package/lib/src/utils/initialCommit.d.ts +1 -0
  34. package/lib/src/utils/initialCommit.js +24 -0
  35. package/lib/src/utils/initialCommit.js.map +1 -0
  36. package/lib/src/utils/local.d.ts +5 -0
  37. package/lib/src/utils/local.js +49 -0
  38. package/lib/src/utils/local.js.map +1 -0
  39. package/lib/src/utils/packageManager.d.ts +1 -0
  40. package/lib/src/utils/packageManager.js +8 -0
  41. package/lib/src/utils/packageManager.js.map +1 -0
  42. package/lib/src/utils/resolveNpmPackageVersion.d.ts +1 -0
  43. package/lib/src/utils/resolveNpmPackageVersion.js +20 -0
  44. package/lib/src/utils/resolveNpmPackageVersion.js.map +1 -0
  45. package/lib/src/utils/sortObjectKeys.d.ts +1 -0
  46. package/lib/src/utils/sortObjectKeys.js +9 -0
  47. package/lib/src/utils/sortObjectKeys.js.map +1 -0
  48. package/lib/src/utils/spawn.d.ts +2 -0
  49. package/lib/src/utils/spawn.js +26 -0
  50. package/lib/src/utils/spawn.js.map +1 -0
  51. package/package.json +12 -10
  52. package/templates/common/$package.json +1 -1
  53. package/templates/common/tsconfig.json +0 -2
  54. package/templates/tools/eslint/~package.json +3 -3
  55. package/templates/tools/jest/~package.json +2 -2
  56. package/templates/tools/lefthook/~package.json +3 -3
  57. package/templates/tools/release-it/~package.json +2 -2
  58. package/templates/tools/turborepo/~package.json +1 -1
  59. package/templates/tools/vite/example/~package.json +1 -1
  60. package/templates/tools/vite/~package.json +1 -1
  61. package/lib/constants.js +0 -11
  62. package/lib/constants.js.map +0 -1
  63. package/lib/exampleApp/dependencies.js +0 -34
  64. package/lib/exampleApp/dependencies.js.map +0 -1
  65. package/lib/exampleApp/generateExampleApp.js +0 -209
  66. package/lib/exampleApp/generateExampleApp.js.map +0 -1
  67. package/lib/index.js +0 -129
  68. package/lib/index.js.map +0 -1
  69. package/lib/inform.js +0 -82
  70. package/lib/inform.js.map +0 -1
  71. package/lib/prompt.js +0 -307
  72. package/lib/prompt.js.map +0 -1
  73. package/lib/template.js +0 -258
  74. package/lib/template.js.map +0 -1
  75. package/lib/utils/assert.js +0 -22
  76. package/lib/utils/assert.js.map +0 -1
  77. package/lib/utils/configureTools.js +0 -137
  78. package/lib/utils/configureTools.js.map +0 -1
  79. package/lib/utils/createMetadata.js +0 -17
  80. package/lib/utils/createMetadata.js.map +0 -1
  81. package/lib/utils/initialCommit.js +0 -37
  82. package/lib/utils/initialCommit.js.map +0 -1
  83. package/lib/utils/local.js +0 -55
  84. package/lib/utils/local.js.map +0 -1
  85. package/lib/utils/packageManager.js +0 -13
  86. package/lib/utils/packageManager.js.map +0 -1
  87. package/lib/utils/resolveNpmPackageVersion.js +0 -22
  88. package/lib/utils/resolveNpmPackageVersion.js.map +0 -1
  89. package/lib/utils/sortObjectKeys.js +0 -15
  90. package/lib/utils/sortObjectKeys.js.map +0 -1
  91. package/lib/utils/spawn.js +0 -33
  92. package/lib/utils/spawn.js.map +0 -1
@@ -0,0 +1,258 @@
1
+ import path from 'node:path';
2
+ import ejs from 'ejs';
3
+ import fs from 'fs-extra';
4
+ const BINARIES = [
5
+ /(gradlew|\.(jar|keystore|png|jpg|gif))$/,
6
+ /\$\.yarn(?![a-z])/,
7
+ ];
8
+ const COMMON_FILES = path.resolve(import.meta.dirname, '../../templates/common');
9
+ const COMMON_LOCAL_FILES = path.resolve(import.meta.dirname, '../../templates/common-local');
10
+ const EXAMPLE_COMMON_FILES = path.resolve(import.meta.dirname, '../../templates/example-common');
11
+ const EXAMPLE_BARE_FILES = path.resolve(import.meta.dirname, '../../templates/example-bare');
12
+ const EXAMPLE_MODULE_NEW_FILES = path.resolve(import.meta.dirname, '../../templates/example-module-new');
13
+ const EXAMPLE_VIEW_FILES = path.resolve(import.meta.dirname, '../../templates/example-view');
14
+ const EXAMPLE_EXPO_FILES = path.resolve(import.meta.dirname, '../../templates/example-expo');
15
+ const JS_FILES = path.resolve(import.meta.dirname, '../../templates/js-library');
16
+ const JS_VIEW_FILES = path.resolve(import.meta.dirname, '../../templates/js-view');
17
+ const NATIVE_COMMON_FILES = path.resolve(import.meta.dirname, '../../templates/native-common');
18
+ const EXAMPLE_NATIVE_COMMON_FILES = path.resolve(import.meta.dirname, '../../templates/example-native-common');
19
+ const NITRO_COMMON_FILES = path.resolve(import.meta.dirname, '../../templates/nitro-common');
20
+ const CPP_FILES = path.resolve(import.meta.dirname, '../../templates/cpp-library');
21
+ const NATIVE_FILES = {
22
+ module_new: path.resolve(import.meta.dirname, '../../templates/native-library-new'),
23
+ view_new: path.resolve(import.meta.dirname, '../../templates/native-view-new'),
24
+ module_nitro: path.resolve(import.meta.dirname, '../../templates/nitro-module'),
25
+ view_nitro: path.resolve(import.meta.dirname, '../../templates/nitro-view'),
26
+ };
27
+ const OBJC_FILES = {
28
+ module_common: path.resolve(import.meta.dirname, '../../templates/objc-library'),
29
+ view_new: path.resolve(import.meta.dirname, '../../templates/objc-view-new'),
30
+ };
31
+ const KOTLIN_FILES = {
32
+ module_new: path.resolve(import.meta.dirname, '../../templates/kotlin-library-new'),
33
+ view_new: path.resolve(import.meta.dirname, '../../templates/kotlin-view-new'),
34
+ };
35
+ export function generateTemplateConfiguration({ versions, basename, answers, }) {
36
+ const { slug, languages, type } = answers;
37
+ const project = slug.replace(/^(react-native-|@[^/]+\/)/, '');
38
+ let namespace;
39
+ if (slug.startsWith('@') && slug.includes('/')) {
40
+ namespace = slug
41
+ .split('/')[0]
42
+ ?.replace(/[^a-z0-9]/g, '')
43
+ .toLowerCase();
44
+ }
45
+ // Create a package identifier with specified namespace when possible
46
+ const pack = `${namespace ? `${namespace}.` : ''}${project
47
+ .replace(/[^a-z0-9]/g, '')
48
+ .toLowerCase()}`;
49
+ return {
50
+ versions,
51
+ project: {
52
+ slug,
53
+ description: answers.description,
54
+ name: /^[A-Z]/.test(basename) && /^[a-z0-9]+$/i.test(basename)
55
+ ? // If the project name is already in PascalCase, use it as-is
56
+ basename
57
+ : // Otherwise, convert it to PascalCase and remove any non-alphanumeric characters
58
+ `${project.charAt(0).toUpperCase()}${project
59
+ .replace(/[^a-z0-9](\w)/g, (_, $1) => $1.toUpperCase())
60
+ .slice(1)}`,
61
+ package: pack,
62
+ package_dir: pack.replace(/\./g, path.sep),
63
+ package_cpp: pack.replace(/\./g, '_'),
64
+ identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),
65
+ native: languages !== 'js',
66
+ cpp: languages === 'cpp',
67
+ swift: languages === 'kotlin-swift',
68
+ viewConfig: getViewConfig(type),
69
+ moduleConfig: getModuleConfig(type),
70
+ },
71
+ author: {
72
+ name: answers.authorName,
73
+ email: answers.authorEmail,
74
+ url: answers.authorUrl,
75
+ },
76
+ repo: answers.repoUrl,
77
+ example: answers.example,
78
+ tools: answers.tools,
79
+ year: new Date().getFullYear(),
80
+ };
81
+ }
82
+ function getModuleConfig(projectType) {
83
+ switch (projectType) {
84
+ case 'nitro-module':
85
+ return 'nitro-modules';
86
+ case 'turbo-module':
87
+ return 'turbo-modules';
88
+ case 'fabric-view':
89
+ case 'library':
90
+ case 'nitro-view':
91
+ return null;
92
+ }
93
+ }
94
+ function getViewConfig(projectType) {
95
+ switch (projectType) {
96
+ case 'fabric-view':
97
+ return 'fabric-view';
98
+ case 'nitro-view':
99
+ return 'nitro-view';
100
+ case 'nitro-module':
101
+ case 'turbo-module':
102
+ case 'library':
103
+ default:
104
+ return null;
105
+ }
106
+ }
107
+ export async function applyTemplates(answers, config, folder) {
108
+ const { local } = answers;
109
+ if (local) {
110
+ await applyTemplate(config, COMMON_LOCAL_FILES, folder);
111
+ }
112
+ else {
113
+ await applyTemplate(config, COMMON_FILES, folder);
114
+ if (config.example != null) {
115
+ await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);
116
+ if (config.project.viewConfig !== null) {
117
+ await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);
118
+ }
119
+ else {
120
+ await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);
121
+ }
122
+ }
123
+ }
124
+ if (answers.languages === 'js') {
125
+ await applyTemplate(config, JS_FILES, folder);
126
+ if (config.example != null) {
127
+ if (config.example === 'expo') {
128
+ await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);
129
+ }
130
+ else {
131
+ await applyTemplate(config, EXAMPLE_BARE_FILES, folder);
132
+ }
133
+ }
134
+ }
135
+ else {
136
+ if (answers.languages === 'cpp') {
137
+ if (config.example === 'expo') {
138
+ await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);
139
+ if (config.project.native) {
140
+ await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);
141
+ }
142
+ }
143
+ else if (config.example != null) {
144
+ await applyTemplate(config, EXAMPLE_BARE_FILES, folder);
145
+ if (config.project.native) {
146
+ await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);
147
+ }
148
+ }
149
+ await applyTemplate(config, NATIVE_FILES['module_new'], folder);
150
+ await applyTemplate(config, CPP_FILES, folder);
151
+ if (config.example === 'expo' || config.tools.includes('vite')) {
152
+ await applyTemplate(config, JS_FILES, folder);
153
+ }
154
+ return;
155
+ }
156
+ await applyTemplate(config, NATIVE_COMMON_FILES, folder);
157
+ if (config.example === 'expo') {
158
+ await applyTemplate(config, EXAMPLE_EXPO_FILES, folder);
159
+ if (config.project.native) {
160
+ await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);
161
+ }
162
+ }
163
+ else if (config.example != null) {
164
+ await applyTemplate(config, EXAMPLE_BARE_FILES, folder);
165
+ if (config.project.native) {
166
+ await applyTemplate(config, EXAMPLE_NATIVE_COMMON_FILES, folder);
167
+ }
168
+ }
169
+ if (config.project.moduleConfig === 'nitro-modules') {
170
+ await applyTemplate(config, NITRO_COMMON_FILES, folder);
171
+ await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);
172
+ if (config.example === 'expo' || config.tools.includes('vite')) {
173
+ await applyTemplate(config, JS_FILES, folder);
174
+ }
175
+ return;
176
+ }
177
+ if (config.project.viewConfig === 'nitro-view') {
178
+ await applyTemplate(config, NITRO_COMMON_FILES, folder);
179
+ await applyTemplate(config, NATIVE_FILES['view_nitro'], folder);
180
+ if (config.example === 'expo' || config.tools.includes('vite')) {
181
+ await applyTemplate(config, JS_VIEW_FILES, folder);
182
+ }
183
+ return;
184
+ }
185
+ if (config.project.moduleConfig !== null) {
186
+ await applyTemplate(config, NATIVE_FILES[`module_new`], folder);
187
+ }
188
+ else {
189
+ await applyTemplate(config, NATIVE_FILES[`view_new`], folder);
190
+ }
191
+ if (config.project.moduleConfig !== null) {
192
+ await applyTemplate(config, OBJC_FILES[`module_common`], folder);
193
+ }
194
+ else {
195
+ await applyTemplate(config, OBJC_FILES[`view_new`], folder);
196
+ }
197
+ const templateType = `${config.project.moduleConfig !== null ? 'module' : 'view'}_new`;
198
+ await applyTemplate(config, KOTLIN_FILES[templateType], folder);
199
+ if (config.example === 'expo' || config.tools.includes('vite')) {
200
+ if (config.project.viewConfig !== null) {
201
+ await applyTemplate(config, JS_VIEW_FILES, folder);
202
+ }
203
+ else {
204
+ await applyTemplate(config, JS_FILES, folder);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ /**
210
+ * This copies the template files and renders them via ejs
211
+ */
212
+ export async function applyTemplate(config, source, destination) {
213
+ await fs.mkdirp(destination);
214
+ const files = await fs.readdir(source);
215
+ for (const f of files) {
216
+ if (f.startsWith('~')) {
217
+ continue;
218
+ }
219
+ let name;
220
+ try {
221
+ name = ejs.render(f.replace(/^\$/, ''), config, {
222
+ openDelimiter: '{',
223
+ closeDelimiter: '}',
224
+ });
225
+ }
226
+ catch (e) {
227
+ throw new Error(`Failed to render template file name: ${f}`, {
228
+ cause: e,
229
+ });
230
+ }
231
+ const target = path.join(destination, name);
232
+ const file = path.join(source, f);
233
+ const stats = await fs.stat(file);
234
+ if (stats.isDirectory()) {
235
+ await applyTemplate(config, file, target);
236
+ }
237
+ else if (!BINARIES.some((r) => r.test(file))) {
238
+ const content = await fs.readFile(file, 'utf8');
239
+ let result;
240
+ try {
241
+ result = ejs
242
+ .render(content, config)
243
+ // Make sure that line endings are 'lf' (Unix style)
244
+ .replace(/\r\n/g, '\n');
245
+ }
246
+ catch (e) {
247
+ throw new Error(`Failed to render template file content: ${f}`, {
248
+ cause: e,
249
+ });
250
+ }
251
+ await fs.writeFile(target, result);
252
+ }
253
+ else {
254
+ await fs.copyFile(file, target);
255
+ }
256
+ }
257
+ }
258
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function assertNpxExists(): Promise<void>;
@@ -0,0 +1,17 @@
1
+ import kleur from 'kleur';
2
+ import { spawn } from "./spawn.js";
3
+ export async function assertNpxExists() {
4
+ try {
5
+ await spawn('npx', ['--help']);
6
+ }
7
+ catch (error) {
8
+ // @ts-expect-error: TS doesn't know about `code`
9
+ if (error != null && error.code === 'ENOENT') {
10
+ throw new Error(`Couldn't find ${kleur.blue('npx')}! Please install it by running ${kleur.blue('npm install -g npx')}`);
11
+ }
12
+ else {
13
+ throw error;
14
+ }
15
+ }
16
+ }
17
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../../../src/utils/assert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iDAAiD;QACjD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,CAAC,IAAI,CACzB,KAAK,CACN,kCAAkC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CACtE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type TemplateConfiguration } from '../template.ts';
2
+ type PackageJson = {
3
+ dependencies?: Record<string, string>;
4
+ devDependencies?: Record<string, string>;
5
+ peerDependencies?: Record<string, string>;
6
+ [key: string]: unknown;
7
+ };
8
+ type Tool = {
9
+ name: string;
10
+ description: string;
11
+ condition?: (context: Pick<TemplateConfiguration, 'example'>) => boolean;
12
+ postprocess?: (options: {
13
+ config: TemplateConfiguration;
14
+ root: string;
15
+ }) => void | Promise<void>;
16
+ };
17
+ type Options = {
18
+ tools: string[];
19
+ root: string;
20
+ packageJson: PackageJson;
21
+ config: TemplateConfiguration;
22
+ };
23
+ export declare const AVAILABLE_TOOLS: {
24
+ readonly eslint: {
25
+ name: string;
26
+ description: string;
27
+ };
28
+ readonly jest: {
29
+ name: string;
30
+ description: string;
31
+ };
32
+ readonly lefthook: {
33
+ name: string;
34
+ description: string;
35
+ };
36
+ readonly 'release-it': {
37
+ name: string;
38
+ description: string;
39
+ };
40
+ readonly vite: Tool;
41
+ };
42
+ export declare function configureTools({ tools, config, root, packageJson, }: Options): Promise<void>;
43
+ export {};
@@ -0,0 +1,122 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import { applyTemplate } from "../template.js";
4
+ import sortObjectKeys from "./sortObjectKeys.js";
5
+ const ESLINT = {
6
+ name: 'ESLint with Prettier',
7
+ description: 'Lint and format code',
8
+ };
9
+ const LEFTHOOK = {
10
+ name: 'Lefthook with Commitlint',
11
+ description: 'Manage Git hooks and lint commit messages',
12
+ };
13
+ const RELEASE_IT = {
14
+ name: 'Release It',
15
+ description: 'Automate versioning and package publishing tasks',
16
+ };
17
+ const JEST = {
18
+ name: 'Jest',
19
+ description: 'Test JavaScript and TypeScript code',
20
+ };
21
+ const TURBOREPO = {
22
+ name: 'Turborepo',
23
+ description: 'Cache build outputs on CI',
24
+ };
25
+ const VITE = {
26
+ name: 'Vite',
27
+ description: 'Add web support to the example app',
28
+ condition: (config) => config.example != null && config.example !== 'expo',
29
+ postprocess: async ({ root }) => {
30
+ const examplePkgPath = path.join(root, 'example', 'package.json');
31
+ if (!fs.existsSync(examplePkgPath)) {
32
+ throw new Error("Couldn't find the example app's package.json.");
33
+ }
34
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
35
+ const examplePackageJson = (await fs.readJson(examplePkgPath));
36
+ const reactVersion = examplePackageJson.dependencies?.react ??
37
+ examplePackageJson.devDependencies?.react;
38
+ if (reactVersion == null) {
39
+ throw new Error("Couldn't find the package 'react' in the example app.");
40
+ }
41
+ examplePackageJson.dependencies = sortObjectKeys({
42
+ ...examplePackageJson.dependencies,
43
+ 'react-dom': reactVersion,
44
+ });
45
+ await fs.writeJson(examplePkgPath, examplePackageJson, { spaces: 2 });
46
+ },
47
+ };
48
+ export const AVAILABLE_TOOLS = {
49
+ eslint: ESLINT,
50
+ jest: JEST,
51
+ lefthook: LEFTHOOK,
52
+ 'release-it': RELEASE_IT,
53
+ vite: VITE,
54
+ };
55
+ const REQUIRED_TOOLS = {
56
+ turborepo: TURBOREPO,
57
+ };
58
+ const ALL_TOOLS = {
59
+ ...AVAILABLE_TOOLS,
60
+ ...REQUIRED_TOOLS,
61
+ };
62
+ export async function configureTools({ tools, config, root, packageJson, }) {
63
+ for (const key of [
64
+ ...tools,
65
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
66
+ ...Object.keys(REQUIRED_TOOLS),
67
+ ]) {
68
+ if (!(key in ALL_TOOLS)) {
69
+ throw new Error(`Invalid tool '${key}'. Available tools are: ${Object.keys(AVAILABLE_TOOLS).join(', ')}.`);
70
+ }
71
+ // @ts-expect-error: We checked the key above
72
+ const tool = ALL_TOOLS[key];
73
+ if (tool.condition && !tool.condition(config)) {
74
+ continue;
75
+ }
76
+ const toolDir = path.resolve(import.meta.dirname, `../../../templates/tools/${key}`);
77
+ if (fs.existsSync(toolDir)) {
78
+ await applyTemplate(config, toolDir, root);
79
+ }
80
+ const examplePkgPath = path.join(toolDir, 'example', '~package.json');
81
+ await mergePackageJsonTemplate(path.join(toolDir, '~package.json'), packageJson);
82
+ if (fs.existsSync(examplePkgPath)) {
83
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
84
+ const existingExamplePackageJson = (await fs.readJson(path.join(root, 'example', 'package.json')));
85
+ await mergePackageJsonTemplate(examplePkgPath, existingExamplePackageJson);
86
+ await fs.writeJson(path.join(root, 'example', 'package.json'), existingExamplePackageJson, {
87
+ spaces: 2,
88
+ });
89
+ }
90
+ await tool.postprocess?.({ config, root });
91
+ }
92
+ }
93
+ async function mergePackageJsonTemplate(templatePath, packageJson) {
94
+ if (!fs.existsSync(templatePath)) {
95
+ return;
96
+ }
97
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
98
+ const template = (await fs.readJson(templatePath));
99
+ for (const [field, value] of Object.entries(template)) {
100
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
101
+ if (typeof packageJson[field] === 'object' ||
102
+ packageJson[field] == null) {
103
+ packageJson[field] = {
104
+ ...packageJson[field],
105
+ ...value,
106
+ };
107
+ if (field === 'dependencies' ||
108
+ field === 'devDependencies' ||
109
+ field === 'peerDependencies') {
110
+ packageJson[field] = sortObjectKeys(packageJson[field]);
111
+ }
112
+ }
113
+ else {
114
+ throw new Error(`Cannot merge '${field}' field because it is not an object (got '${String(packageJson[field])}').`);
115
+ }
116
+ }
117
+ else {
118
+ packageJson[field] = value;
119
+ }
120
+ }
121
+ }
122
+ //# sourceMappingURL=configureTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureTools.js","sourceRoot":"","sources":["../../../src/utils/configureTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Answers } from '../prompt.ts';
2
+ export declare function createMetadata(answers: Partial<Answers>): {
3
+ [k: string]: string | boolean | string[];
4
+ };
@@ -0,0 +1,23 @@
1
+ import pack from '../../package.json' with { type: 'json' };
2
+ export function createMetadata(answers) {
3
+ // Some of the passed args can already be derived from the generated package.json file.
4
+ const ignoredAnswers = [
5
+ 'name',
6
+ 'directory',
7
+ 'slug',
8
+ 'description',
9
+ 'authorName',
10
+ 'authorEmail',
11
+ 'authorUrl',
12
+ 'repoUrl',
13
+ 'example',
14
+ 'reactNativeVersion',
15
+ 'local',
16
+ ];
17
+ const libraryMetadata = Object.fromEntries(Object.entries(answers).filter(([answer]) => !ignoredAnswers.includes(
18
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
19
+ answer)));
20
+ libraryMetadata.version = pack.version;
21
+ return libraryMetadata;
22
+ }
23
+ //# sourceMappingURL=createMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMetadata.js","sourceRoot":"","sources":["../../../src/utils/createMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAG5D,MAAM,UAAU,cAAc,CAAC,OAAyB;IACtD,uFAAuF;IACvF,MAAM,cAAc,GAAsB;QACxC,MAAM;QACN,WAAW;QACX,MAAM;QACN,aAAa;QACb,YAAY;QACZ,aAAa;QACb,WAAW;QACX,SAAS;QACT,SAAS;QACT,oBAAoB;QACpB,OAAO;KACR,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CACxC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAC5B,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CACX,CAAC,cAAc,CAAC,QAAQ;IACtB,uEAAuE;IACvE,MAAuB,CACxB,CACJ,CACF,CAAC;IAEF,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAEvC,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function createInitialGitCommit(folder: string, signal?: AbortSignal): Promise<void>;
@@ -0,0 +1,24 @@
1
+ import { spawn } from "./spawn.js";
2
+ export async function createInitialGitCommit(folder, signal) {
3
+ let isInGitRepo = false;
4
+ try {
5
+ isInGitRepo =
6
+ (await spawn('git', ['rev-parse', '--is-inside-work-tree'], {
7
+ cwd: folder,
8
+ signal,
9
+ })) === 'true';
10
+ }
11
+ catch (error) {
12
+ // Ignore errors
13
+ }
14
+ if (!isInGitRepo) {
15
+ await spawn('git', ['init'], { cwd: folder, signal });
16
+ await spawn('git', ['branch', '-M', 'main'], { cwd: folder, signal });
17
+ await spawn('git', ['add', '.'], { cwd: folder, signal });
18
+ await spawn('git', ['commit', '-m', 'chore: initial commit'], {
19
+ cwd: folder,
20
+ signal,
21
+ });
22
+ }
23
+ }
24
+ //# sourceMappingURL=initialCommit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialCommit.js","sourceRoot":"","sources":["../../../src/utils/initialCommit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,MAAoB;IAEpB,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,CAAC;QACH,WAAW;YACT,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,uBAAuB,CAAC,EAAE;gBAC1D,GAAG,EAAE,MAAM;gBACX,MAAM;aACP,CAAC,CAAC,KAAK,MAAM,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAgB;IAClB,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,uBAAuB,CAAC,EAAE;YAC5D,GAAG,EAAE,MAAM;YACX,MAAM;SACP,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { TemplateConfiguration } from '../template.ts';
2
+ /** @returns `true` if successfull */
3
+ export declare function addNitroDependencyToLocalLibrary(config: TemplateConfiguration): Promise<boolean>;
4
+ /** @returns `true` if successfull */
5
+ export declare function linkLocalLibrary(config: TemplateConfiguration, folder: string, packageManager: string): Promise<boolean>;
@@ -0,0 +1,49 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ /** @returns `true` if successfull */
4
+ export async function addNitroDependencyToLocalLibrary(config) {
5
+ if (config.versions.nitro === undefined) {
6
+ return false;
7
+ }
8
+ const appPackageJsonPath = await findAppPackageJsonPath();
9
+ if (appPackageJsonPath === null) {
10
+ return false;
11
+ }
12
+ const appPackageJson = await fs.readJson(appPackageJsonPath);
13
+ const dependencies = appPackageJson['dependencies'] ?? {};
14
+ dependencies['react-native-nitro-modules'] = config.versions.nitro;
15
+ appPackageJson['dependencies'] = dependencies;
16
+ await fs.writeJson(appPackageJsonPath, appPackageJson, {
17
+ spaces: 2,
18
+ });
19
+ return true;
20
+ }
21
+ /** @returns `true` if successfull */
22
+ export async function linkLocalLibrary(config, folder, packageManager) {
23
+ const appPackageJsonPath = await findAppPackageJsonPath();
24
+ if (appPackageJsonPath === null) {
25
+ return false;
26
+ }
27
+ const appPackageJson = await fs.readJson(appPackageJsonPath);
28
+ const isReactNativeProject = Boolean(appPackageJson.dependencies?.['react-native']);
29
+ if (!isReactNativeProject) {
30
+ return false;
31
+ }
32
+ const dependencies = appPackageJson['dependencies'] ?? {};
33
+ dependencies[config.project.slug] =
34
+ packageManager === 'yarn'
35
+ ? `link:./${path.relative(process.cwd(), folder)}`
36
+ : `file:./${path.relative(process.cwd(), folder)}`;
37
+ await fs.writeJSON(appPackageJsonPath, appPackageJson, {
38
+ spaces: 2,
39
+ });
40
+ return true;
41
+ }
42
+ async function findAppPackageJsonPath() {
43
+ const cwdPackageJson = path.join(process.cwd(), 'package.json');
44
+ if (!(await fs.pathExists(cwdPackageJson))) {
45
+ return null;
46
+ }
47
+ return cwdPackageJson;
48
+ }
49
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/utils/local.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAO1B,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,MAA6B;IAE7B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC1D,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,cAAc,GAAgB,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC1E,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAE1D,YAAY,CAAC,4BAA4B,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAEnE,cAAc,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;IAC9C,MAAM,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,cAAc,EAAE;QACrD,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA6B,EAC7B,MAAc,EACd,cAAsB;IAEtB,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC1D,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,cAAc,GAAgB,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAE1E,MAAM,oBAAoB,GAAG,OAAO,CAClC,cAAc,CAAC,YAAY,EAAE,CAAC,cAAc,CAAC,CAC9C,CAAC;IAEF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC1D,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/B,cAAc,KAAK,MAAM;YACvB,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE;YAClD,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;IAEvD,MAAM,EAAE,CAAC,SAAS,CAAC,kBAAkB,EAAE,cAAc,EAAE;QACrD,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAChE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function determinePackageManager(): Promise<"npm" | "yarn">;
@@ -0,0 +1,8 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ export async function determinePackageManager() {
4
+ return (await fs.pathExists(path.join(process.cwd(), 'yarn.lock')))
5
+ ? 'yarn'
6
+ : 'npm';
7
+ }
8
+ //# sourceMappingURL=packageManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageManager.js","sourceRoot":"","sources":["../../../src/utils/packageManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,OAAO,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function resolveNpmPackageVersion(name: string, fallback: string, timeout?: number): Promise<string>;
@@ -0,0 +1,20 @@
1
+ import { spawn } from "./spawn.js";
2
+ export async function resolveNpmPackageVersion(name, fallback, timeout = 1000) {
3
+ let result;
4
+ try {
5
+ const promise = spawn('npm', ['view', name, 'dist-tags.latest']);
6
+ result = await Promise.race([
7
+ new Promise((resolve) => {
8
+ setTimeout(() => {
9
+ resolve(fallback);
10
+ }, timeout);
11
+ }),
12
+ promise,
13
+ ]);
14
+ }
15
+ catch (e) {
16
+ result = fallback;
17
+ }
18
+ return result;
19
+ }
20
+ //# sourceMappingURL=resolveNpmPackageVersion.js.map