create-expo-module 0.9.1 → 0.9.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.
|
@@ -51,7 +51,7 @@ async function getCorrectLocalDirectory(targetOrSlug) {
|
|
|
51
51
|
* The main function of the command.
|
|
52
52
|
*
|
|
53
53
|
* @param target Path to the directory where to create the module. Defaults to current working dir.
|
|
54
|
-
* @param
|
|
54
|
+
* @param options An options object for `commander`.
|
|
55
55
|
*/
|
|
56
56
|
async function main(target, options) {
|
|
57
57
|
if (options.local) {
|
|
@@ -76,7 +76,7 @@ async function main(target, options) {
|
|
|
76
76
|
const packagePath = options.source
|
|
77
77
|
? path_1.default.join(CWD, options.source)
|
|
78
78
|
: await downloadPackageAsync(targetDir, options.local);
|
|
79
|
-
(0, telemetry_1.logEventAsync)((0, telemetry_1.eventCreateExpoModule)(packageManager, options));
|
|
79
|
+
await (0, telemetry_1.logEventAsync)((0, telemetry_1.eventCreateExpoModule)(packageManager, options));
|
|
80
80
|
await (0, ora_1.newStep)('Creating the module from template files', async (step) => {
|
|
81
81
|
await createModuleFromTemplate(packagePath, targetDir, data);
|
|
82
82
|
step.succeed('Created the module from template files');
|
|
@@ -123,8 +123,8 @@ async function main(target, options) {
|
|
|
123
123
|
step.warn('Could not create an empty Git repository, see debug logs with EXPO_DEBUG=true');
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
catch (
|
|
127
|
-
step.fail(
|
|
126
|
+
catch (error) {
|
|
127
|
+
step.fail(error.toString());
|
|
128
128
|
}
|
|
129
129
|
});
|
|
130
130
|
}
|
|
@@ -205,20 +205,22 @@ async function getTemplateVersion(isLocal) {
|
|
|
205
205
|
async function downloadPackageAsync(targetDir, isLocal = false) {
|
|
206
206
|
return await (0, ora_1.newStep)('Downloading module template from npm', async (step) => {
|
|
207
207
|
const templateVersion = await getTemplateVersion(isLocal);
|
|
208
|
-
|
|
208
|
+
const packageName = isLocal ? 'expo-module-template-local' : 'expo-module-template';
|
|
209
209
|
try {
|
|
210
|
-
|
|
210
|
+
await (0, download_tarball_1.default)({
|
|
211
|
+
url: await getNpmTarballUrl(packageName, templateVersion),
|
|
212
|
+
dir: targetDir,
|
|
213
|
+
});
|
|
211
214
|
}
|
|
212
215
|
catch {
|
|
213
216
|
console.log();
|
|
214
217
|
console.warn(chalk_1.default.yellow("Couldn't download the versioned template from npm, falling back to the latest version."));
|
|
215
|
-
|
|
218
|
+
await (0, download_tarball_1.default)({
|
|
219
|
+
url: await getNpmTarballUrl(packageName, 'latest'),
|
|
220
|
+
dir: targetDir,
|
|
221
|
+
});
|
|
216
222
|
}
|
|
217
|
-
|
|
218
|
-
url: tarballUrl,
|
|
219
|
-
dir: targetDir,
|
|
220
|
-
});
|
|
221
|
-
step.succeed('Downloaded module template from npm');
|
|
223
|
+
step.succeed('Downloaded module template from npm registry.');
|
|
222
224
|
return path_1.default.join(targetDir, 'package');
|
|
223
225
|
});
|
|
224
226
|
}
|
|
@@ -257,7 +259,7 @@ async function createGitRepositoryAsync(targetDir) {
|
|
|
257
259
|
stdio: 'ignore',
|
|
258
260
|
cwd: targetDir,
|
|
259
261
|
});
|
|
260
|
-
debug(chalk_1.default.dim('New project is already inside of a Git
|
|
262
|
+
debug(chalk_1.default.dim('New project is already inside of a Git repository, skipping `git init`.'));
|
|
261
263
|
return null;
|
|
262
264
|
}
|
|
263
265
|
catch (e) {
|
|
@@ -356,7 +358,7 @@ function printFurtherInstructions(targetDir, packageManager, includesExample) {
|
|
|
356
358
|
(0, resolvePackageManager_1.formatRunCommand)(packageManager, 'open:android'),
|
|
357
359
|
];
|
|
358
360
|
console.log();
|
|
359
|
-
console.log('To start developing your module, navigate to the directory and open
|
|
361
|
+
console.log('To start developing your module, navigate to the directory and open Android and iOS projects of the example app');
|
|
360
362
|
commands.forEach((command) => console.log(chalk_1.default.gray('>'), chalk_1.default.bold(command)));
|
|
361
363
|
console.log();
|
|
362
364
|
}
|
|
@@ -365,8 +367,8 @@ function printFurtherInstructions(targetDir, packageManager, includesExample) {
|
|
|
365
367
|
function printFurtherLocalInstructions(slug, name) {
|
|
366
368
|
console.log();
|
|
367
369
|
console.log(`You can now import this module inside your application.`);
|
|
368
|
-
console.log(`For example, you can add this line to your App.
|
|
369
|
-
console.log(`${chalk_1.default.gray.italic(`import ${name} './modules/${slug}';`)}`);
|
|
370
|
+
console.log(`For example, you can add this line to your App.tsx or App.js file:`);
|
|
371
|
+
console.log(`${chalk_1.default.gray.italic(`import ${name} from './modules/${slug}';`)}`);
|
|
370
372
|
console.log();
|
|
371
373
|
console.log(`Learn more on Expo Modules APIs: ${chalk_1.default.blue.bold(DOCS_URL)}`);
|
|
372
374
|
console.log(chalk_1.default.yellow(`Remember to re-build your native app (for example, with ${chalk_1.default.bold('npx expo run')}) when you make changes to the module. Native code changes are not reloaded with Fast Refresh.`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-expo-module.js","sourceRoot":"","sources":["../src/create-expo-module.ts"],"names":[],"mappings":"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","sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport downloadTarball from 'download-tarball';\nimport ejs from 'ejs';\nimport findUp from 'find-up';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport prompts from 'prompts';\n\nimport { createExampleApp } from './createExampleApp';\nimport { installDependencies } from './packageManager';\nimport {\n getLocalFolderNamePrompt,\n getLocalSubstitutionDataPrompts,\n getSlugPrompt,\n getSubstitutionDataPrompts,\n} from './prompts';\nimport {\n formatRunCommand,\n PackageManagerName,\n resolvePackageManager,\n} from './resolvePackageManager';\nimport { eventCreateExpoModule, getTelemetryClient, logEventAsync } from './telemetry';\nimport { CommandOptions, LocalSubstitutionData, SubstitutionData } from './types';\nimport { newStep } from './utils/ora';\n\nconst debug = require('debug')('create-expo-module:main') as typeof console.log;\nconst packageJson = require('../package.json');\n\n// Opt in to using beta versions\nconst EXPO_BETA = boolish('EXPO_BETA', false);\n\n// `yarn run` may change the current working dir, then we should use `INIT_CWD` env.\nconst CWD = process.env.INIT_CWD || process.cwd();\n\n// Ignore some paths. Especially `package.json` as it is rendered\n// from `$package.json` file instead of the original one.\nconst IGNORES_PATHS = [\n '.DS_Store',\n 'build',\n 'node_modules',\n 'package.json',\n '.npmignore',\n '.gitignore',\n];\n\n// Url to the documentation on Expo Modules\nconst DOCS_URL = 'https://docs.expo.dev/modules';\n\nconst FYI_LOCAL_DIR = 'https://expo.fyi/expo-module-local-autolinking.md';\n\nasync function getCorrectLocalDirectory(targetOrSlug: string) {\n const packageJsonPath = await findUp('package.json', { cwd: CWD });\n if (!packageJsonPath) {\n console.log(\n chalk.red.bold(\n '⚠️ This command should be run inside your Expo project when run with the --local flag.'\n )\n );\n console.log(\n chalk.red(\n 'For native modules to autolink correctly, you need to place them in the `modules` directory in the root of the project.'\n )\n );\n return null;\n }\n return path.join(packageJsonPath, '..', 'modules', targetOrSlug);\n}\n\n/**\n * The main function of the command.\n *\n * @param target Path to the directory where to create the module. Defaults to current working dir.\n * @param command An object from `commander`.\n */\nasync function main(target: string | undefined, options: CommandOptions) {\n if (options.local) {\n console.log();\n console.log(\n `${chalk.gray('The local module will be created in the ')}${chalk.gray.bold.italic(\n 'modules'\n )} ${chalk.gray('directory in the root of your project. Learn more: ')}${chalk.gray.bold(\n FYI_LOCAL_DIR\n )}`\n );\n console.log();\n }\n const slug = await askForPackageSlugAsync(target, options.local);\n const targetDir = options.local\n ? await getCorrectLocalDirectory(target || slug)\n : path.join(CWD, target || slug);\n\n if (!targetDir) {\n return;\n }\n await fs.promises.mkdir(targetDir, { recursive: true });\n await confirmTargetDirAsync(targetDir);\n\n options.target = targetDir;\n\n const data = await askForSubstitutionDataAsync(slug, options.local);\n\n // Make one line break between prompts and progress logs\n console.log();\n\n const packageManager = resolvePackageManager();\n const packagePath = options.source\n ? path.join(CWD, options.source)\n : await downloadPackageAsync(targetDir, options.local);\n\n logEventAsync(eventCreateExpoModule(packageManager, options));\n\n await newStep('Creating the module from template files', async (step) => {\n await createModuleFromTemplate(packagePath, targetDir, data);\n step.succeed('Created the module from template files');\n });\n if (!options.local) {\n await newStep('Installing module dependencies', async (step) => {\n await installDependencies(packageManager, targetDir);\n step.succeed('Installed module dependencies');\n });\n await newStep('Compiling TypeScript files', async (step) => {\n await spawnAsync(packageManager, ['run', 'build'], {\n cwd: targetDir,\n stdio: 'ignore',\n });\n step.succeed('Compiled TypeScript files');\n });\n }\n\n if (!options.source) {\n // Files in the downloaded tarball are wrapped in `package` dir.\n // We should remove it after all.\n await fs.promises.rm(packagePath, { recursive: true, force: true });\n }\n if (!options.local && data.type !== 'local') {\n if (!options.withReadme) {\n await fs.promises.rm(path.join(targetDir, 'README.md'), { force: true });\n }\n if (!options.withChangelog) {\n await fs.promises.rm(path.join(targetDir, 'CHANGELOG.md'), { force: true });\n }\n if (options.example) {\n // Create \"example\" folder\n await createExampleApp(data, targetDir, packageManager);\n }\n\n await newStep('Creating an empty Git repository', async (step) => {\n try {\n const result = await createGitRepositoryAsync(targetDir);\n if (result) {\n step.succeed('Created an empty Git repository');\n } else if (result === null) {\n step.succeed('Skipped creating an empty Git repository, already within a Git repository');\n } else if (result === false) {\n step.warn(\n 'Could not create an empty Git repository, see debug logs with EXPO_DEBUG=true'\n );\n }\n } catch (e: any) {\n step.fail(e.toString());\n }\n });\n }\n\n console.log();\n if (options.local) {\n console.log(`✅ Successfully created Expo module in ${chalk.bold.italic(`modules/${slug}`)}`);\n printFurtherLocalInstructions(slug, data.project.moduleName);\n } else {\n console.log('✅ Successfully created Expo module');\n printFurtherInstructions(targetDir, packageManager, options.example);\n }\n}\n\n/**\n * Recursively scans for the files within the directory. Returned paths are relative to the `root` path.\n */\nasync function getFilesAsync(root: string, dir: string | null = null): Promise<string[]> {\n const files: string[] = [];\n const baseDir = dir ? path.join(root, dir) : root;\n\n for (const file of await fs.promises.readdir(baseDir)) {\n const relativePath = dir ? path.join(dir, file) : file;\n\n if (IGNORES_PATHS.includes(relativePath) || IGNORES_PATHS.includes(file)) {\n continue;\n }\n\n const fullPath = path.join(baseDir, file);\n const stat = await fs.promises.lstat(fullPath);\n if (stat.isDirectory()) {\n files.push(...(await getFilesAsync(root, relativePath)));\n } else {\n files.push(relativePath);\n }\n }\n return files;\n}\n\n/**\n * Asks NPM registry for the url to the tarball.\n */\nasync function getNpmTarballUrl(packageName: string, version: string = 'latest'): Promise<string> {\n debug(`Using module template ${chalk.bold(packageName)}@${chalk.bold(version)}`);\n const { stdout } = await spawnAsync('npm', ['view', `${packageName}@${version}`, 'dist.tarball']);\n return stdout.trim();\n}\n\n/**\n * Gets expo SDK version major from the local package.json.\n */\nasync function getLocalSdkMajorVersion(): Promise<string | null> {\n const path = require.resolve('expo/package.json', { paths: [process.cwd()] });\n if (!path) {\n return null;\n }\n const { version } = require(path) ?? {};\n return version?.split('.')[0] ?? null;\n}\n\n/**\n * Selects correct version of the template based on the SDK version for local modules and EXPO_BETA flag.\n */\nasync function getTemplateVersion(isLocal: boolean) {\n if (EXPO_BETA) {\n return 'next';\n }\n if (!isLocal) {\n return 'latest';\n }\n try {\n const sdkVersionMajor = await getLocalSdkMajorVersion();\n return sdkVersionMajor ? `sdk-${sdkVersionMajor}` : 'latest';\n } catch {\n console.log();\n console.warn(\n chalk.yellow(\n \"Couldn't determine the SDK version from the local project, using `latest` as the template version.\"\n )\n );\n return 'latest';\n }\n}\n\n/**\n * Downloads the template from NPM registry.\n */\nasync function downloadPackageAsync(targetDir: string, isLocal = false): Promise<string> {\n return await newStep('Downloading module template from npm', async (step) => {\n const templateVersion = await getTemplateVersion(isLocal);\n let tarballUrl: string | null = null;\n try {\n tarballUrl = await getNpmTarballUrl(\n isLocal ? 'expo-module-template-local' : 'expo-module-template',\n templateVersion\n );\n } catch {\n console.log();\n console.warn(\n chalk.yellow(\n \"Couldn't download the versioned template from npm, falling back to the latest version.\"\n )\n );\n tarballUrl = await getNpmTarballUrl(\n isLocal ? 'expo-module-template-local' : 'expo-module-template',\n 'latest'\n );\n }\n\n await downloadTarball({\n url: tarballUrl,\n dir: targetDir,\n });\n\n step.succeed('Downloaded module template from npm');\n\n return path.join(targetDir, 'package');\n });\n}\n\nfunction handleSuffix(name: string, suffix: string): string {\n if (name.endsWith(suffix)) {\n return name;\n }\n return `${name}${suffix}`;\n}\n\n/**\n * Creates the module based on the `ejs` template (e.g. `expo-module-template` package).\n */\nasync function createModuleFromTemplate(\n templatePath: string,\n targetPath: string,\n data: SubstitutionData | LocalSubstitutionData\n) {\n const files = await getFilesAsync(templatePath);\n\n // Iterate through all template files.\n for (const file of files) {\n const renderedRelativePath = ejs.render(file.replace(/^\\$/, ''), data, {\n openDelimiter: '{',\n closeDelimiter: '}',\n escape: (value: string) => value.replace(/\\./g, path.sep),\n });\n const fromPath = path.join(templatePath, file);\n const toPath = path.join(targetPath, renderedRelativePath);\n const template = await fs.promises.readFile(fromPath, 'utf8');\n const renderedContent = ejs.render(template, data);\n\n if (!fs.existsSync(path.dirname(toPath))) {\n await fs.promises.mkdir(path.dirname(toPath), { recursive: true });\n }\n await fs.promises.writeFile(toPath, renderedContent, 'utf8');\n }\n}\n\nasync function createGitRepositoryAsync(targetDir: string) {\n // Check if we are inside a git repository already\n try {\n await spawnAsync('git', ['rev-parse', '--is-inside-work-tree'], {\n stdio: 'ignore',\n cwd: targetDir,\n });\n debug(chalk.dim('New project is already inside of a Git repo, skipping git init.'));\n return null;\n } catch (e: any) {\n if (e.errno === 'ENOENT') {\n debug(chalk.dim('Unable to initialize Git repo. `git` not in $PATH.'));\n return false;\n }\n }\n\n // Create a new git repository\n await spawnAsync('git', ['init'], { stdio: 'ignore', cwd: targetDir });\n await spawnAsync('git', ['add', '-A'], { stdio: 'ignore', cwd: targetDir });\n\n const commitMsg = `Initial commit\\n\\nGenerated by ${packageJson.name} ${packageJson.version}.`;\n await spawnAsync('git', ['commit', '-m', commitMsg], {\n stdio: 'ignore',\n cwd: targetDir,\n });\n\n debug(chalk.dim('Initialized a Git repository.'));\n return true;\n}\n\n/**\n * Asks the user for the package slug (npm package name).\n */\nasync function askForPackageSlugAsync(customTargetPath?: string, isLocal = false): Promise<string> {\n const { slug } = await prompts(\n (isLocal ? getLocalFolderNamePrompt : getSlugPrompt)(customTargetPath),\n {\n onCancel: () => process.exit(0),\n }\n );\n return slug;\n}\n\n/**\n * Asks the user for some data necessary to render the template.\n * Some values may already be provided by command options, the prompt is skipped in that case.\n */\nasync function askForSubstitutionDataAsync(\n slug: string,\n isLocal = false\n): Promise<SubstitutionData | LocalSubstitutionData> {\n const promptQueries = await (\n isLocal ? getLocalSubstitutionDataPrompts : getSubstitutionDataPrompts\n )(slug);\n\n // Stop the process when the user cancels/exits the prompt.\n const onCancel = () => {\n process.exit(0);\n };\n\n const {\n name,\n description,\n package: projectPackage,\n authorName,\n authorEmail,\n authorUrl,\n repo,\n } = await prompts(promptQueries, { onCancel });\n\n if (isLocal) {\n return {\n project: {\n slug,\n name,\n package: projectPackage,\n moduleName: handleSuffix(name, 'Module'),\n viewName: handleSuffix(name, 'View'),\n },\n type: 'local',\n };\n }\n\n return {\n project: {\n slug,\n name,\n version: '0.1.0',\n description,\n package: projectPackage,\n moduleName: handleSuffix(name, 'Module'),\n viewName: handleSuffix(name, 'View'),\n },\n author: `${authorName} <${authorEmail}> (${authorUrl})`,\n license: 'MIT',\n repo,\n type: 'remote',\n };\n}\n\n/**\n * Checks whether the target directory is empty and if not, asks the user to confirm if he wants to continue.\n */\nasync function confirmTargetDirAsync(targetDir: string): Promise<void> {\n const files = await fs.promises.readdir(targetDir);\n if (files.length === 0) {\n return;\n }\n const { shouldContinue } = await prompts(\n {\n type: 'confirm',\n name: 'shouldContinue',\n message: `The target directory ${chalk.magenta(\n targetDir\n )} is not empty, do you want to continue anyway?`,\n initial: true,\n },\n {\n onCancel: () => false,\n }\n );\n if (!shouldContinue) {\n process.exit(0);\n }\n}\n\n/**\n * Prints how the user can follow up once the script finishes creating the module.\n */\nfunction printFurtherInstructions(\n targetDir: string,\n packageManager: PackageManagerName,\n includesExample: boolean\n) {\n if (includesExample) {\n const commands = [\n `cd ${path.relative(CWD, targetDir)}`,\n formatRunCommand(packageManager, 'open:ios'),\n formatRunCommand(packageManager, 'open:android'),\n ];\n\n console.log();\n console.log(\n 'To start developing your module, navigate to the directory and open iOS and Android projects of the example app'\n );\n commands.forEach((command) => console.log(chalk.gray('>'), chalk.bold(command)));\n console.log();\n }\n console.log(`Learn more on Expo Modules APIs: ${chalk.blue.bold(DOCS_URL)}`);\n}\n\nfunction printFurtherLocalInstructions(slug: string, name: string) {\n console.log();\n console.log(`You can now import this module inside your application.`);\n console.log(`For example, you can add this line to your App.js or App.tsx file:`);\n console.log(`${chalk.gray.italic(`import ${name} './modules/${slug}';`)}`);\n console.log();\n console.log(`Learn more on Expo Modules APIs: ${chalk.blue.bold(DOCS_URL)}`);\n console.log(\n chalk.yellow(\n `Remember to re-build your native app (for example, with ${chalk.bold('npx expo run')}) when you make changes to the module. Native code changes are not reloaded with Fast Refresh.`\n )\n );\n}\n\nconst program = new Command();\n\nprogram\n .name(packageJson.name)\n .version(packageJson.version)\n .description(packageJson.description)\n .arguments('[path]')\n .option(\n '-s, --source <source_dir>',\n 'Local path to the template. By default it downloads `expo-module-template` from NPM.'\n )\n .option('--with-readme', 'Whether to include README.md file.', false)\n .option('--with-changelog', 'Whether to include CHANGELOG.md file.', false)\n .option('--no-example', 'Whether to skip creating the example app.', false)\n .option(\n '--local',\n 'Whether to create a local module in the current project, skipping installing node_modules and creating the example directory.',\n false\n )\n .action(main);\n\nprogram\n .hook('postAction', async () => {\n await getTelemetryClient().flush?.();\n })\n .parse(process.argv);\n"]}
|
|
1
|
+
{"version":3,"file":"create-expo-module.js","sourceRoot":"","sources":["../src/create-expo-module.ts"],"names":[],"mappings":"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","sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport downloadTarball from 'download-tarball';\nimport ejs from 'ejs';\nimport findUp from 'find-up';\nimport fs from 'fs';\nimport { boolish } from 'getenv';\nimport path from 'path';\nimport prompts from 'prompts';\n\nimport { createExampleApp } from './createExampleApp';\nimport { installDependencies } from './packageManager';\nimport {\n getLocalFolderNamePrompt,\n getLocalSubstitutionDataPrompts,\n getSlugPrompt,\n getSubstitutionDataPrompts,\n} from './prompts';\nimport {\n formatRunCommand,\n PackageManagerName,\n resolvePackageManager,\n} from './resolvePackageManager';\nimport { eventCreateExpoModule, getTelemetryClient, logEventAsync } from './telemetry';\nimport { CommandOptions, LocalSubstitutionData, SubstitutionData } from './types';\nimport { newStep } from './utils/ora';\n\nconst debug = require('debug')('create-expo-module:main') as typeof console.log;\nconst packageJson = require('../package.json');\n\n// Opt in to using beta versions\nconst EXPO_BETA = boolish('EXPO_BETA', false);\n\n// `yarn run` may change the current working dir, then we should use `INIT_CWD` env.\nconst CWD = process.env.INIT_CWD || process.cwd();\n\n// Ignore some paths. Especially `package.json` as it is rendered\n// from `$package.json` file instead of the original one.\nconst IGNORES_PATHS = [\n '.DS_Store',\n 'build',\n 'node_modules',\n 'package.json',\n '.npmignore',\n '.gitignore',\n];\n\n// Url to the documentation on Expo Modules\nconst DOCS_URL = 'https://docs.expo.dev/modules';\n\nconst FYI_LOCAL_DIR = 'https://expo.fyi/expo-module-local-autolinking.md';\n\nasync function getCorrectLocalDirectory(targetOrSlug: string) {\n const packageJsonPath = await findUp('package.json', { cwd: CWD });\n if (!packageJsonPath) {\n console.log(\n chalk.red.bold(\n '⚠️ This command should be run inside your Expo project when run with the --local flag.'\n )\n );\n console.log(\n chalk.red(\n 'For native modules to autolink correctly, you need to place them in the `modules` directory in the root of the project.'\n )\n );\n return null;\n }\n return path.join(packageJsonPath, '..', 'modules', targetOrSlug);\n}\n\n/**\n * The main function of the command.\n *\n * @param target Path to the directory where to create the module. Defaults to current working dir.\n * @param options An options object for `commander`.\n */\nasync function main(target: string | undefined, options: CommandOptions) {\n if (options.local) {\n console.log();\n console.log(\n `${chalk.gray('The local module will be created in the ')}${chalk.gray.bold.italic(\n 'modules'\n )} ${chalk.gray('directory in the root of your project. Learn more: ')}${chalk.gray.bold(\n FYI_LOCAL_DIR\n )}`\n );\n console.log();\n }\n const slug = await askForPackageSlugAsync(target, options.local);\n const targetDir = options.local\n ? await getCorrectLocalDirectory(target || slug)\n : path.join(CWD, target || slug);\n\n if (!targetDir) {\n return;\n }\n await fs.promises.mkdir(targetDir, { recursive: true });\n await confirmTargetDirAsync(targetDir);\n\n options.target = targetDir;\n\n const data = await askForSubstitutionDataAsync(slug, options.local);\n\n // Make one line break between prompts and progress logs\n console.log();\n\n const packageManager = resolvePackageManager();\n const packagePath = options.source\n ? path.join(CWD, options.source)\n : await downloadPackageAsync(targetDir, options.local);\n\n await logEventAsync(eventCreateExpoModule(packageManager, options));\n\n await newStep('Creating the module from template files', async (step) => {\n await createModuleFromTemplate(packagePath, targetDir, data);\n step.succeed('Created the module from template files');\n });\n if (!options.local) {\n await newStep('Installing module dependencies', async (step) => {\n await installDependencies(packageManager, targetDir);\n step.succeed('Installed module dependencies');\n });\n await newStep('Compiling TypeScript files', async (step) => {\n await spawnAsync(packageManager, ['run', 'build'], {\n cwd: targetDir,\n stdio: 'ignore',\n });\n step.succeed('Compiled TypeScript files');\n });\n }\n\n if (!options.source) {\n // Files in the downloaded tarball are wrapped in `package` dir.\n // We should remove it after all.\n await fs.promises.rm(packagePath, { recursive: true, force: true });\n }\n if (!options.local && data.type !== 'local') {\n if (!options.withReadme) {\n await fs.promises.rm(path.join(targetDir, 'README.md'), { force: true });\n }\n if (!options.withChangelog) {\n await fs.promises.rm(path.join(targetDir, 'CHANGELOG.md'), { force: true });\n }\n if (options.example) {\n // Create \"example\" folder\n await createExampleApp(data, targetDir, packageManager);\n }\n\n await newStep('Creating an empty Git repository', async (step) => {\n try {\n const result = await createGitRepositoryAsync(targetDir);\n if (result) {\n step.succeed('Created an empty Git repository');\n } else if (result === null) {\n step.succeed('Skipped creating an empty Git repository, already within a Git repository');\n } else if (result === false) {\n step.warn(\n 'Could not create an empty Git repository, see debug logs with EXPO_DEBUG=true'\n );\n }\n } catch (error: any) {\n step.fail(error.toString());\n }\n });\n }\n\n console.log();\n if (options.local) {\n console.log(`✅ Successfully created Expo module in ${chalk.bold.italic(`modules/${slug}`)}`);\n printFurtherLocalInstructions(slug, data.project.moduleName);\n } else {\n console.log('✅ Successfully created Expo module');\n printFurtherInstructions(targetDir, packageManager, options.example);\n }\n}\n\n/**\n * Recursively scans for the files within the directory. Returned paths are relative to the `root` path.\n */\nasync function getFilesAsync(root: string, dir: string | null = null): Promise<string[]> {\n const files: string[] = [];\n const baseDir = dir ? path.join(root, dir) : root;\n\n for (const file of await fs.promises.readdir(baseDir)) {\n const relativePath = dir ? path.join(dir, file) : file;\n\n if (IGNORES_PATHS.includes(relativePath) || IGNORES_PATHS.includes(file)) {\n continue;\n }\n\n const fullPath = path.join(baseDir, file);\n const stat = await fs.promises.lstat(fullPath);\n if (stat.isDirectory()) {\n files.push(...(await getFilesAsync(root, relativePath)));\n } else {\n files.push(relativePath);\n }\n }\n return files;\n}\n\n/**\n * Asks NPM registry for the url to the tarball.\n */\nasync function getNpmTarballUrl(packageName: string, version: string = 'latest'): Promise<string> {\n debug(`Using module template ${chalk.bold(packageName)}@${chalk.bold(version)}`);\n const { stdout } = await spawnAsync('npm', ['view', `${packageName}@${version}`, 'dist.tarball']);\n return stdout.trim();\n}\n\n/**\n * Gets expo SDK version major from the local package.json.\n */\nasync function getLocalSdkMajorVersion(): Promise<string | null> {\n const path = require.resolve('expo/package.json', { paths: [process.cwd()] });\n if (!path) {\n return null;\n }\n const { version } = require(path) ?? {};\n return version?.split('.')[0] ?? null;\n}\n\n/**\n * Selects correct version of the template based on the SDK version for local modules and EXPO_BETA flag.\n */\nasync function getTemplateVersion(isLocal: boolean) {\n if (EXPO_BETA) {\n return 'next';\n }\n if (!isLocal) {\n return 'latest';\n }\n try {\n const sdkVersionMajor = await getLocalSdkMajorVersion();\n return sdkVersionMajor ? `sdk-${sdkVersionMajor}` : 'latest';\n } catch {\n console.log();\n console.warn(\n chalk.yellow(\n \"Couldn't determine the SDK version from the local project, using `latest` as the template version.\"\n )\n );\n return 'latest';\n }\n}\n\n/**\n * Downloads the template from NPM registry.\n */\nasync function downloadPackageAsync(targetDir: string, isLocal = false): Promise<string> {\n return await newStep('Downloading module template from npm', async (step) => {\n const templateVersion = await getTemplateVersion(isLocal);\n const packageName = isLocal ? 'expo-module-template-local' : 'expo-module-template';\n\n try {\n await downloadTarball({\n url: await getNpmTarballUrl(packageName, templateVersion),\n dir: targetDir,\n });\n } catch {\n console.log();\n console.warn(\n chalk.yellow(\n \"Couldn't download the versioned template from npm, falling back to the latest version.\"\n )\n );\n await downloadTarball({\n url: await getNpmTarballUrl(packageName, 'latest'),\n dir: targetDir,\n });\n }\n\n step.succeed('Downloaded module template from npm registry.');\n\n return path.join(targetDir, 'package');\n });\n}\n\nfunction handleSuffix(name: string, suffix: string): string {\n if (name.endsWith(suffix)) {\n return name;\n }\n return `${name}${suffix}`;\n}\n\n/**\n * Creates the module based on the `ejs` template (e.g. `expo-module-template` package).\n */\nasync function createModuleFromTemplate(\n templatePath: string,\n targetPath: string,\n data: SubstitutionData | LocalSubstitutionData\n) {\n const files = await getFilesAsync(templatePath);\n\n // Iterate through all template files.\n for (const file of files) {\n const renderedRelativePath = ejs.render(file.replace(/^\\$/, ''), data, {\n openDelimiter: '{',\n closeDelimiter: '}',\n escape: (value: string) => value.replace(/\\./g, path.sep),\n });\n const fromPath = path.join(templatePath, file);\n const toPath = path.join(targetPath, renderedRelativePath);\n const template = await fs.promises.readFile(fromPath, 'utf8');\n const renderedContent = ejs.render(template, data);\n\n if (!fs.existsSync(path.dirname(toPath))) {\n await fs.promises.mkdir(path.dirname(toPath), { recursive: true });\n }\n await fs.promises.writeFile(toPath, renderedContent, 'utf8');\n }\n}\n\nasync function createGitRepositoryAsync(targetDir: string) {\n // Check if we are inside a git repository already\n try {\n await spawnAsync('git', ['rev-parse', '--is-inside-work-tree'], {\n stdio: 'ignore',\n cwd: targetDir,\n });\n debug(chalk.dim('New project is already inside of a Git repository, skipping `git init`.'));\n return null;\n } catch (e: any) {\n if (e.errno === 'ENOENT') {\n debug(chalk.dim('Unable to initialize Git repo. `git` not in $PATH.'));\n return false;\n }\n }\n\n // Create a new git repository\n await spawnAsync('git', ['init'], { stdio: 'ignore', cwd: targetDir });\n await spawnAsync('git', ['add', '-A'], { stdio: 'ignore', cwd: targetDir });\n\n const commitMsg = `Initial commit\\n\\nGenerated by ${packageJson.name} ${packageJson.version}.`;\n await spawnAsync('git', ['commit', '-m', commitMsg], {\n stdio: 'ignore',\n cwd: targetDir,\n });\n\n debug(chalk.dim('Initialized a Git repository.'));\n return true;\n}\n\n/**\n * Asks the user for the package slug (npm package name).\n */\nasync function askForPackageSlugAsync(customTargetPath?: string, isLocal = false): Promise<string> {\n const { slug } = await prompts(\n (isLocal ? getLocalFolderNamePrompt : getSlugPrompt)(customTargetPath),\n {\n onCancel: () => process.exit(0),\n }\n );\n return slug;\n}\n\n/**\n * Asks the user for some data necessary to render the template.\n * Some values may already be provided by command options, the prompt is skipped in that case.\n */\nasync function askForSubstitutionDataAsync(\n slug: string,\n isLocal = false\n): Promise<SubstitutionData | LocalSubstitutionData> {\n const promptQueries = await (\n isLocal ? getLocalSubstitutionDataPrompts : getSubstitutionDataPrompts\n )(slug);\n\n // Stop the process when the user cancels/exits the prompt.\n const onCancel = () => {\n process.exit(0);\n };\n\n const {\n name,\n description,\n package: projectPackage,\n authorName,\n authorEmail,\n authorUrl,\n repo,\n } = await prompts(promptQueries, { onCancel });\n\n if (isLocal) {\n return {\n project: {\n slug,\n name,\n package: projectPackage,\n moduleName: handleSuffix(name, 'Module'),\n viewName: handleSuffix(name, 'View'),\n },\n type: 'local',\n };\n }\n\n return {\n project: {\n slug,\n name,\n version: '0.1.0',\n description,\n package: projectPackage,\n moduleName: handleSuffix(name, 'Module'),\n viewName: handleSuffix(name, 'View'),\n },\n author: `${authorName} <${authorEmail}> (${authorUrl})`,\n license: 'MIT',\n repo,\n type: 'remote',\n };\n}\n\n/**\n * Checks whether the target directory is empty and if not, asks the user to confirm if he wants to continue.\n */\nasync function confirmTargetDirAsync(targetDir: string): Promise<void> {\n const files = await fs.promises.readdir(targetDir);\n if (files.length === 0) {\n return;\n }\n const { shouldContinue } = await prompts(\n {\n type: 'confirm',\n name: 'shouldContinue',\n message: `The target directory ${chalk.magenta(\n targetDir\n )} is not empty, do you want to continue anyway?`,\n initial: true,\n },\n {\n onCancel: () => false,\n }\n );\n if (!shouldContinue) {\n process.exit(0);\n }\n}\n\n/**\n * Prints how the user can follow up once the script finishes creating the module.\n */\nfunction printFurtherInstructions(\n targetDir: string,\n packageManager: PackageManagerName,\n includesExample: boolean\n) {\n if (includesExample) {\n const commands = [\n `cd ${path.relative(CWD, targetDir)}`,\n formatRunCommand(packageManager, 'open:ios'),\n formatRunCommand(packageManager, 'open:android'),\n ];\n\n console.log();\n console.log(\n 'To start developing your module, navigate to the directory and open Android and iOS projects of the example app'\n );\n commands.forEach((command) => console.log(chalk.gray('>'), chalk.bold(command)));\n console.log();\n }\n console.log(`Learn more on Expo Modules APIs: ${chalk.blue.bold(DOCS_URL)}`);\n}\n\nfunction printFurtherLocalInstructions(slug: string, name: string) {\n console.log();\n console.log(`You can now import this module inside your application.`);\n console.log(`For example, you can add this line to your App.tsx or App.js file:`);\n console.log(`${chalk.gray.italic(`import ${name} from './modules/${slug}';`)}`);\n console.log();\n console.log(`Learn more on Expo Modules APIs: ${chalk.blue.bold(DOCS_URL)}`);\n console.log(\n chalk.yellow(\n `Remember to re-build your native app (for example, with ${chalk.bold('npx expo run')}) when you make changes to the module. Native code changes are not reloaded with Fast Refresh.`\n )\n );\n}\n\nconst program = new Command();\n\nprogram\n .name(packageJson.name)\n .version(packageJson.version)\n .description(packageJson.description)\n .arguments('[path]')\n .option(\n '-s, --source <source_dir>',\n 'Local path to the template. By default it downloads `expo-module-template` from NPM.'\n )\n .option('--with-readme', 'Whether to include README.md file.', false)\n .option('--with-changelog', 'Whether to include CHANGELOG.md file.', false)\n .option('--no-example', 'Whether to skip creating the example app.', false)\n .option(\n '--local',\n 'Whether to create a local module in the current project, skipping installing node_modules and creating the example directory.',\n false\n )\n .action(main);\n\nprogram\n .hook('postAction', async () => {\n await getTelemetryClient().flush?.();\n })\n .parse(process.argv);\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-expo-module",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "The script to create the Expo module",
|
|
5
5
|
"main": "build/create-expo-module.js",
|
|
6
6
|
"types": "build/create-expo-module.d.ts",
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
},
|
|
34
34
|
"homepage": "https://github.com/expo/expo/tree/main/packages/expo",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@expo/config": "~11.0.
|
|
37
|
-
"@expo/json-file": "^9.1.
|
|
36
|
+
"@expo/config": "~11.0.3",
|
|
37
|
+
"@expo/json-file": "^9.1.2",
|
|
38
38
|
"@expo/rudder-sdk-node": "^1.1.1",
|
|
39
39
|
"@expo/spawn-async": "^1.7.2",
|
|
40
40
|
"chalk": "^4.1.2",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@types/ejs": "^3.1.5",
|
|
55
55
|
"@types/find-up": "^4.0.0",
|
|
56
56
|
"@types/prompts": "^2.4.9",
|
|
57
|
-
"expo-module-scripts": "^4.1.
|
|
57
|
+
"expo-module-scripts": "^4.1.2"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "f1394f21ff2719a9a3037d7511db170704e5c492"
|
|
60
60
|
}
|
|
@@ -73,7 +73,7 @@ async function getCorrectLocalDirectory(targetOrSlug: string) {
|
|
|
73
73
|
* The main function of the command.
|
|
74
74
|
*
|
|
75
75
|
* @param target Path to the directory where to create the module. Defaults to current working dir.
|
|
76
|
-
* @param
|
|
76
|
+
* @param options An options object for `commander`.
|
|
77
77
|
*/
|
|
78
78
|
async function main(target: string | undefined, options: CommandOptions) {
|
|
79
79
|
if (options.local) {
|
|
@@ -110,7 +110,7 @@ async function main(target: string | undefined, options: CommandOptions) {
|
|
|
110
110
|
? path.join(CWD, options.source)
|
|
111
111
|
: await downloadPackageAsync(targetDir, options.local);
|
|
112
112
|
|
|
113
|
-
logEventAsync(eventCreateExpoModule(packageManager, options));
|
|
113
|
+
await logEventAsync(eventCreateExpoModule(packageManager, options));
|
|
114
114
|
|
|
115
115
|
await newStep('Creating the module from template files', async (step) => {
|
|
116
116
|
await createModuleFromTemplate(packagePath, targetDir, data);
|
|
@@ -159,8 +159,8 @@ async function main(target: string | undefined, options: CommandOptions) {
|
|
|
159
159
|
'Could not create an empty Git repository, see debug logs with EXPO_DEBUG=true'
|
|
160
160
|
);
|
|
161
161
|
}
|
|
162
|
-
} catch (
|
|
163
|
-
step.fail(
|
|
162
|
+
} catch (error: any) {
|
|
163
|
+
step.fail(error.toString());
|
|
164
164
|
}
|
|
165
165
|
});
|
|
166
166
|
}
|
|
@@ -251,12 +251,13 @@ async function getTemplateVersion(isLocal: boolean) {
|
|
|
251
251
|
async function downloadPackageAsync(targetDir: string, isLocal = false): Promise<string> {
|
|
252
252
|
return await newStep('Downloading module template from npm', async (step) => {
|
|
253
253
|
const templateVersion = await getTemplateVersion(isLocal);
|
|
254
|
-
|
|
254
|
+
const packageName = isLocal ? 'expo-module-template-local' : 'expo-module-template';
|
|
255
|
+
|
|
255
256
|
try {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
);
|
|
257
|
+
await downloadTarball({
|
|
258
|
+
url: await getNpmTarballUrl(packageName, templateVersion),
|
|
259
|
+
dir: targetDir,
|
|
260
|
+
});
|
|
260
261
|
} catch {
|
|
261
262
|
console.log();
|
|
262
263
|
console.warn(
|
|
@@ -264,18 +265,13 @@ async function downloadPackageAsync(targetDir: string, isLocal = false): Promise
|
|
|
264
265
|
"Couldn't download the versioned template from npm, falling back to the latest version."
|
|
265
266
|
)
|
|
266
267
|
);
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
);
|
|
268
|
+
await downloadTarball({
|
|
269
|
+
url: await getNpmTarballUrl(packageName, 'latest'),
|
|
270
|
+
dir: targetDir,
|
|
271
|
+
});
|
|
271
272
|
}
|
|
272
273
|
|
|
273
|
-
|
|
274
|
-
url: tarballUrl,
|
|
275
|
-
dir: targetDir,
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
step.succeed('Downloaded module template from npm');
|
|
274
|
+
step.succeed('Downloaded module template from npm registry.');
|
|
279
275
|
|
|
280
276
|
return path.join(targetDir, 'package');
|
|
281
277
|
});
|
|
@@ -324,7 +320,7 @@ async function createGitRepositoryAsync(targetDir: string) {
|
|
|
324
320
|
stdio: 'ignore',
|
|
325
321
|
cwd: targetDir,
|
|
326
322
|
});
|
|
327
|
-
debug(chalk.dim('New project is already inside of a Git
|
|
323
|
+
debug(chalk.dim('New project is already inside of a Git repository, skipping `git init`.'));
|
|
328
324
|
return null;
|
|
329
325
|
} catch (e: any) {
|
|
330
326
|
if (e.errno === 'ENOENT') {
|
|
@@ -460,7 +456,7 @@ function printFurtherInstructions(
|
|
|
460
456
|
|
|
461
457
|
console.log();
|
|
462
458
|
console.log(
|
|
463
|
-
'To start developing your module, navigate to the directory and open
|
|
459
|
+
'To start developing your module, navigate to the directory and open Android and iOS projects of the example app'
|
|
464
460
|
);
|
|
465
461
|
commands.forEach((command) => console.log(chalk.gray('>'), chalk.bold(command)));
|
|
466
462
|
console.log();
|
|
@@ -471,8 +467,8 @@ function printFurtherInstructions(
|
|
|
471
467
|
function printFurtherLocalInstructions(slug: string, name: string) {
|
|
472
468
|
console.log();
|
|
473
469
|
console.log(`You can now import this module inside your application.`);
|
|
474
|
-
console.log(`For example, you can add this line to your App.
|
|
475
|
-
console.log(`${chalk.gray.italic(`import ${name} './modules/${slug}';`)}`);
|
|
470
|
+
console.log(`For example, you can add this line to your App.tsx or App.js file:`);
|
|
471
|
+
console.log(`${chalk.gray.italic(`import ${name} from './modules/${slug}';`)}`);
|
|
476
472
|
console.log();
|
|
477
473
|
console.log(`Learn more on Expo Modules APIs: ${chalk.blue.bold(DOCS_URL)}`);
|
|
478
474
|
console.log(
|