create-react-native-library 0.54.8 → 0.55.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -51,8 +51,8 @@ async function prompt(questions, argv, options) {
51
51
  // @ts-expect-error assume the passed value is correct
52
52
  defaultAnswers[question.name] = question.default;
53
53
 
54
- // Don't prompt questions with a default value when not interactive
55
- if (!interactive) {
54
+ // Don't prompt questions with a valid default value when not interactive
55
+ if (!interactive && question.validate?.(String(question.default)) !== false) {
56
56
  continue;
57
57
  }
58
58
  }
@@ -140,13 +140,30 @@ function validate(argv, questions, onError) {
140
140
  // If we don't already have a validation message to provide a better error
141
141
  if ('choices' in question) {
142
142
  const choices = typeof question.choices === 'function' ? question.choices(undefined, argv) : question.choices;
143
- if (choices && choices.every(choice => choice.value !== value)) {
144
- if (choices.length > 1) {
145
- validation = `Must be one of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
146
- } else if (choices[0]) {
147
- validation = `Must be '${_kleur.default.green(choices[0].value)}'`;
143
+ if (choices) {
144
+ let type = question.type;
145
+ if (typeof question.type === 'function') {
146
+ type = question.type(null, argv);
147
+ }
148
+ if (type === 'multiselect') {
149
+ if (Array.isArray(value)) {
150
+ const invalidChoices = value.filter(val => choices.every(choice => choice.value !== val));
151
+ if (invalidChoices.length > 0) {
152
+ validation = `Must be an array of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
153
+ }
154
+ } else {
155
+ validation = 'Must be an array';
156
+ }
148
157
  } else {
149
- validation = false;
158
+ if (choices.every(choice => choice.value !== value)) {
159
+ if (choices.length > 1) {
160
+ validation = `Must be one of ${choices.map(choice => _kleur.default.green(choice.value)).join(', ')}`;
161
+ } else if (choices[0]) {
162
+ validation = `Must be '${_kleur.default.green(choices[0].value)}'`;
163
+ } else {
164
+ validation = false;
165
+ }
166
+ }
150
167
  }
151
168
  }
152
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","names":["_kleur","_interopRequireDefault","require","_prompts","e","__esModule","default","prompt","questions","argv","options","interactive","process","stdout","isTTY","env","TERM","CI","onCancel","exit","onError","message","console","log","validate","defaultAnswers","promptQuestions","Array","isArray","question","promptQuestion","argValue","name","String","type","choices","length","onlyChoice","value","prev","values","dynamicChoices","push","promptAnswers","prompts","missingQuestions","reduce","acc","replace","toLowerCase","map","q","kleur","blue","join","result","key","Object","entries","find","validation","undefined","every","choice","green","red"],"sources":["../../src/utils/prompt.ts"],"sourcesContent":["import kleur from 'kleur';\nimport prompts, {\n type Answers,\n type InitialReturnValue,\n type PromptType,\n} from 'prompts';\n\ntype Choice = {\n title: string;\n value: string;\n description?: string;\n};\n\nexport type Question<T extends string> = {\n name: T;\n type:\n | PromptType\n | null\n | ((\n prev: unknown,\n values: Partial<Record<T, unknown>>\n ) => PromptType | null);\n message: string;\n validate?: (value: string) => boolean | string;\n choices?:\n | Choice[]\n | ((prev: unknown, values: Partial<Record<T, unknown>>) => Choice[]);\n initial?:\n | InitialReturnValue\n | ((\n prev: unknown,\n values: Partial<Record<T, unknown>>\n ) => InitialReturnValue | Promise<InitialReturnValue>);\n default?: InitialReturnValue;\n};\n\n/**\n * Wrapper around `prompts` with additional features:\n *\n * - Improved type-safety\n * - Read answers from passed arguments\n * - Skip questions with a single choice\n * - Validate answers\n * - Exit on canceling the prompt\n * - Handle non-interactive mode\n */\nexport async function prompt<\n PromptAnswers extends Record<string, unknown>,\n Argv extends Record<string, unknown> | undefined,\n>(\n questions:\n | Question<Extract<keyof PromptAnswers, string>>[]\n | Question<Extract<keyof PromptAnswers, string>>,\n argv: Argv,\n options: prompts.Options & {\n interactive: boolean | undefined;\n }\n): Promise<PromptAnswers & Argv> {\n const interactive =\n options?.interactive ??\n (process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.CI);\n\n const onCancel = () => {\n // Exit the CLI on Ctrl+C\n process.exit(1);\n };\n\n const onError = (message: string) => {\n console.log(message);\n process.exit(1);\n };\n\n if (argv) {\n validate(argv, questions, onError);\n }\n\n const defaultAnswers = {};\n const promptQuestions: Question<Extract<keyof PromptAnswers, string>>[] = [];\n\n if (Array.isArray(questions)) {\n for (const question of questions) {\n let promptQuestion = question;\n\n // Skip questions which are passed as parameter and pass validation\n const argValue = argv?.[question.name];\n\n if (argValue && question.validate?.(String(argValue)) !== false) {\n continue;\n }\n\n const { type, choices } = question;\n\n // Track default value from questions\n if (type && question.default != null) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = question.default;\n\n // Don't prompt questions with a default value when not interactive\n if (!interactive) {\n continue;\n }\n }\n\n // Don't prompt questions with a single choice\n if (\n type === 'select' &&\n Array.isArray(question.choices) &&\n question.choices.length === 1\n ) {\n const onlyChoice = question.choices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n continue;\n }\n\n // Don't prompt dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n promptQuestion = {\n ...question,\n type: (prev, values) => {\n const dynamicChoices = choices(prev, { ...argv, ...values });\n\n if (dynamicChoices && dynamicChoices.length === 1) {\n const onlyChoice = dynamicChoices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n return null;\n }\n\n return type;\n },\n };\n }\n\n promptQuestions.push(promptQuestion);\n }\n } else {\n promptQuestions.push(questions);\n }\n\n let promptAnswers;\n\n if (interactive) {\n promptAnswers = await prompts(promptQuestions, {\n ...options,\n onCancel,\n });\n } else {\n const missingQuestions = promptQuestions.reduce<string[]>(\n (acc, question) => {\n let type = question.type;\n\n if (typeof question.type === 'function') {\n // @ts-expect-error assume the passed value is correct\n type = question.type(null, argv, null);\n }\n\n if (type != null) {\n acc.push(\n question.name\n .replace(/([A-Z]+)/g, '-$1')\n .replace(/^-/, '')\n .toLowerCase()\n );\n }\n\n return acc;\n },\n []\n );\n\n if (missingQuestions.length) {\n onError(\n `Missing values for options: ${missingQuestions\n .map((q) => kleur.blue(q))\n .join(', ')}`\n );\n }\n }\n\n const result = {\n ...argv,\n ...defaultAnswers,\n ...promptAnswers,\n };\n\n validate(result, questions, onError);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n return result as PromptAnswers & Argv;\n}\n\nfunction validate<T extends string>(\n argv: Partial<Answers<T>>,\n questions: Question<T>[] | Question<T>,\n onError: (message: string) => void\n) {\n for (const [key, value] of Object.entries(argv)) {\n if (value == null) {\n continue;\n }\n\n const question = Array.isArray(questions)\n ? questions.find((q) => q.name === key)\n : questions.name === key\n ? questions\n : null;\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, argv)\n : question.choices;\n\n if (choices && choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n onError(message);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"prompt.js","names":["_kleur","_interopRequireDefault","require","_prompts","e","__esModule","default","prompt","questions","argv","options","interactive","process","stdout","isTTY","env","TERM","CI","onCancel","exit","onError","message","console","log","validate","defaultAnswers","promptQuestions","Array","isArray","question","promptQuestion","argValue","name","String","type","choices","length","onlyChoice","value","prev","values","dynamicChoices","push","promptAnswers","prompts","missingQuestions","reduce","acc","replace","toLowerCase","map","q","kleur","blue","join","result","key","Object","entries","find","validation","undefined","invalidChoices","filter","val","every","choice","green","red"],"sources":["../../src/utils/prompt.ts"],"sourcesContent":["import kleur from 'kleur';\nimport prompts, {\n type Answers,\n type InitialReturnValue,\n type PromptType,\n} from 'prompts';\n\ntype Choice = {\n title: string;\n value: string;\n description?: string;\n};\n\nexport type Question<T extends string> = {\n name: T;\n type:\n | PromptType\n | null\n | ((\n prev: unknown,\n values: Partial<Record<T, unknown>>\n ) => PromptType | null);\n message: string;\n validate?: (value: string) => boolean | string;\n choices?:\n | Choice[]\n | ((prev: unknown, values: Partial<Record<T, unknown>>) => Choice[]);\n initial?:\n | InitialReturnValue\n | ((\n prev: unknown,\n values: Partial<Record<T, unknown>>\n ) => InitialReturnValue | Promise<InitialReturnValue>);\n default?: InitialReturnValue;\n};\n\n/**\n * Wrapper around `prompts` with additional features:\n *\n * - Improved type-safety\n * - Read answers from passed arguments\n * - Skip questions with a single choice\n * - Validate answers\n * - Exit on canceling the prompt\n * - Handle non-interactive mode\n */\nexport async function prompt<\n PromptAnswers extends Record<string, unknown>,\n Argv extends Record<string, unknown> | undefined,\n>(\n questions:\n | Question<Extract<keyof PromptAnswers, string>>[]\n | Question<Extract<keyof PromptAnswers, string>>,\n argv: Argv,\n options: prompts.Options & {\n interactive: boolean | undefined;\n }\n): Promise<PromptAnswers & Argv> {\n const interactive =\n options?.interactive ??\n (process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.CI);\n\n const onCancel = () => {\n // Exit the CLI on Ctrl+C\n process.exit(1);\n };\n\n const onError = (message: string) => {\n console.log(message);\n process.exit(1);\n };\n\n if (argv) {\n validate(argv, questions, onError);\n }\n\n const defaultAnswers = {};\n const promptQuestions: Question<Extract<keyof PromptAnswers, string>>[] = [];\n\n if (Array.isArray(questions)) {\n for (const question of questions) {\n let promptQuestion = question;\n\n // Skip questions which are passed as parameter and pass validation\n const argValue = argv?.[question.name];\n\n if (argValue && question.validate?.(String(argValue)) !== false) {\n continue;\n }\n\n const { type, choices } = question;\n\n // Track default value from questions\n if (type && question.default != null) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = question.default;\n\n // Don't prompt questions with a valid default value when not interactive\n if (\n !interactive &&\n question.validate?.(String(question.default)) !== false\n ) {\n continue;\n }\n }\n\n // Don't prompt questions with a single choice\n if (\n type === 'select' &&\n Array.isArray(question.choices) &&\n question.choices.length === 1\n ) {\n const onlyChoice = question.choices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n continue;\n }\n\n // Don't prompt dynamic questions with a single choice\n if (type === 'select' && typeof choices === 'function') {\n promptQuestion = {\n ...question,\n type: (prev, values) => {\n const dynamicChoices = choices(prev, { ...argv, ...values });\n\n if (dynamicChoices && dynamicChoices.length === 1) {\n const onlyChoice = dynamicChoices[0];\n\n if (onlyChoice?.value) {\n // @ts-expect-error assume the passed value is correct\n defaultAnswers[question.name] = onlyChoice.value;\n }\n\n return null;\n }\n\n return type;\n },\n };\n }\n\n promptQuestions.push(promptQuestion);\n }\n } else {\n promptQuestions.push(questions);\n }\n\n let promptAnswers;\n\n if (interactive) {\n promptAnswers = await prompts(promptQuestions, {\n ...options,\n onCancel,\n });\n } else {\n const missingQuestions = promptQuestions.reduce<string[]>(\n (acc, question) => {\n let type = question.type;\n\n if (typeof question.type === 'function') {\n // @ts-expect-error assume the passed value is correct\n type = question.type(null, argv, null);\n }\n\n if (type != null) {\n acc.push(\n question.name\n .replace(/([A-Z]+)/g, '-$1')\n .replace(/^-/, '')\n .toLowerCase()\n );\n }\n\n return acc;\n },\n []\n );\n\n if (missingQuestions.length) {\n onError(\n `Missing values for options: ${missingQuestions\n .map((q) => kleur.blue(q))\n .join(', ')}`\n );\n }\n }\n\n const result = {\n ...argv,\n ...defaultAnswers,\n ...promptAnswers,\n };\n\n validate(result, questions, onError);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion\n return result as PromptAnswers & Argv;\n}\n\nfunction validate<T extends string>(\n argv: Partial<Answers<T>>,\n questions: Question<T>[] | Question<T>,\n onError: (message: string) => void\n) {\n for (const [key, value] of Object.entries(argv)) {\n if (value == null) {\n continue;\n }\n\n const question = Array.isArray(questions)\n ? questions.find((q) => q.name === key)\n : questions.name === key\n ? questions\n : null;\n\n if (question == null) {\n continue;\n }\n\n let validation;\n\n // We also need to guard against invalid choices\n // If we don't already have a validation message to provide a better error\n if ('choices' in question) {\n const choices =\n typeof question.choices === 'function'\n ? question.choices(undefined, argv)\n : question.choices;\n\n if (choices) {\n let type = question.type;\n\n if (typeof question.type === 'function') {\n type = question.type(null, argv);\n }\n\n if (type === 'multiselect') {\n if (Array.isArray(value)) {\n const invalidChoices = value.filter((val) =>\n choices.every((choice) => choice.value !== val)\n );\n\n if (invalidChoices.length > 0) {\n validation = `Must be an array of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n }\n } else {\n validation = 'Must be an array';\n }\n } else {\n if (choices.every((choice) => choice.value !== value)) {\n if (choices.length > 1) {\n validation = `Must be one of ${choices\n .map((choice) => kleur.green(choice.value))\n .join(', ')}`;\n } else if (choices[0]) {\n validation = `Must be '${kleur.green(choices[0].value)}'`;\n } else {\n validation = false;\n }\n }\n }\n }\n }\n\n if (validation == null && question.validate) {\n validation = question.validate(String(value));\n }\n\n if (validation != null && validation !== true) {\n let message = `Invalid value ${kleur.red(\n String(value)\n )} passed for ${kleur.blue(key)}`;\n\n if (typeof validation === 'string') {\n message += `: ${validation}`;\n }\n\n onError(message);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-react-native-library",
3
- "version": "0.54.8",
3
+ "version": "0.55.1",
4
4
  "description": "CLI to scaffold React Native libraries",
5
5
  "keywords": [
6
6
  "react-native",
@@ -22,7 +22,7 @@
22
22
  "bugs": {
23
23
  "url": "https://github.com/callstack/react-native-builder-bob/issues"
24
24
  },
25
- "homepage": "https://callstack.github.io/react-native-builder-bob/create",
25
+ "homepage": "https://oss.callstack.com/react-native-builder-bob/create",
26
26
  "main": "lib/index.js",
27
27
  "bin": "bin/create-react-native-library",
28
28
  "files": [
@@ -66,5 +66,5 @@
66
66
  "@types/validate-npm-package-name": "^3.0.3",
67
67
  "@types/yargs": "^17.0.10"
68
68
  },
69
- "gitHead": "9611ee56aa38ad60df5145707847a876b15650b4"
69
+ "gitHead": "b70f280b1bb415ee18a2e82ef200ca995a4dbbcd"
70
70
  }
@@ -25,8 +25,10 @@ jobs:
25
25
  - name: Setup
26
26
  uses: ./.github/actions/setup
27
27
 
28
+ <% if (tools.includes('eslint')) { -%>
28
29
  - name: Lint files
29
30
  run: yarn lint
31
+ <% } -%>
30
32
 
31
33
  - name: Typecheck files
32
34
  run: yarn typecheck