@sanity/plugin-kit

7.0.28.0.0
dist/init-HxqT5UQG.js.map
dist/init-HxqT5UQG.js.mapDeleted
−1
Index: package/dist/init-HxqT5UQG.js.map
===================================================================
--- package/dist/init-HxqT5UQG.js.map
+++ package/dist/init-HxqT5UQG.js.map
@@ -1,1 +0,0 @@
-{"version":3,"file":"init-HxqT5UQG.js","names":["applyPreset","pkg.name","pkg.version","isValidEmail","applyPreset","log","addDevDependencies","log","sharedFlags"],"sources":["../src/configs/default-source.ts","../src/configs/eslint.ts","../src/configs/git.ts","../src/configs/pkg-config.ts","../src/configs/prettier.ts","../src/configs/tsconfig.ts","../src/presets/renovatebot.ts","../src/util/readme.ts","../src/util/request.ts","../src/util/user.ts","../src/presets/semver-workflow.ts","../src/presets/ui.ts","../src/presets/presets.ts","../src/actions/inject.ts","../src/actions/init.ts"],"sourcesContent":["import outdent from 'outdent'\n\nimport type {PackageJson} from '../actions/verify/types'\n\nexport function defaultSourceJs(pkg: PackageJson) {\n  return (\n    outdent`\n  import {definePlugin} from 'sanity'\n\n  /**\n   * Usage in sanity.config.js (or .ts)\n   *\n   * \\`\\`\\`js\n   * import {defineConfig} from 'sanity'\n   * import {myPlugin} from '${pkg.name}'\n   *\n   * export default defineConfig({\n   *   // ...\n   *   plugins: [myPlugin({})],\n   * })\n   * \\`\\`\\`\n   *\n   * @public\n   */\n  export const myPlugin = definePlugin((config = {}) => {\n    // eslint-disable-next-line no-console\n    console.log(\\`hello from ${pkg.name}\\`)\n    return {\n      name: '${pkg.name}',\n    }\n  })\n`.trimStart() + '\\n'\n  )\n}\n\nexport function defaultSourceTs(pkg: PackageJson) {\n  return (\n    outdent`\n  import {definePlugin} from 'sanity'\n\n  interface MyPluginConfig {\n    /* nothing here yet */\n  }\n\n  /**\n   * Usage in \\`sanity.config.ts\\` (or .js)\n   *\n   * \\`\\`\\`ts\n   * import {defineConfig} from 'sanity'\n   * import {myPlugin} from '${pkg.name}'\n   *\n   * export default defineConfig({\n   *   // ...\n   *   plugins: [myPlugin()],\n   * })\n   * \\`\\`\\`\n   *\n   * @public\n   */\n  export const myPlugin = definePlugin<MyPluginConfig | void>((config = {}) => {\n    // eslint-disable-next-line no-console\n    console.log('hello from ${pkg.name}')\n    return {\n      name: '${pkg.name}',\n    }\n  })\n`.trimStart() + '\\n'\n  )\n}\n","import type {InitFlags} from '../actions/init'\nimport type {InjectTemplate} from '../actions/inject'\n\nexport function eslintrcTemplate(options: {flags: InitFlags}): InjectTemplate {\n  const {flags} = options\n\n  const eslintConfig = {\n    root: true,\n    env: {\n      node: true,\n      browser: true,\n    },\n    extends: [\n      'sanity',\n      flags.typescript && 'sanity/typescript',\n      'sanity/react',\n      'plugin:react-hooks/recommended',\n      flags.prettier && 'plugin:prettier/recommended',\n      'plugin:react/jsx-runtime',\n    ].filter(Boolean),\n  }\n\n  return {\n    type: 'template',\n    force: flags.force,\n    to: '.eslintrc',\n    value: JSON.stringify(eslintConfig, null, 2),\n  }\n}\n\nexport function eslintignoreTemplate(options: {flags: InitFlags; outDir: string}): InjectTemplate {\n  const {flags, outDir} = options\n\n  const patterns = [\n    '.eslintrc.js',\n    'commitlint.config.js',\n    outDir,\n    'lint-staged.config.js',\n    'package.config.ts',\n    flags.typescript ? '*.js' : '',\n  ].filter(Boolean)\n\n  patterns.sort()\n\n  return {\n    type: 'template',\n    force: flags.force,\n    to: '.eslintignore',\n    value: patterns.join('\\n'),\n  }\n}\n","import {outdent} from 'outdent'\n\nimport type {InjectTemplate} from '../actions/inject'\n\nexport function gitignoreTemplate(): InjectTemplate {\n  return {\n    type: 'template',\n    to: '.gitignore',\n    value: outdent`\n      # Logs\n      logs\n      *.log\n      npm-debug.log*\n\n      # Runtime data\n      pids\n      *.pid\n      *.seed\n\n      # Directory for instrumented libs generated by jscoverage/JSCover\n      lib-cov\n\n      # Coverage directory used by tools like istanbul\n      coverage\n\n      # nyc test coverage\n      .nyc_output\n\n      # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n      .grunt\n\n      # node-waf configuration\n      .lock-wscript\n\n      # Compiled binary addons (http://nodejs.org/api/addons.html)\n      build/Release\n\n      # Dependency directories\n      node_modules\n      jspm_packages\n\n      # Optional npm cache directory\n      .npm\n\n      # Optional REPL history\n      .node_repl_history\n\n      # macOS finder cache file\n      .DS_Store\n\n      # VS Code settings\n      .vscode\n\n      # IntelliJ\n      .idea\n      *.iml\n\n      # Cache\n      .cache\n\n      # Yalc\n      .yalc\n      yalc.lock\n\n      # npm package zips\n      *.tgz\n    `,\n  }\n}\n","import {outdent} from 'outdent'\n\nimport type {InitFlags} from '../actions/init'\nimport type {InjectTemplate} from '../actions/inject'\n\nexport function pkgConfigTemplate(options: {outDir: string; flags: InitFlags}): InjectTemplate {\n  const {flags, outDir} = options\n\n  return {\n    type: 'template',\n    force: flags.force,\n    // Always a `.ts` config: plugins are ESM (`\"type\": \"module\"`), so `@sanity/pkg-utils`\n    // loads it without needing a `.mts`/`.mjs` extension to force ESM interpretation.\n    to: 'package.config.ts',\n    value: outdent`\n      import {defineConfig} from '@sanity/pkg-utils'\n\n      export default defineConfig({\n        dist: '${outDir}',\n        tsconfig: 'tsconfig.${outDir}.json',\n\n        // Remove this block to enable strict export validation\n        extract: {\n          rules: {\n            'ae-incompatible-release-tags': 'off',\n            'ae-internal-missing-underscore': 'off',\n            'ae-missing-release-tag': 'off',\n          },\n        },\n      })\n    `,\n  }\n}\n","import type {InjectTemplate} from '../actions/inject'\n\nexport function prettierignoreTemplate(options: {outDir: string}): InjectTemplate {\n  const {outDir} = options\n\n  return {\n    type: 'template',\n    to: '.prettierignore',\n    value: [outDir, 'pnpm-lock.yaml', 'yarn.lock', 'package-lock.json'].join('\\n'),\n  }\n}\n","import {outdent} from 'outdent'\n\nimport type {InitFlags} from '../actions/init'\nimport type {InjectTemplate} from '../actions/inject'\n\nexport function tsconfigTemplate(options: {flags: InitFlags}): InjectTemplate {\n  const {flags} = options\n\n  return {\n    type: 'template',\n    force: flags.force,\n    to: 'tsconfig.json',\n    value: outdent`\n      {\n        \"extends\": \"./tsconfig.settings\",\n        \"include\": [\"./src\", \"./package.config.ts\"]\n      }\n    `,\n  }\n}\n\nexport function tsconfigTemplateDist(options: {outDir: string; flags: InitFlags}): InjectTemplate {\n  const {flags, outDir} = options\n\n  return {\n    type: 'template',\n    force: flags.force,\n    to: `tsconfig.${outDir}.json`,\n    value: outdent`\n      {\n        \"extends\": \"./tsconfig.settings\",\n        \"include\": [\"./src\"],\n        \"exclude\": [\n          \"./src/**/__fixtures__\",\n          \"./src/**/__mocks__\",\n          \"./src/**/*.test.ts\",\n          \"./src/**/*.test.tsx\"\n        ]\n      }\n    `,\n  }\n}\n\nexport function tsconfigTemplateSettings(options: {\n  outDir: string\n  flags: InitFlags\n}): InjectTemplate {\n  const {flags, outDir} = options\n\n  return {\n    type: 'template',\n    force: flags.force,\n    to: `tsconfig.settings.json`,\n    value: outdent`\n      {\n        \"compilerOptions\": {\n          \"rootDir\": \".\",\n          \"outDir\": \"./${outDir}\",\n\n          \"target\": \"esnext\",\n          \"jsx\": \"preserve\",\n          \"module\": \"preserve\",\n          \"moduleResolution\": \"bundler\",\n          \"esModuleInterop\": true,\n          \"resolveJsonModule\": true,\n          \"moduleDetection\": \"force\",\n          \"strict\": true,\n          \"allowSyntheticDefaultImports\": true,\n          \"skipLibCheck\": true,\n          \"forceConsistentCasingInFileNames\": true,\n          \"isolatedModules\": true,\n\n          // Don't emit by default, pkg-utils will ignore this when generating .d.ts files\n          \"noEmit\": true\n        }\n      }\n    `,\n  }\n}\n","import {type InjectOptions, writeAssets} from '../actions/inject'\nimport type {Preset} from './presets'\n\nexport const renovatePreset: Preset = {\n  name: 'renovatebot',\n  description: 'Files to enable renovatebot.',\n  apply: applyPreset,\n}\n\nasync function applyPreset(options: InjectOptions) {\n  await writeAssets(\n    [\n      {\n        type: 'copy',\n        from: ['renovatebot', 'renovate.json'],\n        to: 'renovate.json',\n      },\n    ],\n    options,\n  )\n}\n","import licenses from '@rexxars/choosealicense-list'\nimport outdent from 'outdent'\n\nimport type {PackageData} from '../actions/inject'\nimport type {User} from './user'\n\nexport function generateReadme(data: PackageData) {\n  const {user, pluginName, license} = data\n\n  return (\n    outdent`\n    # ${pluginName}\n\n\n    ${installationSnippet(pluginName ?? 'unknown')}\n\n    ## Usage\n\n    Add it as a plugin in \\`sanity.config.ts\\` (or .js):\n\n    \\`\\`\\`ts\n    import {defineConfig} from 'sanity'\n    import {myPlugin} from '${pluginName}'\n\n    export default defineConfig({\n      //...\n      plugins: [myPlugin({})],\n    })\n    \\`\\`\\`\n\n    ${getLicenseText(license?.id, user?.name ? (user as User) : undefined)}\n    ${developTestSnippet()}\n  ` + '\\n'\n  )\n}\n\nexport function installationSnippet(packageName: string) {\n  return outdent`\n    ## Installation\n\n    \\`\\`\\`sh\n    npm install ${packageName}\n    \\`\\`\\`\n    `\n}\n\nexport function developTestSnippet() {\n  return outdent`\n    ## Develop & test\n\n    This plugin uses [@sanity/plugin-kit](https://github.com/sanity-io/plugin-kit)\n    with default configuration for build & watch scripts.\n\n    See [Testing a plugin in Sanity Studio](https://github.com/sanity-io/plugin-kit#testing-a-plugin-in-sanity-studio)\n    on how to run this plugin with hotreload in the studio.\n  `\n}\n\nexport function getLicenseText(licenseId?: string, user?: User) {\n  if (!licenseId) {\n    return ''\n  }\n\n  const license = licenses.find(licenseId)\n  let licenseName: string | undefined = license ? license.title : undefined\n  licenseName = licenseName?.replace(/\\s+license$/i, '')\n\n  let licenseText = '## License\\n'\n  if (licenseName && user?.name) {\n    licenseText = `${licenseText}\\n[${licenseName}](LICENSE) © ${user?.name}\\n`\n  } else if (licenseName) {\n    licenseText = `${licenseText}\\n[${licenseName}](LICENSE)\\n`\n  } else {\n    licenseText = `${licenseText}\\nSee [LICENSE](LICENSE)`\n  }\n\n  return licenseText\n}\n\nexport function isDefaultGitHubReadme(readme: string) {\n  if (!readme) {\n    return false\n  }\n\n  const lines = readme.split('\\n', 20).filter(Boolean)\n\n  // title + _optional_ description\n  return lines.length <= 2 && lines[0].startsWith('#')\n}\n","import {createRequester} from 'get-it'\n\nimport pkg from '../../package.json'\n\nexport const requester = createRequester({\n  headers: {'User-Agent': `${pkg.name}@${pkg.version}`},\n  as: 'json',\n})\n","import {execSync} from 'child_process'\nimport path from 'path'\n\nimport {validate as isValidEmail} from 'email-validator'\nimport xdgBasedir from 'xdg-basedir'\n\nimport type {InjectOptions} from '../actions/inject'\nimport type {PackageJson} from '../actions/verify/types'\nimport {readJsonFile} from './files'\nimport {prompt} from './prompt'\nimport {requester} from './request'\n\nexport interface User {\n  name: string\n  email?: string\n}\n\nexport async function getUserInfo(\n  {requireUserConfirmation, flags}: InjectOptions,\n  pkg?: PackageJson,\n): Promise<User | undefined> {\n  const userInfo =\n    getPackageUserInfo({author: flags.author ?? pkg?.author}) ||\n    (await getSanityUserInfo()) ||\n    (await getGitUserInfo())\n  if (requireUserConfirmation) {\n    return promptForInfo(userInfo)\n  }\n\n  return userInfo\n}\n\nfunction getPackageUserInfo(pkg?: {\n  author?:\n    | string\n    | {\n        name: string\n        email?: string\n      }\n}): User | undefined {\n  let author = pkg?.author\n  if (!author) {\n    return undefined\n  }\n\n  if (author && typeof author !== 'string') {\n    return author\n  } else if (!author.includes('@')) {\n    return {name: author}\n  }\n\n  const [pre, ...post] = author.replace(/[<>[\\]]/g, '').split(/@/)\n  const nameParts = pre.split(/\\s+/)\n  const email = [nameParts[nameParts.length - 1], ...post].join('@')\n  const name = nameParts.slice(0, -1).join(' ')\n  return {name, email}\n}\n\nasync function promptForInfo(defValue?: User) {\n  const name = await prompt('Author name', {\n    filter: filterString,\n    default: defValue && defValue.name,\n    validate: requiredString,\n  })\n\n  const email = await prompt('Author email', {\n    filter: filterString,\n    default: defValue && defValue.email,\n    validate: validOrEmptyEmail,\n  })\n\n  return {name, email}\n}\n\nasync function getSanityUserInfo(): Promise<User | undefined> {\n  try {\n    const data = await readJsonFile<{authToken?: string}>(\n      path.join(xdgBasedir.config ?? '', 'sanity', 'config.json'),\n    )\n    const token = data?.authToken\n\n    if (!token) {\n      return undefined\n    }\n\n    const {body: user} = await requester<User>({\n      url: 'https://api.sanity.io/v1/users/me',\n      as: 'json',\n      headers: {Authorization: `Bearer ${token}`},\n    })\n\n    if (!user) {\n      return undefined\n    }\n\n    const {name, email} = user\n    return {name, email}\n  } catch {\n    return undefined\n  }\n}\n\nasync function getGitUserInfo(): Promise<User | undefined> {\n  try {\n    const name = execSync('git config user.name', {encoding: 'utf8'}).trim()\n    const email = execSync('git config user.email', {encoding: 'utf8'}).trim()\n\n    if (!name) {\n      return undefined\n    }\n\n    return {name, email: email || undefined}\n  } catch {\n    return undefined\n  }\n}\n\nfunction filterString(val: string) {\n  return (val || '').trim()\n}\n\nfunction requiredString(value: string) {\n  return value.length > 1 ? true : 'Required'\n}\n\nfunction validOrEmptyEmail(value: string): true | string {\n  if (!value) {\n    return true\n  }\n\n  return isValidEmail(value) ? true : 'Must either be a valid email or empty'\n}\n","import path from 'path'\n\nimport chalk from 'chalk'\nimport outdent from 'outdent'\n\nimport {type Injectable, type InjectOptions, writeAssets} from '../actions/inject'\nimport type {PackageJson} from '../actions/verify/types'\nimport {\n  addPackageJsonScripts,\n  addScript,\n  getPackage,\n  sortKeys,\n  writePackageJsonDirect,\n} from '../npm/package'\nimport {resolveLatestVersions} from '../npm/resolveLatestVersions'\nimport {errorToUndefined} from '../util/errorToUndefined'\nimport {readFile, writeFile} from '../util/files'\nimport log from '../util/log'\nimport {developTestSnippet, getLicenseText, installationSnippet} from '../util/readme'\nimport {getUserInfo} from '../util/user'\nimport type {Preset} from './presets'\n\nexport const semverWorkflowPreset: Preset = {\n  name: 'semver-workflow',\n  description:\n    'Files and dependencies for conventional-commits, github workflow and semantic-release.',\n  apply: applyPreset,\n}\n\nconst info = (write: boolean, msg: string, ...args: string[]) => write && log.info(msg, ...args)\n\nasync function applyPreset(options: InjectOptions) {\n  await writeAssets(semverWorkflowFiles(), options)\n  await addPrepareScript(options)\n  await addDevDependencies(options)\n  await updateReadme(options)\n}\n\nasync function addPrepareScript(options: InjectOptions) {\n  const pkg = await getPackage(options)\n  const didWrite = await addPackageJsonScripts(pkg, options, (scripts) => {\n    scripts.prepare = addScript(`husky`, scripts.prepare)\n    return scripts\n  })\n  info(didWrite, 'Added prepare script to package.json')\n}\n\nasync function addDevDependencies(options: InjectOptions) {\n  const pkg = await getPackage(options)\n  const devDeps = sortKeys({\n    ...pkg.devDependencies,\n    ...(await semverWorkflowDependencies()),\n  })\n  const newPkg = {...pkg}\n  newPkg.devDependencies = devDeps\n  await writePackageJsonDirect(newPkg, options)\n  log.info('Updated devDependencies.')\n\n  log.info(\n    chalk.green(\n      outdent`\n        semantic-release preset injected.\n\n        Please confer\n        https://github.com/sanity-io/plugin-kit/blob/main/docs/semver-workflow.md#manual-steps-after-inject\n        to finalize configuration for this preset.\n  `.trim(),\n    ),\n  )\n}\n\nasync function updateReadme(options: InjectOptions) {\n  const {basePath} = options\n\n  const readmePath = path.join(basePath, 'README.md')\n  const readme = (await readFile(readmePath, 'utf8').catch(errorToUndefined)) ?? ''\n\n  const {install, usage, developTest, license, releaseSnippet} = await readmeSnippets(options)\n\n  const prependSections = missingSections(readme, [install, usage])\n  const appendSections = missingSections(readme, [license, developTest, releaseSnippet])\n\n  if (prependSections.length || appendSections.length) {\n    const updatedReadme = [...prependSections, readme, ...appendSections]\n      .filter(Boolean)\n      .join('\\n\\n')\n    await writeFile(readmePath, updatedReadme, {encoding: 'utf8'})\n    log.info('Updated README. Please review the changes.')\n  }\n}\n\nasync function readmeSnippets(options: InjectOptions) {\n  const pkg = await getPackage(options)\n  const user = await getUserInfo(options, pkg)\n\n  const bestEffortUrl = readmeBaseurl(pkg)\n\n  const install = installationSnippet(pkg.name ?? 'unknown')\n\n  const usage = outdent`\n    ## Usage\n  `\n\n  const license = getLicenseText(typeof pkg.license === 'string' ? pkg.license : undefined, user)\n\n  const releaseSnippet = outdent`\n    ### Release new version\n\n    Run [\"CI & Release\" workflow](${bestEffortUrl}/actions/workflows/main.yml).\n    Make sure to select the main branch and check \"Release new version\".\n\n    Semantic release will only release on configured branches, so it is safe to run release on any branch.\n  `\n\n  return {\n    install,\n    usage,\n    license,\n    developTest: developTestSnippet(),\n    releaseSnippet,\n  }\n}\n\n/**\n * Returns sections that do not exist \"close enough\" in readme\n */\nexport function missingSections(readme: string, sections: string[]) {\n  return sections.filter((section) => !closeEnough(section, readme))\n}\n\n/**\n * a and b are considered \"close enough\" if > 50% of a lines exist in b lines\n * @param a\n * @param b\n */\nfunction closeEnough(a: string, b: string) {\n  const aLines = a.split('\\n')\n  const bLines = b.split('\\n')\n\n  const matchingLines = aLines.filter((line) => bLines.find((bLine) => bLine === line)).length\n  const isCloseEnough = matchingLines >= aLines.length * 0.5\n  return isCloseEnough\n}\n\nfunction semverWorkflowFiles(): Injectable[] {\n  const base: Injectable[] = [\n    {\n      type: 'copy',\n      from: ['.github', 'workflows', 'main.yml'],\n      to: ['.github', 'workflows', 'main.yml'],\n    },\n    {type: 'copy', from: ['.husky', 'commit-msg'], to: ['.husky', 'commit-msg']},\n    {type: 'copy', from: ['.husky', 'pre-commit'], to: ['.husky', 'pre-commit']},\n    {type: 'copy', from: ['.releaserc.json'], to: '.releaserc.json'},\n    {type: 'copy', from: ['commitlint.template.js'], to: 'commitlint.config.js'},\n    {type: 'copy', from: ['lint-staged.template.js'], to: 'lint-staged.config.js'},\n  ]\n\n  return base.map((fromTo) => {\n    if (fromTo.type === 'copy') {\n      return {\n        ...fromTo,\n        from: ['semver-workflow', ...fromTo.from],\n      }\n    }\n\n    return fromTo\n  })\n}\n\nasync function semverWorkflowDependencies(): Promise<Record<string, string>> {\n  return resolveLatestVersions([\n    '@commitlint/cli',\n    '@commitlint/config-conventional',\n    '@sanity/semantic-release-preset',\n    'husky',\n    'lint-staged',\n  ])\n}\n\nexport function readmeBaseurl(pkg: PackageJson) {\n  return ((pkg.repository?.url ?? pkg.homepage ?? 'TODO') as string)\n    .replace(/.+:\\/\\//g, 'https://')\n    .replace(/\\.git/g, '')\n    .replace(/[email protected]\\//g, 'github.com/')\n    .replace(/[email protected]:/g, 'https://github.com/')\n    .replace(/#.+/g, '')\n}\n","import chalk from 'chalk'\n\nimport type {InjectOptions} from '../actions/inject'\nimport {forcedDevPackageVersions, forcedPackageVersions} from '../configs/forced-package-versions'\nimport {forceDependencyVersions, getPackage, sortKeys, writePackageJsonDirect} from '../npm/package'\nimport {resolveLatestVersions} from '../npm/resolveLatestVersions'\nimport log from '../util/log'\nimport type {Preset} from './presets'\n\nexport const ui: Preset = {\n  name: 'ui',\n  description: '`@sanity/ui` and dependencies',\n  apply: applyPreset,\n}\n\nasync function applyPreset(options: InjectOptions) {\n  await addDependencies(options)\n  await addDevDependencies(options)\n\n  log.info(chalk.green('ui preset injected'))\n}\n\nasync function addDependencies(options: InjectOptions) {\n  const pkg = await getPackage(options)\n  const newDeps = sortKeys(\n    forceDependencyVersions(\n      {\n        ...pkg.dependencies,\n        ...(await resolveDependencyList()),\n      },\n      forcedPackageVersions,\n    ),\n  )\n  const newPkg = {...pkg}\n  newPkg.dependencies = newDeps\n  await writePackageJsonDirect(newPkg, options)\n  log.info('Updated dependencies.')\n}\n\nasync function addDevDependencies(options: InjectOptions) {\n  const pkg = await getPackage(options)\n  const newDeps = sortKeys(\n    forceDependencyVersions(\n      {\n        ...pkg.devDependencies,\n        ...(await resolveDevDependencyList()),\n      },\n      forcedDevPackageVersions,\n    ),\n  )\n  const newPkg = {...pkg}\n  newPkg.devDependencies = newDeps\n  await writePackageJsonDirect(newPkg, options)\n  log.info('Updated devDependencies.')\n}\n\nasync function resolveDependencyList(): Promise<Record<string, string>> {\n  return resolveLatestVersions(['@sanity/icons', '@sanity/ui'])\n}\n\nasync function resolveDevDependencyList(): Promise<Record<string, string>> {\n  return resolveLatestVersions([\n    // install the peer dependencies of `@sanity/ui` as dev dependencies\n    'react',\n    'react-dom',\n    'styled-components',\n  ])\n}\n","import type {InjectOptions} from '../actions/inject'\nimport {renovatePreset} from './renovatebot'\nimport {semverWorkflowPreset} from './semver-workflow'\nimport {ui} from './ui'\n\nexport interface Preset {\n  name: string\n  description: string\n  apply: (options: InjectOptions) => Promise<void>\n}\n\nconst presets: Preset[] = [semverWorkflowPreset, renovatePreset, ui]\nconst presetNames = presets.map((p) => p?.name)\n\nexport function presetHelpList(padStart: number) {\n  return presets\n    .map((p) => `${''.padStart(padStart)}${p.name.padEnd(20)}${p.description}`)\n    .join('\\n')\n}\n\nexport async function injectPresets(options: InjectOptions) {\n  if (options.flags.presetOnly && !options.flags.preset?.length) {\n    throw new Error('--preset-only, but no --preset [preset-name] was provided.')\n  }\n\n  const applyPresets = presetsFromInput(options.flags.preset)\n  for (const preset of applyPresets) {\n    await preset.apply(options)\n  }\n}\n\nfunction presetsFromInput(inputPresets: string[] | undefined): Preset[] {\n  if (!inputPresets) {\n    return []\n  }\n  const unknownPresets = inputPresets.filter((p) => !presetNames.includes(p))\n  if (unknownPresets.length) {\n    throw new Error(\n      `Unknown --preset(s): [${unknownPresets.join(', ')}]. Must be one of: [${presetNames.join(\n        ', ',\n      )}]`,\n    )\n  }\n\n  return inputPresets\n    .filter(onlyUnique)\n    .map((presetName) => presets.find((p) => p.name === presetName))\n    .filter((p): p is Preset => !!p)\n}\n\nfunction onlyUnique(value: string, index: number, arr: string[]) {\n  return arr.indexOf(value) === index\n}\n","import path from 'path'\nimport {fileURLToPath} from 'url'\n\nimport licenses from '@rexxars/choosealicense-list'\nimport gitRemoteOriginUrl from 'git-remote-origin-url'\n\nimport {eslintignoreTemplate, eslintrcTemplate} from '../configs/eslint'\nimport {gitignoreTemplate} from '../configs/git'\nimport {pkgConfigTemplate} from '../configs/pkg-config'\nimport {prettierignoreTemplate} from '../configs/prettier'\nimport {tsconfigTemplateDist, tsconfigTemplate, tsconfigTemplateSettings} from '../configs/tsconfig'\nimport {addBuildScripts, getPackage, writePackageJson} from '../npm/package'\nimport {injectPresets} from '../presets/presets'\nimport {errorToUndefined} from '../util/errorToUndefined'\nimport {\n  copyFileWithOverwritePrompt,\n  fileExists,\n  readFile,\n  writeFile,\n  writeFileWithOverwritePrompt,\n} from '../util/files'\nimport log from '../util/log'\nimport {prompt, promptForPackageName, promptForRepoOrigin} from '../util/prompt'\nimport {generateReadme, isDefaultGitHubReadme} from '../util/readme'\nimport {getUserInfo} from '../util/user'\nimport type {InitFlags} from './init'\nimport type {PackageJson} from './verify/types'\n\nconst bannedFields = ['login', 'description', 'projecturl', 'email']\nconst preferredLicenses = ['MIT', 'ISC', 'BSD-3-Clause']\nconst otherLicenses = Object.keys(licenses.list).filter((id) => {\n  const license = licenses.list[id]\n  return (\n    !preferredLicenses.includes(id) &&\n    !bannedFields.some((field) => license.body.includes(`[${field}]`))\n  )\n})\n\nexport interface InjectCopyFromTo {\n  type: 'copy'\n  from: string | string[]\n  to: string | string[]\n}\n\nexport interface InjectTemplate {\n  type: 'template'\n  to: string | string[]\n  value: string\n  force?: boolean\n}\n\nexport type Injectable = InjectCopyFromTo | InjectTemplate\n\nexport interface InjectOptions {\n  basePath: string\n  requireUserConfirmation?: boolean\n  flags: InitFlags\n  dependencies?: Record<string, string>\n  devDependencies?: Record<string, string>\n  peerDependencies?: Record<string, string>\n  validate?: boolean\n  outDir: string\n}\n\nexport interface PackageData {\n  user?: {name?: string; email?: string}\n  pluginName?: string\n  license?: {id: string; text: string}\n  description?: string\n  pkg?: PackageJson\n  gitOrigin?: string\n}\n\nexport async function inject(options: InjectOptions) {\n  if (options.flags.presetOnly) {\n    log.info('Only apply presets, skipping default inject.')\n  } else {\n    await injectBase(options)\n  }\n  await injectPresets(options)\n}\n\nasync function injectBase(options: InjectOptions) {\n  const {basePath, flags, requireUserConfirmation} = options\n  const info = (write: boolean, msg: string, ...args: string[]) => write && log.info(msg, ...args)\n  // Gather data\n  const pkg = await getPackage(options).catch(errorToUndefined)\n  log.debug('Plugin has package.json: %s', pkg ? 'yes' : 'no')\n\n  const user = await getUserInfo(options, pkg)\n  log.debug('User information: %o', user)\n\n  const pkgName = flags.name ?? pkg?.name\n  const pluginName =\n    requireUserConfirmation || !pkgName ? await promptForPackageName(options, pkgName) : pkgName\n\n  log.debug('Plugin name: %s', pluginName)\n\n  const license = await getLicense(flags, {user, pluginName, pkg, requireUserConfirmation})\n  const licenseChanged = (pkg && pkg.license) !== (license && license.id)\n  log.debug('License: %s', license ? license.id : '<none>')\n\n  const description = await getProjectDescription(basePath, pkg, requireUserConfirmation)\n  log.debug('Description: %s', description || '<none>')\n\n  const repoUrl =\n    flags.repo ??\n    ((await gitRemoteOriginUrl(basePath).catch(errorToUndefined)) || pkg?.repository?.url)\n\n  const gitOrigin = requireUserConfirmation ? await promptForRepoOrigin(options, repoUrl) : repoUrl\n\n  log.debug('Remote origin: %s', gitOrigin || '<none>')\n\n  // Output\n  const data: PackageData = {user, pluginName, license, description, pkg, gitOrigin}\n  let didWrite\n\n  // Write package.json, if returns the original (data.pkg) if it was unchanged,\n  // otherwise it returns the new object\n  const newPkg = await writePackageJson(data, options)\n  info(newPkg !== pkg, 'Wrote package.json')\n  data.pkg = newPkg\n\n  didWrite = await writeLicense(data, options, licenseChanged)\n  info(didWrite, 'Wrote license file (LICENSE)')\n\n  didWrite = await writeReadme(data, options)\n  info(didWrite, 'Wrote readme file (README.md)')\n\n  didWrite = await writeStaticAssets(options)\n  info(didWrite.length > 0, 'Wrote static asset files: %s', didWrite.join(', '))\n\n  didWrite = await addBuildScripts(newPkg, options)\n  info(didWrite, 'Added build scripts to package.json')\n\n  didWrite = await addCompileDirToGitIgnore(options)\n  info(didWrite, 'Added compilation output directory to .gitignore')\n}\n\nasync function writeReadme(data: PackageData, options: InjectOptions) {\n  const {basePath} = options\n\n  const readmePath = path.join(basePath, 'README.md')\n  const readme = await readFile(readmePath, 'utf8').catch(errorToUndefined)\n\n  if (readme && !isDefaultGitHubReadme(readme)) {\n    return false\n  }\n\n  await writeFileWithOverwritePrompt(readmePath, generateReadme(data), {\n    encoding: 'utf8',\n    force: options.flags.force,\n  })\n  return true\n}\n\nasync function writeLicense(\n  {license}: PackageData,\n  options: InjectOptions,\n  licenseChanged: boolean,\n) {\n  const {basePath, flags} = options\n\n  if ((flags.license as unknown as boolean) === false || !license) {\n    return false\n  }\n\n  // Prefer whatever path the user is currently using (LICENSE.md or LICENSE)\n  const hasLicenseMdFile = await fileExists(path.join(basePath, 'LICENSE.md'))\n  const licensePath = path.join(basePath, hasLicenseMdFile ? 'LICENSE.md' : 'LICENSE')\n\n  await writeFileWithOverwritePrompt(licensePath, license.text, {\n    encoding: 'utf8',\n    default: licenseChanged,\n    force: flags.force,\n  })\n\n  return true\n}\n\nasync function getLicense(\n  flags: InitFlags,\n  {\n    user,\n    pluginName,\n    pkg,\n    requireUserConfirmation,\n  }: PackageData & {requireUserConfirmation?: boolean},\n) {\n  const license = await getLicenseIdentifier(flags, pkg, requireUserConfirmation)\n  if (!license) {\n    return undefined\n  }\n\n  const text = license.body\n    .replace(/\\[fullname\\]/g, user?.name ?? '')\n    .replace(/\\[project\\]/g, pluginName ?? '')\n    .replace(/\\[year\\]/g, String(new Date().getFullYear()))\n\n  return {id: license.id, text}\n}\n\nasync function getLicenseIdentifier(\n  flags: InitFlags,\n  pkg: PackageJson | undefined,\n  requireUserConfirmation = false,\n) {\n  // --no-license\n  if ((flags.license as unknown) === false) {\n    return null\n  }\n\n  // --license becomes \"\", --license mit becomes \"mit\"\n  if (typeof flags.license === 'string') {\n    const license = licenses.find(`${flags.license}`)\n    if (!license) {\n      throw new Error(`License \"${flags.license}\" not found`)\n    }\n    return license\n  }\n\n  // no --license flag provided, do we have one in package already?\n  if (pkg && pkg.license && !requireUserConfirmation) {\n    const license = licenses.find(`${pkg.license}`)\n    if (license) {\n      return license\n    }\n\n    // Warn, then prompt the user\n    log.warn(`package.json contains license \"${pkg.license}\", which is not recognized`)\n  }\n\n  const licenseId = await prompt('Which license do you want to use?', {\n    default: pkg && pkg.license && licenses.find(pkg.license) ? pkg.license : preferredLicenses[0],\n    choices: [\n      prompt.separator(),\n      ...preferredLicenses.map((value) => ({value, name: licenses.list[value].title})),\n      prompt.separator(),\n      ...otherLicenses.map((value) => ({value, name: licenses.list[value].title})),\n    ],\n  })\n\n  return licenses.find(licenseId)\n}\n\nasync function getProjectDescription(\n  basePath: string,\n  pkg: PackageJson | undefined,\n  requireUserConfirmation = false,\n) {\n  let description = await resolveProjectDescription(basePath, pkg)\n  if (requireUserConfirmation) {\n    description = await prompt('Plugin description', {default: description || ''})\n  }\n  return description ?? ''\n}\n\nasync function resolveProjectDescription(basePath: string, pkg: PackageJson | undefined) {\n  // Try to grab from package.json\n  if (pkg && typeof pkg.description === 'string' && pkg.description.length > 5) {\n    return pkg.description\n  }\n\n  // Try to grab a project description from a standard GitHub-generated readme\n  try {\n    const readmePath = path.join(basePath, 'README.md')\n    const readme = await readFile(readmePath, 'utf8')\n    const [title, description] = readme.split('\\n').filter(Boolean)\n    if (!title || !description || !title.match(/^#\\s+\\w+/)) {\n      return null\n    }\n\n    // Naive, but this isn't too important\n    const unlinked = description.replace(/\\[(.*?)\\]\\(.*?\\)/g, '$1')\n    if (/^[^#]/.test(unlinked)) {\n      return unlinked\n    }\n\n    return null\n  } catch (err) {\n    return errorToUndefined(err)\n  }\n}\n\nexport async function writeAssets(injectables: Injectable[], {basePath, flags}: InjectOptions) {\n  const assetsDir = await findAssetsDir()\n\n  const from = (...segments: string[]) => path.join(assetsDir, 'inject', ...segments)\n  const to = (...segments: string[]) => path.join(basePath, ...segments)\n\n  const writes: string[] = []\n  for (const injectable of injectables) {\n    if (injectable.type === 'copy') {\n      const fromPath = asArray(injectable.from)\n      const toPath = asArray(injectable.to)\n      if (await copyFileWithOverwritePrompt(from(...fromPath), to(...toPath), flags)) {\n        writes.push(path.join(...toPath))\n      }\n      continue\n    }\n\n    if (injectable.type === 'template') {\n      const toPath = asArray(injectable.to)\n\n      await writeFileWithOverwritePrompt(to(...toPath), `${injectable.value.trim()}\\n`, {\n        default: 'n',\n        force: injectable.force || flags.force,\n      })\n\n      writes.push(path.join(...toPath))\n      continue\n    }\n\n    throw new Error(`Unknown operation type \"${(injectable as any).type}\"`)\n  }\n\n  return writes\n}\n\nasync function writeStaticAssets(options: InjectOptions) {\n  const {outDir, flags} = options\n\n  const files: Injectable[] = [\n    flags.eslint && eslintrcTemplate({flags: options.flags}),\n    flags.eslint && eslintignoreTemplate({outDir, flags: options.flags}),\n    {type: 'copy', from: 'editorconfig', to: '.editorconfig'},\n    pkgConfigTemplate({outDir, flags: options.flags}),\n    flags.gitignore && gitignoreTemplate(),\n    flags.typescript && tsconfigTemplate({flags: options.flags}),\n    flags.typescript && tsconfigTemplateDist({outDir, flags: options.flags}),\n    flags.typescript && tsconfigTemplateSettings({outDir, flags: options.flags}),\n    flags.prettier && prettierignoreTemplate({outDir}),\n    flags.prettier && {type: 'copy', from: 'prettierrc.json', to: '.prettierrc'},\n  ]\n    .map((f) => (f ? (f as Injectable) : undefined))\n    .filter((f): f is Injectable => !!f)\n\n  const result = writeAssets(files, options)\n\n  return result\n}\n\nfunction asArray(input: string | string[]): string[] {\n  return typeof input === 'string' ? [input] : input\n}\n\n/**\n * assets dir might be in higher or lower in the dir hierarchy depending on\n * if we run from `dist` or `src`\n */\nasync function findAssetsDir(): Promise<string> {\n  let maxBackpaddle = 3\n  let currDir = path.dirname(fileURLToPath(import.meta.url))\n  let assetsDir: string = ''\n  while (!assetsDir && maxBackpaddle) {\n    currDir = path.join(currDir, '..')\n    const assets = path.join(currDir, 'assets')\n    if (await fileExists(assets)) {\n      assetsDir = assets\n    } else {\n      maxBackpaddle--\n    }\n  }\n\n  if (!assetsDir) {\n    throw new Error('Could not find assets directory!')\n  }\n  return assetsDir\n}\n\nasync function addCompileDirToGitIgnore(options: InjectOptions) {\n  const gitIgnorePath = path.join(options.basePath, '.gitignore')\n  const gitignore = await readFile(gitIgnorePath, 'utf8').catch(errorToUndefined)\n  if (!gitignore) {\n    return false\n  }\n\n  const ignore = options.outDir.replace(/^[./]+/, '').split('/')[0]\n  if (!ignore) {\n    return false\n  }\n\n  const lines = gitignore.trim().split('\\n')\n  if (lines.includes(ignore)) {\n    return false\n  }\n\n  lines.push('', '# Compiled plugin', ignore)\n\n  await writeFile(gitIgnorePath, lines.join('\\n') + '\\n', {encoding: 'utf8'})\n  return true\n}\n","import path from 'path'\n\nimport type {TypedFlags} from 'meow'\n\nimport {defaultSourceJs, defaultSourceTs} from '../configs/default-source'\nimport {defaultOutDir} from '../constants'\nimport {getPackage} from '../npm/package'\nimport sharedFlags from '../sharedFlags'\nimport {ensureDir, writeFile} from '../util/files'\nimport {inject} from './inject'\n\nexport const initFlags = {\n  ...sharedFlags,\n  scripts: {\n    type: 'boolean',\n    default: true,\n  },\n  eslint: {\n    type: 'boolean',\n    default: true,\n  },\n  typescript: {\n    type: 'boolean',\n    default: true,\n  },\n  prettier: {\n    type: 'boolean',\n    default: true,\n  },\n  license: {\n    type: 'string',\n  },\n  editorconfig: {\n    type: 'boolean',\n    default: true,\n  },\n  gitignore: {\n    type: 'boolean',\n    default: true,\n  },\n  force: {\n    type: 'boolean',\n    default: false,\n  },\n  install: {\n    type: 'boolean',\n    default: true,\n  },\n  name: {\n    type: 'string',\n  },\n  author: {\n    type: 'string',\n  },\n  repo: {\n    type: 'string',\n  },\n  presetOnly: {\n    type: 'boolean',\n    default: false,\n  },\n  preset: {\n    type: 'string',\n    isMultiple: true,\n  },\n} as const\n\nexport type InitFlags = TypedFlags<typeof initFlags>\n\nexport interface InitOptions {\n  basePath: string\n  flags: InitFlags\n}\n\nexport async function init(options: InitOptions) {\n  let dependencies = {}\n  let devDependencies = {}\n  let peerDependencies = {}\n\n  await inject({\n    ...options,\n    outDir: defaultOutDir,\n    requireUserConfirmation: !options.flags.force,\n    dependencies,\n    devDependencies,\n    peerDependencies,\n    validate: false,\n  })\n\n  const packageJson = await getPackage({basePath: options.basePath, validate: false})\n  const typescript = options.flags.typescript\n  const source = typescript ? defaultSourceTs(packageJson) : defaultSourceJs(packageJson)\n  const filename = typescript ? 'index.ts' : 'index.js'\n  const srcDir = path.resolve(options.basePath, 'src')\n  await ensureDir(srcDir)\n  await writeFile(path.join(srcDir, filename), source, {encoding: 'utf8'})\n}\n"],"mappings":"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"}
\ No newline at end of file