create-react-native-library 0.55.1 → 0.55.2
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/exampleApp/generateExampleApp.js +3 -2
- package/lib/exampleApp/generateExampleApp.js.map +1 -1
- package/lib/index.js +23 -23
- package/lib/index.js.map +1 -1
- package/lib/inform.js +3 -1
- package/lib/inform.js.map +1 -1
- package/lib/prompt.js +286 -0
- package/lib/prompt.js.map +1 -0
- package/lib/template.js +2 -2
- package/lib/template.js.map +1 -1
- package/lib/utils/configureTools.js +2 -2
- package/lib/utils/configureTools.js.map +1 -1
- package/lib/utils/createMetadata.js +17 -0
- package/lib/utils/createMetadata.js.map +1 -0
- package/package.json +5 -8
- package/lib/input.js +0 -305
- package/lib/input.js.map +0 -1
- package/lib/utils/prompt.js +0 -182
- package/lib/utils/prompt.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","names":["_nodeFs","_interopRequireDefault","require","_nodePath","_pigment","_validateNpmPackageName","_spawn","_githubUsername","_configureTools","_constants","e","__esModule","default","TYPE_CHOICES","title","value","description","LANGUAGE_CHOICES","types","EXAMPLE_CHOICES","disabled","process","env","CRNL_ENABLE_TEST_APP","filter","choice","validateDirectory","input","targetPath","path","join","cwd","fs","existsSync","stat","statSync","isDirectory","files","readdirSync","isEmpty","length","getGitConfig","key","spawn","trim","undefined","isInPackage","resolve","isFile","prompt","exports","create","local","type","message","skip","directory","answers","read","name","includes","sep","validate","slug","basename","validateNpmPackage","validForNewPackages","test","required","Boolean","authorName","authorEmail","authorUrl","username","githubUsername","repoUrl","replace","choices","languages","map","example","tools","Object","entries","AVAILABLE_TOOLS","tool","keys","reactNativeVersion","SUPPORTED_REACT_NATIVE_VERSION"],"sources":["../src/prompt.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { create } from 'pigment';\nimport validateNpmPackage from 'validate-npm-package-name';\nimport { spawn } from './utils/spawn';\nimport githubUsername from 'github-username';\nimport { AVAILABLE_TOOLS } from './utils/configureTools';\nimport { SUPPORTED_REACT_NATIVE_VERSION } from './constants';\n\nexport type Answers = NonNullable<Awaited<ReturnType<typeof prompt.show>>>;\n\nexport type ExampleApp = 'test-app' | 'expo' | 'vanilla' | undefined;\n\nexport type ProjectLanguages = 'kotlin-objc' | 'kotlin-swift' | 'js';\n\nexport type ProjectType =\n | 'turbo-module'\n | 'fabric-view'\n | 'nitro-module'\n | 'nitro-view'\n | 'library';\n\nconst TYPE_CHOICES: {\n title: string;\n value: ProjectType;\n description: string;\n}[] = [\n {\n title: 'Turbo module',\n value: 'turbo-module',\n description: 'Integration for native APIs to JS',\n },\n {\n title: 'Fabric view',\n value: 'fabric-view',\n description: 'Integration for native views to JS',\n },\n {\n title: 'Nitro module',\n value: 'nitro-module',\n description: 'Type-safe, fast integration for native APIs to JS',\n },\n {\n title: 'Nitro view',\n value: 'nitro-view',\n description: 'Integration for native views to JS using nitro',\n },\n {\n title: 'JavaScript library',\n value: 'library',\n description: 'Plain JavaScript library with Web support',\n },\n];\n\nconst LANGUAGE_CHOICES: {\n title: string;\n value: ProjectLanguages;\n types: ProjectType[];\n}[] = [\n {\n title: 'Kotlin & Swift',\n value: 'kotlin-swift',\n types: ['nitro-module', 'nitro-view'],\n },\n {\n title: 'Kotlin & Objective-C',\n value: 'kotlin-objc',\n types: ['turbo-module', 'fabric-view'],\n },\n {\n title: 'JavaScript for Android, iOS & Web',\n value: 'js',\n types: ['library'],\n },\n];\n\nconst EXAMPLE_CHOICES = (\n [\n {\n title: 'App with Community CLI',\n value: 'vanilla',\n description: \"Provides access to app's native code\",\n disabled: false,\n },\n {\n title: 'Test App by Microsoft',\n value: 'test-app',\n description: \"App's native code is abstracted away\",\n // Test App currently doesn't work with React Native 0.79.2\n // due to missing `Gemfile` in the template\n disabled: !process.env.CRNL_ENABLE_TEST_APP,\n },\n {\n title: 'App with Expo CLI',\n value: 'expo',\n description: 'Managed expo app with web support',\n disabled: false,\n },\n ] as const\n).filter((choice) => !choice.disabled);\n\nconst validateDirectory = (input: string) => {\n if (!input) {\n return 'Cannot be empty';\n }\n\n const targetPath = path.join(process.cwd(), input);\n\n if (!fs.existsSync(targetPath)) {\n return true;\n }\n\n const stat = fs.statSync(targetPath);\n\n if (!stat.isDirectory()) {\n return 'Path exists and is not a directory';\n }\n\n const files = fs.readdirSync(targetPath);\n\n const isEmpty =\n files.length === 0 || (files.length === 1 && files[0] === '.git');\n\n if (!isEmpty) {\n return 'Directory already exists and is not empty';\n }\n\n return true;\n};\n\nconst getGitConfig = async (key: string): Promise<string | undefined> => {\n try {\n const value: string = await spawn('git', ['config', '--get', key]);\n\n return value.trim();\n } catch {\n return undefined;\n }\n};\n\nconst isInPackage = (): boolean => {\n try {\n const stat = fs.statSync(path.resolve(process.cwd(), 'package.json'));\n\n return stat.isFile();\n } catch {\n return false;\n }\n};\n\nexport const prompt = create(['[name]'], {\n local: {\n type: 'confirm',\n description: 'Whether to create a local library',\n message: `Looks like you're under a project folder. Do you want to create a local library?`,\n default: isInPackage,\n skip: () => !isInPackage(),\n },\n directory: {\n type: 'text',\n description: 'Directory to create the library at',\n message: 'Where do you want to create the library?',\n default: (): string | undefined => {\n const answers = prompt.read();\n\n if (answers.name == null) {\n return undefined;\n }\n\n if (answers.local && !answers.name?.includes(path.sep)) {\n return path.join('modules', answers.name);\n }\n\n return answers.name;\n },\n validate: validateDirectory,\n skip: () => {\n const answers = prompt.read();\n\n if (\n answers.name &&\n !answers.local &&\n validateDirectory(answers.name) === true\n ) {\n return true;\n }\n\n return false;\n },\n },\n slug: {\n type: 'text',\n description: 'Name of the npm package',\n message: 'What do you want to name the npm package?',\n default: (): string | undefined => {\n const answers = prompt.read();\n const value =\n typeof answers.directory === 'string'\n ? answers.directory\n : answers.name;\n\n if (typeof value !== 'string') {\n return undefined;\n }\n\n const basename = path.basename(value);\n\n if (validateNpmPackage(basename).validForNewPackages) {\n if (/^(@|react-native)/.test(basename)) {\n return basename;\n }\n\n return `react-native-${basename}`;\n }\n\n return undefined;\n },\n validate: (input) =>\n validateNpmPackage(input).validForNewPackages ||\n 'Must be a valid npm package name',\n required: true,\n },\n description: {\n type: 'text',\n description: 'Description of the npm package',\n message: 'How would you describe the package?',\n validate: (input) => Boolean(input) || 'Cannot be empty',\n required: true,\n },\n authorName: {\n type: 'text',\n description: 'Name of the package author',\n message: 'What is the name of the package author?',\n default: async () => getGitConfig('user.name'),\n validate: (input) => Boolean(input) || 'Cannot be empty',\n skip: (): boolean => prompt.read().local === true,\n },\n authorEmail: {\n type: 'text',\n description: 'Email address of the package author',\n message: 'What is the email address of the package author?',\n default: async () => getGitConfig('user.email'),\n validate: (input) =>\n /^\\S+@\\S+$/.test(input) || 'Must be a valid email address',\n skip: (): boolean => prompt.read().local === true,\n },\n authorUrl: {\n type: 'text',\n description: 'Profile URL of the package author',\n message: 'What is the profile URL for the package author?',\n default: async () => {\n const answers = prompt.read();\n\n if (typeof answers.authorEmail !== 'string') {\n return undefined;\n }\n\n try {\n const username = await githubUsername(answers.authorEmail);\n\n if (username) {\n return `https://github.com/${username}`;\n }\n } catch (e) {\n // Ignore error\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n skip: (): boolean => prompt.read().local === true,\n },\n repoUrl: {\n type: 'text',\n description: 'Repository URL of the package',\n message: 'What is the repository URL for the package?',\n default: (): string | undefined => {\n const answers = prompt.read();\n\n if (\n typeof answers.authorUrl === 'string' &&\n typeof answers.slug === 'string' &&\n /^https?:\\/\\/github.com\\/[^/]+/.test(answers.authorUrl)\n ) {\n return `${answers.authorUrl}/${answers.slug\n .replace(/^@/, '')\n .replace(/\\//g, '-')}`;\n }\n\n return undefined;\n },\n validate: (input) => /^https?:\\/\\//.test(input) || 'Must be a valid URL',\n skip: (): boolean => prompt.read().local === true,\n },\n type: {\n type: 'select',\n description: 'Type of library you want to develop',\n message: 'What type of library do you want to develop?',\n choices: TYPE_CHOICES,\n required: true,\n },\n languages: {\n type: 'select',\n description: 'Languages to use for native code',\n message: 'Which language do you want to use for native code?',\n choices: LANGUAGE_CHOICES.map((choice) => ({\n title: choice.title,\n value: choice.value,\n skip: (): boolean => {\n const answers = prompt.read();\n\n if (typeof answers.type === 'string') {\n return !choice.types.includes(answers.type);\n }\n\n return false;\n },\n })),\n required: true,\n },\n example: {\n type: 'select',\n description: 'Type of the example app to create',\n message: 'What type of example app do you want to create?',\n choices: EXAMPLE_CHOICES.map((choice) => ({\n title: choice.title,\n value: choice.value,\n description: choice.description,\n skip: (): boolean => {\n const answers = prompt.read();\n\n if (typeof answers.type === 'string') {\n return answers.type === 'library'\n ? choice.value !== 'expo'\n : choice.value === 'expo';\n }\n\n return false;\n },\n })),\n required: true,\n skip: (): boolean => {\n const answers = prompt.read();\n\n return answers.local === true;\n },\n },\n tools: {\n type: 'multiselect',\n description: 'Additional tools to configure',\n message: 'Which tools do you want to configure?',\n choices: Object.entries(AVAILABLE_TOOLS).map(([key, tool]) => ({\n value: key,\n title: tool.name,\n description: tool.description,\n })),\n default: Object.keys(AVAILABLE_TOOLS),\n required: true,\n skip: (): boolean => {\n const answers = prompt.read();\n\n return answers.local === true;\n },\n },\n reactNativeVersion: {\n type: 'text',\n description: 'Version of React Native to use in the example app',\n message:\n 'Which version of React Native do you want to use in the example app?',\n default: SUPPORTED_REACT_NATIVE_VERSION,\n validate: (input) =>\n input === 'latest' ||\n /^\\d+\\.\\d+\\.\\d+(-.+)?$/.test(input) ||\n 'Must be a valid semver version',\n skip: true,\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/lib/template.js
CHANGED
|
@@ -118,7 +118,7 @@ async function applyTemplates(answers, config, folder) {
|
|
|
118
118
|
await applyTemplate(config, COMMON_LOCAL_FILES, folder);
|
|
119
119
|
} else {
|
|
120
120
|
await applyTemplate(config, COMMON_FILES, folder);
|
|
121
|
-
if (config.example
|
|
121
|
+
if (config.example != null) {
|
|
122
122
|
await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);
|
|
123
123
|
if (config.project.viewConfig !== null) {
|
|
124
124
|
await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);
|
|
@@ -132,7 +132,7 @@ async function applyTemplates(answers, config, folder) {
|
|
|
132
132
|
await applyTemplate(config, EXPO_FILES, folder);
|
|
133
133
|
} else {
|
|
134
134
|
await applyTemplate(config, NATIVE_COMMON_FILES, folder);
|
|
135
|
-
if (config.example
|
|
135
|
+
if (config.example != null) {
|
|
136
136
|
await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);
|
|
137
137
|
}
|
|
138
138
|
if (config.project.moduleConfig === 'nitro-modules') {
|
package/lib/template.js.map
CHANGED
|
@@ -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_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_new","view_new","module_nitro","view_nitro","OBJC_FILES","module_common","KOTLIN_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","sep","package_cpp","identifier","native","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","tools","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","source","destination","fs","mkdirp","files","readdir","f","ejs","render","openDelimiter","closeDelimiter","Error","cause","target","join","file","stats","stat","isDirectory","some","r","content","readFile","result","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, ProjectType } from './input';\n\nexport type TemplateVersions = {\n bob: string;\n nitro: string | undefined;\n};\n\nexport type ModuleConfig =\n | 'native-modules'\n | 'turbo-modules'\n | 'nitro-modules'\n | null;\n\nexport type ViewConfig = 'paper-view' | 'fabric-view' | 'nitro-view' | null;\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 versions: TemplateVersions;\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 swift: boolean;\n viewConfig: ViewConfig;\n moduleConfig: ModuleConfig;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n /** Git repo URL */\n repo: string;\n example: ExampleApp;\n year: number;\n tools: string[];\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_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 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_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n view_nitro: path.resolve(__dirname, '../templates/nitro-view'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nexport function generateTemplateConfiguration({\n versions,\n basename,\n answers,\n}: {\n versions: TemplateVersions;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\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 versions,\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: string) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, path.sep),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n swift: languages === 'kotlin-swift',\n viewConfig: getViewConfig(type),\n moduleConfig: getModuleConfig(type),\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 tools: answers.tools,\n year: new Date().getFullYear(),\n };\n}\n\nfunction getModuleConfig(projectType: ProjectType): ModuleConfig {\n switch (projectType) {\n case 'nitro-module':\n return 'nitro-modules';\n case 'turbo-module':\n return 'turbo-modules';\n case 'fabric-view':\n case 'library':\n case 'nitro-view':\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\n case 'fabric-view':\n return 'fabric-view';\n case 'nitro-view':\n return 'nitro-view';\n case 'nitro-module':\n case 'turbo-module':\n case 'library':\n default:\n return null;\n }\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\n\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.viewConfig !== null) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\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.moduleConfig === 'nitro-modules') {\n await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);\n return;\n }\n\n if (config.project.viewConfig === 'nitro-view') {\n await applyTemplate(config, NATIVE_FILES['view_nitro'], folder);\n return;\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, NATIVE_FILES[`module_new`], folder);\n } else {\n await applyTemplate(config, NATIVE_FILES[`view_new`], folder);\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(config, OBJC_FILES[`view_new`], folder);\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_new` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nexport async 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 let name;\n\n try {\n name = ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n });\n } catch (e) {\n throw new Error(`Failed to render template file name: ${f}`, {\n cause: e,\n });\n }\n\n const target = path.join(destination, name);\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 let result;\n\n try {\n result = ejs\n .render(content, config)\n // Make sure that line endings are 'lf' (Unix style)\n .replace(/\\r\\n/g, '\\n');\n } catch (e) {\n throw new Error(`Failed to render template file content: ${f}`, {\n cause: e,\n });\n }\n\n await fs.writeFile(target, result);\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_NEW_FILES","EXAMPLE_VIEW_FILES","JS_FILES","EXPO_FILES","NATIVE_COMMON_FILES","NATIVE_COMMON_EXAMPLE_FILES","NATIVE_FILES","module_new","view_new","module_nitro","view_nitro","OBJC_FILES","module_common","KOTLIN_FILES","generateTemplateConfiguration","versions","basename","answers","slug","languages","type","project","replace","namespace","startsWith","includes","split","toLowerCase","pack","description","name","test","charAt","toUpperCase","_","$1","slice","package","package_dir","sep","package_cpp","identifier","native","swift","viewConfig","getViewConfig","moduleConfig","getModuleConfig","author","authorName","email","authorEmail","url","authorUrl","repo","repoUrl","example","tools","year","Date","getFullYear","projectType","applyTemplates","config","folder","local","applyTemplate","templateType","source","destination","fs","mkdirp","files","readdir","f","ejs","render","openDelimiter","closeDelimiter","Error","cause","target","join","file","stats","stat","isDirectory","some","r","content","readFile","result","writeFile","copyFile"],"sources":["../src/template.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport ejs from 'ejs';\nimport type { Answers, ExampleApp, ProjectType } from './prompt';\n\nexport type TemplateVersions = {\n bob: string;\n nitro: string | undefined;\n};\n\nexport type ModuleConfig =\n | 'native-modules'\n | 'turbo-modules'\n | 'nitro-modules'\n | null;\n\nexport type ViewConfig = 'paper-view' | 'fabric-view' | 'nitro-view' | null;\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 versions: TemplateVersions;\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 swift: boolean;\n viewConfig: ViewConfig;\n moduleConfig: ModuleConfig;\n };\n author: {\n name: string;\n email: string;\n url: string;\n };\n /** Git repo URL */\n repo: string;\n example: ExampleApp;\n year: number;\n tools: string[];\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_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 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_new: path.resolve(__dirname, '../templates/native-library-new'),\n view_new: path.resolve(__dirname, '../templates/native-view-new'),\n module_nitro: path.resolve(__dirname, '../templates/nitro-module'),\n view_nitro: path.resolve(__dirname, '../templates/nitro-view'),\n} as const;\n\nconst OBJC_FILES = {\n module_common: path.resolve(__dirname, '../templates/objc-library'),\n view_new: path.resolve(__dirname, '../templates/objc-view-new'),\n} as const;\n\nconst KOTLIN_FILES = {\n module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),\n view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),\n} as const;\n\nexport function generateTemplateConfiguration({\n versions,\n basename,\n answers,\n}: {\n versions: TemplateVersions;\n basename: string;\n answers: Answers;\n}): TemplateConfiguration {\n const { slug, languages, type } = answers;\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 versions,\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: string) => $1.toUpperCase())\n .slice(1)}`,\n package: pack,\n package_dir: pack.replace(/\\./g, path.sep),\n package_cpp: pack.replace(/\\./g, '_'),\n identifier: slug.replace(/[^a-z0-9]+/g, '-').replace(/^-/, ''),\n native: languages !== 'js',\n swift: languages === 'kotlin-swift',\n viewConfig: getViewConfig(type),\n moduleConfig: getModuleConfig(type),\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 tools: answers.tools,\n year: new Date().getFullYear(),\n };\n}\n\nfunction getModuleConfig(projectType: ProjectType): ModuleConfig {\n switch (projectType) {\n case 'nitro-module':\n return 'nitro-modules';\n case 'turbo-module':\n return 'turbo-modules';\n case 'fabric-view':\n case 'library':\n case 'nitro-view':\n return null;\n }\n}\n\nfunction getViewConfig(projectType: ProjectType): ViewConfig {\n switch (projectType) {\n case 'fabric-view':\n return 'fabric-view';\n case 'nitro-view':\n return 'nitro-view';\n case 'nitro-module':\n case 'turbo-module':\n case 'library':\n default:\n return null;\n }\n}\n\nexport async function applyTemplates(\n answers: Answers,\n config: TemplateConfiguration,\n folder: string\n) {\n const { local } = answers;\n\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 != null) {\n await applyTemplate(config, EXAMPLE_COMMON_FILES, folder);\n\n if (config.project.viewConfig !== null) {\n await applyTemplate(config, EXAMPLE_VIEW_FILES, folder);\n } else {\n await applyTemplate(config, EXAMPLE_MODULE_NEW_FILES, folder);\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 != null) {\n await applyTemplate(config, NATIVE_COMMON_EXAMPLE_FILES, folder);\n }\n\n if (config.project.moduleConfig === 'nitro-modules') {\n await applyTemplate(config, NATIVE_FILES['module_nitro'], folder);\n return;\n }\n\n if (config.project.viewConfig === 'nitro-view') {\n await applyTemplate(config, NATIVE_FILES['view_nitro'], folder);\n return;\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, NATIVE_FILES[`module_new`], folder);\n } else {\n await applyTemplate(config, NATIVE_FILES[`view_new`], folder);\n }\n\n if (config.project.moduleConfig !== null) {\n await applyTemplate(config, OBJC_FILES[`module_common`], folder);\n } else {\n await applyTemplate(config, OBJC_FILES[`view_new`], folder);\n }\n\n const templateType = `${\n config.project.moduleConfig !== null ? 'module' : 'view'\n }_new` as const;\n\n await applyTemplate(config, KOTLIN_FILES[templateType], folder);\n }\n}\n\n/**\n * This copies the template files and renders them via ejs\n */\nexport async 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 let name;\n\n try {\n name = ejs.render(f.replace(/^\\$/, ''), config, {\n openDelimiter: '{',\n closeDelimiter: '}',\n });\n } catch (e) {\n throw new Error(`Failed to render template file name: ${f}`, {\n cause: e,\n });\n }\n\n const target = path.join(destination, name);\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 let result;\n\n try {\n result = ejs\n .render(content, config)\n // Make sure that line endings are 'lf' (Unix style)\n .replace(/\\r\\n/g, '\\n');\n } catch (e) {\n throw new Error(`Failed to render template file content: ${f}`, {\n cause: e,\n });\n }\n\n await fs.writeFile(target, result);\n } else {\n await fs.copyFile(file, target);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -113,9 +113,9 @@ const TURBOREPO = {
|
|
|
113
113
|
};
|
|
114
114
|
const AVAILABLE_TOOLS = exports.AVAILABLE_TOOLS = {
|
|
115
115
|
'eslint': ESLINT,
|
|
116
|
+
'jest': JEST,
|
|
116
117
|
'lefthook': LEFTHOOK,
|
|
117
|
-
'release-it': RELEASE_IT
|
|
118
|
-
'jest': JEST
|
|
118
|
+
'release-it': RELEASE_IT
|
|
119
119
|
};
|
|
120
120
|
const REQUIRED_TOOLS = {
|
|
121
121
|
turbo: TURBOREPO
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureTools.js","names":["_fsExtra","_interopRequireDefault","require","_nodePath","_template","_sortObjectKeys","e","__esModule","default","ESLINT","name","description","package","scripts","lint","prettier","quoteProps","singleQuote","tabWidth","trailingComma","useTabs","devDependencies","LEFTHOOK","commitlint","extends","RELEASE_IT","release","git","commitMessage","tagName","npm","publish","github","plugins","preset","JEST","test","jest","modulePathIgnorePatterns","TURBOREPO","turbo","condition","config","example","AVAILABLE_TOOLS","exports","REQUIRED_TOOLS","ALL_TOOLS","configureTools","tools","root","packageJson","key","Object","keys","Error","join","tool","files","path","resolve","__dirname","fs","existsSync","applyTemplate","value","entries","Array","isArray","sortObjectKeys","String"],"sources":["../../src/utils/configureTools.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\nimport { applyTemplate, type TemplateConfiguration } from '../template';\nimport sortObjectKeys from './sortObjectKeys';\n\ntype Tool = {\n name: string;\n description: string;\n package: Record<string, unknown>;\n condition?: (config: TemplateConfiguration) => boolean;\n};\n\ntype Options = {\n tools: string[];\n root: string;\n packageJson: Record<string, unknown>;\n config: TemplateConfiguration;\n};\n\nconst ESLINT = {\n name: 'ESLint with Prettier',\n description: 'Lint and format code',\n package: {\n scripts: {\n lint: 'eslint \"**/*.{js,ts,tsx}\"',\n },\n prettier: {\n quoteProps: 'consistent',\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n useTabs: false,\n },\n devDependencies: {\n '@eslint/compat': '^1.3.2',\n '@eslint/eslintrc': '^3.3.1',\n '@eslint/js': '^9.35.0',\n '@react-native/eslint-config': '^0.81.1',\n 'eslint-config-prettier': '^10.1.8',\n 'eslint-plugin-prettier': '^5.5.4',\n 'eslint': '^9.35.0',\n 'prettier': '^2.8.8',\n },\n },\n};\n\nconst LEFTHOOK = {\n name: 'Lefthook with Commitlint',\n description: 'Manage Git hooks and lint commit messages',\n package: {\n commitlint: {\n extends: ['@commitlint/config-conventional'],\n },\n devDependencies: {\n '@commitlint/config-conventional': '^19.8.1',\n 'commitlint': '^19.8.1',\n 'lefthook': '^2.0.3',\n },\n },\n};\n\nconst RELEASE_IT = {\n name: 'Release It',\n description: 'Automate versioning and package publishing tasks',\n package: {\n 'scripts': {\n release: 'release-it --only-version',\n },\n 'release-it': {\n git: {\n // eslint-disable-next-line no-template-curly-in-string\n commitMessage: 'chore: release ${version}',\n // eslint-disable-next-line no-template-curly-in-string\n tagName: 'v${version}',\n },\n npm: {\n publish: true,\n },\n github: {\n release: true,\n },\n plugins: {\n '@release-it/conventional-changelog': {\n preset: {\n name: 'angular',\n },\n },\n },\n },\n 'devDependencies': {\n 'release-it': '^19.0.4',\n '@release-it/conventional-changelog': '^10.0.1',\n },\n },\n};\n\nconst JEST = {\n name: 'Jest',\n description: 'Test JavaScript and TypeScript code',\n package: {\n scripts: {\n test: 'jest',\n },\n jest: {\n preset: 'react-native',\n modulePathIgnorePatterns: [\n '<rootDir>/example/node_modules',\n '<rootDir>/lib/',\n ],\n },\n devDependencies: {\n '@types/jest': '^29.5.14',\n 'jest': '^29.7.0',\n },\n },\n};\n\nconst TURBOREPO = {\n name: 'Turborepo',\n description: 'Cache build outputs on CI',\n package: {\n devDependencies: {\n turbo: '^2.5.6',\n },\n },\n condition: (config: TemplateConfiguration) => config.example !== 'expo',\n};\n\nexport const AVAILABLE_TOOLS = {\n 'eslint': ESLINT,\n '
|
|
1
|
+
{"version":3,"file":"configureTools.js","names":["_fsExtra","_interopRequireDefault","require","_nodePath","_template","_sortObjectKeys","e","__esModule","default","ESLINT","name","description","package","scripts","lint","prettier","quoteProps","singleQuote","tabWidth","trailingComma","useTabs","devDependencies","LEFTHOOK","commitlint","extends","RELEASE_IT","release","git","commitMessage","tagName","npm","publish","github","plugins","preset","JEST","test","jest","modulePathIgnorePatterns","TURBOREPO","turbo","condition","config","example","AVAILABLE_TOOLS","exports","REQUIRED_TOOLS","ALL_TOOLS","configureTools","tools","root","packageJson","key","Object","keys","Error","join","tool","files","path","resolve","__dirname","fs","existsSync","applyTemplate","value","entries","Array","isArray","sortObjectKeys","String"],"sources":["../../src/utils/configureTools.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\nimport { applyTemplate, type TemplateConfiguration } from '../template';\nimport sortObjectKeys from './sortObjectKeys';\n\ntype Tool = {\n name: string;\n description: string;\n package: Record<string, unknown>;\n condition?: (config: TemplateConfiguration) => boolean;\n};\n\ntype Options = {\n tools: string[];\n root: string;\n packageJson: Record<string, unknown>;\n config: TemplateConfiguration;\n};\n\nconst ESLINT = {\n name: 'ESLint with Prettier',\n description: 'Lint and format code',\n package: {\n scripts: {\n lint: 'eslint \"**/*.{js,ts,tsx}\"',\n },\n prettier: {\n quoteProps: 'consistent',\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n useTabs: false,\n },\n devDependencies: {\n '@eslint/compat': '^1.3.2',\n '@eslint/eslintrc': '^3.3.1',\n '@eslint/js': '^9.35.0',\n '@react-native/eslint-config': '^0.81.1',\n 'eslint-config-prettier': '^10.1.8',\n 'eslint-plugin-prettier': '^5.5.4',\n 'eslint': '^9.35.0',\n 'prettier': '^2.8.8',\n },\n },\n};\n\nconst LEFTHOOK = {\n name: 'Lefthook with Commitlint',\n description: 'Manage Git hooks and lint commit messages',\n package: {\n commitlint: {\n extends: ['@commitlint/config-conventional'],\n },\n devDependencies: {\n '@commitlint/config-conventional': '^19.8.1',\n 'commitlint': '^19.8.1',\n 'lefthook': '^2.0.3',\n },\n },\n};\n\nconst RELEASE_IT = {\n name: 'Release It',\n description: 'Automate versioning and package publishing tasks',\n package: {\n 'scripts': {\n release: 'release-it --only-version',\n },\n 'release-it': {\n git: {\n // eslint-disable-next-line no-template-curly-in-string\n commitMessage: 'chore: release ${version}',\n // eslint-disable-next-line no-template-curly-in-string\n tagName: 'v${version}',\n },\n npm: {\n publish: true,\n },\n github: {\n release: true,\n },\n plugins: {\n '@release-it/conventional-changelog': {\n preset: {\n name: 'angular',\n },\n },\n },\n },\n 'devDependencies': {\n 'release-it': '^19.0.4',\n '@release-it/conventional-changelog': '^10.0.1',\n },\n },\n};\n\nconst JEST = {\n name: 'Jest',\n description: 'Test JavaScript and TypeScript code',\n package: {\n scripts: {\n test: 'jest',\n },\n jest: {\n preset: 'react-native',\n modulePathIgnorePatterns: [\n '<rootDir>/example/node_modules',\n '<rootDir>/lib/',\n ],\n },\n devDependencies: {\n '@types/jest': '^29.5.14',\n 'jest': '^29.7.0',\n },\n },\n};\n\nconst TURBOREPO = {\n name: 'Turborepo',\n description: 'Cache build outputs on CI',\n package: {\n devDependencies: {\n turbo: '^2.5.6',\n },\n },\n condition: (config: TemplateConfiguration) => config.example !== 'expo',\n};\n\nexport const AVAILABLE_TOOLS = {\n 'eslint': ESLINT,\n 'jest': JEST,\n 'lefthook': LEFTHOOK,\n 'release-it': RELEASE_IT,\n} as const satisfies Record<string, Tool>;\n\nconst REQUIRED_TOOLS = {\n turbo: TURBOREPO,\n} as const satisfies Record<string, Tool>;\n\nconst ALL_TOOLS = {\n ...AVAILABLE_TOOLS,\n ...REQUIRED_TOOLS,\n} as const;\n\nexport async function configureTools({\n tools,\n config,\n root,\n packageJson,\n}: Options) {\n for (const key of [\n ...tools,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n ...(Object.keys(REQUIRED_TOOLS) as (keyof typeof REQUIRED_TOOLS)[]),\n ]) {\n if (!(key in ALL_TOOLS)) {\n throw new Error(\n `Invalid tool '${key}'. Available tools are: ${Object.keys(\n AVAILABLE_TOOLS\n ).join(', ')}.`\n );\n }\n\n // @ts-expect-error: We checked the key above\n const tool: Tool = ALL_TOOLS[key];\n\n if (tool.condition && !tool.condition(config)) {\n continue;\n }\n\n const files = path.resolve(__dirname, `../../templates/tools/${key}`);\n\n if (fs.existsSync(files)) {\n await applyTemplate(config, files, root);\n }\n\n for (const [key, value] of Object.entries(tool.package)) {\n if (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)\n ) {\n if (typeof packageJson[key] === 'object' || packageJson[key] == null) {\n packageJson[key] = {\n ...packageJson[key],\n ...value,\n };\n\n if (\n key === 'dependencies' ||\n key === 'devDependencies' ||\n key === 'peerDependencies'\n ) {\n // @ts-expect-error: We know they are objects here\n packageJson[key] = sortObjectKeys(packageJson[key]);\n }\n } else {\n throw new Error(\n `Cannot merge '${key}' field because it is not an object (got '${String(packageJson[key])}').`\n );\n }\n } else {\n packageJson[key] = value;\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createMetadata = createMetadata;
|
|
7
|
+
var _package = require("../../package.json");
|
|
8
|
+
function createMetadata(answers) {
|
|
9
|
+
// Some of the passed args can already be derived from the generated package.json file.
|
|
10
|
+
const ignoredAnswers = ['name', 'directory', 'slug', 'description', 'authorName', 'authorEmail', 'authorUrl', 'repoUrl', 'example', 'reactNativeVersion', 'local'];
|
|
11
|
+
const libraryMetadata = Object.fromEntries(Object.entries(answers).filter(([answer]) => !ignoredAnswers.includes(
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
13
|
+
answer)));
|
|
14
|
+
libraryMetadata.version = _package.version;
|
|
15
|
+
return libraryMetadata;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=createMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createMetadata.js","names":["_package","require","createMetadata","answers","ignoredAnswers","libraryMetadata","Object","fromEntries","entries","filter","answer","includes","version"],"sources":["../../src/utils/createMetadata.ts"],"sourcesContent":["import { version } from '../../package.json';\nimport type { Answers } from '../prompt';\n\nexport function createMetadata(answers: Partial<Answers>) {\n // Some of the passed args can already be derived from the generated package.json file.\n const ignoredAnswers: (keyof Answers)[] = [\n 'name',\n 'directory',\n 'slug',\n 'description',\n 'authorName',\n 'authorEmail',\n 'authorUrl',\n 'repoUrl',\n 'example',\n 'reactNativeVersion',\n 'local',\n ];\n\n const libraryMetadata = Object.fromEntries(\n Object.entries(answers).filter(\n ([answer]) =>\n !ignoredAnswers.includes(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n answer as keyof Answers\n )\n )\n );\n\n libraryMetadata.version = version;\n\n return libraryMetadata;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAGO,SAASC,cAAcA,CAACC,OAAyB,EAAE;EACxD;EACA,MAAMC,cAAiC,GAAG,CACxC,MAAM,EACN,WAAW,EACX,MAAM,EACN,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,SAAS,EACT,SAAS,EACT,oBAAoB,EACpB,OAAO,CACR;EAED,MAAMC,eAAe,GAAGC,MAAM,CAACC,WAAW,CACxCD,MAAM,CAACE,OAAO,CAACL,OAAO,CAAC,CAACM,MAAM,CAC5B,CAAC,CAACC,MAAM,CAAC,KACP,CAACN,cAAc,CAACO,QAAQ;EACtB;EACAD,MACF,CACJ,CACF,CAAC;EAEDL,eAAe,CAACO,OAAO,GAAGA,gBAAO;EAEjC,OAAOP,eAAe;AACxB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-react-native-library",
|
|
3
|
-
"version": "0.55.
|
|
3
|
+
"version": "0.55.2",
|
|
4
4
|
"description": "CLI to scaffold React Native libraries",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -48,9 +48,8 @@
|
|
|
48
48
|
"github-username": "^6.0.0",
|
|
49
49
|
"kleur": "^4.1.4",
|
|
50
50
|
"ora": "^5.4.1",
|
|
51
|
-
"
|
|
52
|
-
"validate-npm-package-name": "^4.0.0"
|
|
53
|
-
"yargs": "^17.5.1"
|
|
51
|
+
"pigment": "^0.3.10",
|
|
52
|
+
"validate-npm-package-name": "^4.0.0"
|
|
54
53
|
},
|
|
55
54
|
"devDependencies": {
|
|
56
55
|
"@babel/cli": "^7.24.8",
|
|
@@ -62,9 +61,7 @@
|
|
|
62
61
|
"@types/dedent": "^0.7.0",
|
|
63
62
|
"@types/ejs": "^3.1.1",
|
|
64
63
|
"@types/fs-extra": "^9.0.13",
|
|
65
|
-
"@types/
|
|
66
|
-
"@types/validate-npm-package-name": "^3.0.3",
|
|
67
|
-
"@types/yargs": "^17.0.10"
|
|
64
|
+
"@types/validate-npm-package-name": "^3.0.3"
|
|
68
65
|
},
|
|
69
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "d91c82aa73bcedb7f5364adb0c15ce1f7a486f6e"
|
|
70
67
|
}
|
package/lib/input.js
DELETED
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.acceptedArgs = void 0;
|
|
7
|
-
exports.createMetadata = createMetadata;
|
|
8
|
-
exports.createQuestions = createQuestions;
|
|
9
|
-
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
10
|
-
var _githubUsername = _interopRequireDefault(require("github-username"));
|
|
11
|
-
var _path = _interopRequireDefault(require("path"));
|
|
12
|
-
var _validateNpmPackageName = _interopRequireDefault(require("validate-npm-package-name"));
|
|
13
|
-
var _package = require("../package.json");
|
|
14
|
-
var _constants = require("./constants");
|
|
15
|
-
var _spawn = require("./utils/spawn");
|
|
16
|
-
var _configureTools = require("./utils/configureTools");
|
|
17
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
-
const LANGUAGE_CHOICES = [{
|
|
19
|
-
title: 'Kotlin & Swift',
|
|
20
|
-
value: 'kotlin-swift',
|
|
21
|
-
types: ['nitro-module', 'nitro-view']
|
|
22
|
-
}, {
|
|
23
|
-
title: 'Kotlin & Objective-C',
|
|
24
|
-
value: 'kotlin-objc',
|
|
25
|
-
types: ['turbo-module', 'fabric-view']
|
|
26
|
-
}, {
|
|
27
|
-
title: 'JavaScript for Android, iOS & Web',
|
|
28
|
-
value: 'js',
|
|
29
|
-
types: ['library']
|
|
30
|
-
}];
|
|
31
|
-
const EXAMPLE_CHOICES = [{
|
|
32
|
-
title: 'App with Community CLI',
|
|
33
|
-
value: 'vanilla',
|
|
34
|
-
description: "provides access to app's native code",
|
|
35
|
-
disabled: false
|
|
36
|
-
}, {
|
|
37
|
-
title: 'Test App by Microsoft',
|
|
38
|
-
value: 'test-app',
|
|
39
|
-
description: "app's native code is abstracted away",
|
|
40
|
-
// Test App currently doesn't work with React Native 0.79.2
|
|
41
|
-
// due to missing `Gemfile` in the template
|
|
42
|
-
disabled: !process.env.CRNL_ENABLE_TEST_APP
|
|
43
|
-
}, {
|
|
44
|
-
title: 'App with Expo CLI',
|
|
45
|
-
value: 'expo',
|
|
46
|
-
description: 'managed expo app with web support',
|
|
47
|
-
disabled: false
|
|
48
|
-
}].filter(choice => !choice.disabled);
|
|
49
|
-
const TYPE_CHOICES = [{
|
|
50
|
-
title: 'Turbo module',
|
|
51
|
-
value: 'turbo-module',
|
|
52
|
-
description: 'integration for native APIs to JS'
|
|
53
|
-
}, {
|
|
54
|
-
title: 'Fabric view',
|
|
55
|
-
value: 'fabric-view',
|
|
56
|
-
description: 'integration for native views to JS'
|
|
57
|
-
}, {
|
|
58
|
-
title: 'Nitro module',
|
|
59
|
-
value: 'nitro-module',
|
|
60
|
-
description: 'type-safe, fast integration for native APIs to JS (experimental)'
|
|
61
|
-
}, {
|
|
62
|
-
title: 'Nitro view',
|
|
63
|
-
value: 'nitro-view',
|
|
64
|
-
description: 'integration for native views to JS using nitro for prop parsing (experimental)'
|
|
65
|
-
}, {
|
|
66
|
-
title: 'JavaScript library',
|
|
67
|
-
value: 'library',
|
|
68
|
-
description: 'supports Expo Go and Web'
|
|
69
|
-
}];
|
|
70
|
-
const acceptedArgs = exports.acceptedArgs = {
|
|
71
|
-
'slug': {
|
|
72
|
-
description: 'Name of the npm package',
|
|
73
|
-
type: 'string'
|
|
74
|
-
},
|
|
75
|
-
'description': {
|
|
76
|
-
description: 'Description of the npm package',
|
|
77
|
-
type: 'string'
|
|
78
|
-
},
|
|
79
|
-
'author-name': {
|
|
80
|
-
description: 'Name of the package author',
|
|
81
|
-
type: 'string'
|
|
82
|
-
},
|
|
83
|
-
'author-email': {
|
|
84
|
-
description: 'Email address of the package author',
|
|
85
|
-
type: 'string'
|
|
86
|
-
},
|
|
87
|
-
'author-url': {
|
|
88
|
-
description: 'URL for the package author',
|
|
89
|
-
type: 'string'
|
|
90
|
-
},
|
|
91
|
-
'repo-url': {
|
|
92
|
-
description: 'URL for the repository',
|
|
93
|
-
type: 'string'
|
|
94
|
-
},
|
|
95
|
-
'languages': {
|
|
96
|
-
description: 'Languages you want to use',
|
|
97
|
-
choices: LANGUAGE_CHOICES.map(({
|
|
98
|
-
value
|
|
99
|
-
}) => value)
|
|
100
|
-
},
|
|
101
|
-
'type': {
|
|
102
|
-
description: 'Type of library you want to develop',
|
|
103
|
-
choices: TYPE_CHOICES.map(({
|
|
104
|
-
value
|
|
105
|
-
}) => value)
|
|
106
|
-
},
|
|
107
|
-
'react-native-version': {
|
|
108
|
-
description: 'Version of React Native to use',
|
|
109
|
-
type: 'string',
|
|
110
|
-
default: _constants.SUPPORTED_REACT_NATIVE_VERSION
|
|
111
|
-
},
|
|
112
|
-
'local': {
|
|
113
|
-
description: 'Whether to create a local library',
|
|
114
|
-
type: 'boolean'
|
|
115
|
-
},
|
|
116
|
-
'example': {
|
|
117
|
-
description: 'Type of the example app to create',
|
|
118
|
-
type: 'string',
|
|
119
|
-
choices: EXAMPLE_CHOICES.map(({
|
|
120
|
-
value
|
|
121
|
-
}) => value)
|
|
122
|
-
},
|
|
123
|
-
'tools': {
|
|
124
|
-
description: 'Tools to configure',
|
|
125
|
-
type: 'array',
|
|
126
|
-
choices: Object.keys(_configureTools.AVAILABLE_TOOLS)
|
|
127
|
-
},
|
|
128
|
-
'interactive': {
|
|
129
|
-
description: 'Whether to run in interactive mode',
|
|
130
|
-
type: 'boolean'
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
async function createQuestions({
|
|
134
|
-
name,
|
|
135
|
-
local
|
|
136
|
-
}) {
|
|
137
|
-
let fullname, email;
|
|
138
|
-
try {
|
|
139
|
-
fullname = await (0, _spawn.spawn)('git', ['config', '--get', 'user.name']);
|
|
140
|
-
email = await (0, _spawn.spawn)('git', ['config', '--get', 'user.email']);
|
|
141
|
-
} catch (e) {
|
|
142
|
-
// Ignore error
|
|
143
|
-
}
|
|
144
|
-
const validateDirectory = input => {
|
|
145
|
-
if (!input) {
|
|
146
|
-
return 'Cannot be empty';
|
|
147
|
-
}
|
|
148
|
-
const targetPath = _path.default.join(process.cwd(), input);
|
|
149
|
-
if (_fsExtra.default.pathExistsSync(targetPath)) {
|
|
150
|
-
const stat = _fsExtra.default.statSync(targetPath);
|
|
151
|
-
if (!stat.isDirectory()) {
|
|
152
|
-
return 'Path exists and is not a directory';
|
|
153
|
-
}
|
|
154
|
-
const files = _fsExtra.default.readdirSync(targetPath);
|
|
155
|
-
const isEmpty = files.length === 0 || files.length === 1 && files[0] === '.git';
|
|
156
|
-
if (!isEmpty) {
|
|
157
|
-
return 'Directory already exists';
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return true;
|
|
161
|
-
};
|
|
162
|
-
const questions = [{
|
|
163
|
-
type: local == null && (await _fsExtra.default.pathExists(_path.default.join(process.cwd(), 'package.json'))) ? 'confirm' : null,
|
|
164
|
-
name: 'local',
|
|
165
|
-
message: `Looks like you're under a project folder. Do you want to create a local library?`,
|
|
166
|
-
initial: local,
|
|
167
|
-
default: false
|
|
168
|
-
}, {
|
|
169
|
-
type: (_, answers) => {
|
|
170
|
-
if (name && !(answers.local ?? local) && validateDirectory(name) === true) {
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
return 'text';
|
|
174
|
-
},
|
|
175
|
-
name: 'directory',
|
|
176
|
-
message: `Where do you want to create the library?`,
|
|
177
|
-
initial: (_, answers) => {
|
|
178
|
-
if ((answers.local ?? local) && name && !name?.includes(_path.default.sep)) {
|
|
179
|
-
return _path.default.join('modules', name);
|
|
180
|
-
}
|
|
181
|
-
return name ?? '';
|
|
182
|
-
},
|
|
183
|
-
validate: validateDirectory,
|
|
184
|
-
default: name
|
|
185
|
-
}, {
|
|
186
|
-
type: 'text',
|
|
187
|
-
name: 'slug',
|
|
188
|
-
message: 'What is the name of the npm package?',
|
|
189
|
-
initial: (_, answers) => {
|
|
190
|
-
const basename = _path.default.basename(typeof answers.directory === 'string' ? answers.directory : name ?? '');
|
|
191
|
-
if ((0, _validateNpmPackageName.default)(basename).validForNewPackages) {
|
|
192
|
-
if (/^(@|react-native)/.test(basename)) {
|
|
193
|
-
return basename;
|
|
194
|
-
}
|
|
195
|
-
return `react-native-${basename}`;
|
|
196
|
-
}
|
|
197
|
-
return '';
|
|
198
|
-
},
|
|
199
|
-
validate: input => (0, _validateNpmPackageName.default)(input).validForNewPackages || 'Must be a valid npm package name'
|
|
200
|
-
}, {
|
|
201
|
-
type: 'text',
|
|
202
|
-
name: 'description',
|
|
203
|
-
message: 'What is the description for the package?',
|
|
204
|
-
validate: input => Boolean(input) || 'Cannot be empty'
|
|
205
|
-
}, {
|
|
206
|
-
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
207
|
-
name: 'authorName',
|
|
208
|
-
message: 'What is the name of package author?',
|
|
209
|
-
initial: fullname,
|
|
210
|
-
validate: input => Boolean(input) || 'Cannot be empty'
|
|
211
|
-
}, {
|
|
212
|
-
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
213
|
-
name: 'authorEmail',
|
|
214
|
-
message: 'What is the email address for the package author?',
|
|
215
|
-
initial: email,
|
|
216
|
-
validate: input => /^\S+@\S+$/.test(input) || 'Must be a valid email address'
|
|
217
|
-
}, {
|
|
218
|
-
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
219
|
-
name: 'authorUrl',
|
|
220
|
-
message: 'What is the URL for the package author?',
|
|
221
|
-
initial: async (_, answers) => {
|
|
222
|
-
if (typeof answers.authorEmail !== 'string') {
|
|
223
|
-
return '';
|
|
224
|
-
}
|
|
225
|
-
try {
|
|
226
|
-
const username = await (0, _githubUsername.default)(answers.authorEmail);
|
|
227
|
-
if (username) {
|
|
228
|
-
return `https://github.com/${username}`;
|
|
229
|
-
}
|
|
230
|
-
} catch (e) {
|
|
231
|
-
// Ignore error
|
|
232
|
-
}
|
|
233
|
-
return '';
|
|
234
|
-
},
|
|
235
|
-
validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
|
|
236
|
-
}, {
|
|
237
|
-
type: (_, answers) => answers.local ?? local ? null : 'text',
|
|
238
|
-
name: 'repoUrl',
|
|
239
|
-
message: 'What is the URL for the repository?',
|
|
240
|
-
initial: (_, answers) => {
|
|
241
|
-
if (typeof answers.authorUrl === 'string' && typeof answers.slug === 'string' && /^https?:\/\/github.com\/[^/]+/.test(answers.authorUrl)) {
|
|
242
|
-
return `${answers.authorUrl}/${answers.slug.replace(/^@/, '').replace(/\//g, '-')}`;
|
|
243
|
-
}
|
|
244
|
-
return '';
|
|
245
|
-
},
|
|
246
|
-
validate: input => /^https?:\/\//.test(input) || 'Must be a valid URL'
|
|
247
|
-
}, {
|
|
248
|
-
type: 'select',
|
|
249
|
-
name: 'type',
|
|
250
|
-
message: 'What type of library do you want to develop?',
|
|
251
|
-
choices: TYPE_CHOICES
|
|
252
|
-
}, {
|
|
253
|
-
type: 'select',
|
|
254
|
-
name: 'languages',
|
|
255
|
-
message: 'Which languages do you want to use?',
|
|
256
|
-
choices: (_, values) => {
|
|
257
|
-
return LANGUAGE_CHOICES.filter(choice => {
|
|
258
|
-
if (choice.types && typeof values.type === 'string') {
|
|
259
|
-
// @ts-expect-error `includes doesn't support checking arbitrary types
|
|
260
|
-
return choice.types.includes(values.type);
|
|
261
|
-
}
|
|
262
|
-
return true;
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
}, {
|
|
266
|
-
type: 'select',
|
|
267
|
-
name: 'example',
|
|
268
|
-
message: 'What type of example app do you want to create?',
|
|
269
|
-
choices: (_, values) => {
|
|
270
|
-
if (local) {
|
|
271
|
-
return [{
|
|
272
|
-
title: 'None',
|
|
273
|
-
value: 'none'
|
|
274
|
-
}];
|
|
275
|
-
}
|
|
276
|
-
return EXAMPLE_CHOICES.filter(choice => {
|
|
277
|
-
if (values.type) {
|
|
278
|
-
return values.type === 'library' ? choice.value === 'expo' : choice.value !== 'expo';
|
|
279
|
-
}
|
|
280
|
-
return true;
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}, {
|
|
284
|
-
type: (_, answers) => answers.local ?? local ? null : 'multiselect',
|
|
285
|
-
name: 'tools',
|
|
286
|
-
message: 'Which tools do you want to configure?',
|
|
287
|
-
choices: Object.entries(_configureTools.AVAILABLE_TOOLS).map(([key, tool]) => ({
|
|
288
|
-
value: key,
|
|
289
|
-
title: tool.name,
|
|
290
|
-
description: tool.description,
|
|
291
|
-
selected: true
|
|
292
|
-
}))
|
|
293
|
-
}];
|
|
294
|
-
return questions;
|
|
295
|
-
}
|
|
296
|
-
function createMetadata(answers) {
|
|
297
|
-
// Some of the passed args can already be derived from the generated package.json file.
|
|
298
|
-
const ignoredAnswers = ['name', 'directory', 'slug', 'description', 'authorName', 'authorEmail', 'authorUrl', 'repoUrl', 'example', 'reactNativeVersion', 'local', 'interactive'];
|
|
299
|
-
const libraryMetadata = Object.fromEntries(
|
|
300
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
301
|
-
Object.entries(answers).filter(([answer]) => !ignoredAnswers.includes(answer)));
|
|
302
|
-
libraryMetadata.version = _package.version;
|
|
303
|
-
return libraryMetadata;
|
|
304
|
-
}
|
|
305
|
-
//# sourceMappingURL=input.js.map
|