spinup-ts 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +82 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +96 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/prompts.d.ts +17 -0
  7. package/dist/prompts.d.ts.map +1 -0
  8. package/dist/prompts.js +264 -0
  9. package/dist/prompts.js.map +1 -0
  10. package/dist/scaffold.d.ts +5 -0
  11. package/dist/scaffold.d.ts.map +1 -0
  12. package/dist/scaffold.js +128 -0
  13. package/dist/scaffold.js.map +1 -0
  14. package/dist/transforms/devcontainer.d.ts +3 -0
  15. package/dist/transforms/devcontainer.d.ts.map +1 -0
  16. package/dist/transforms/devcontainer.js +8 -0
  17. package/dist/transforms/devcontainer.js.map +1 -0
  18. package/dist/transforms/docker.d.ts +3 -0
  19. package/dist/transforms/docker.d.ts.map +1 -0
  20. package/dist/transforms/docker.js +11 -0
  21. package/dist/transforms/docker.js.map +1 -0
  22. package/dist/transforms/docs.d.ts +3 -0
  23. package/dist/transforms/docs.d.ts.map +1 -0
  24. package/dist/transforms/docs.js +22 -0
  25. package/dist/transforms/docs.js.map +1 -0
  26. package/dist/transforms/documentation.d.ts +3 -0
  27. package/dist/transforms/documentation.d.ts.map +1 -0
  28. package/dist/transforms/documentation.js +37 -0
  29. package/dist/transforms/documentation.js.map +1 -0
  30. package/dist/transforms/github-actions.d.ts +3 -0
  31. package/dist/transforms/github-actions.d.ts.map +1 -0
  32. package/dist/transforms/github-actions.js +48 -0
  33. package/dist/transforms/github-actions.js.map +1 -0
  34. package/dist/transforms/index.d.ts +3 -0
  35. package/dist/transforms/index.d.ts.map +1 -0
  36. package/dist/transforms/index.js +24 -0
  37. package/dist/transforms/index.js.map +1 -0
  38. package/dist/transforms/license.d.ts +3 -0
  39. package/dist/transforms/license.d.ts.map +1 -0
  40. package/dist/transforms/license.js +19 -0
  41. package/dist/transforms/license.js.map +1 -0
  42. package/dist/transforms/npm-publish.d.ts +3 -0
  43. package/dist/transforms/npm-publish.d.ts.map +1 -0
  44. package/dist/transforms/npm-publish.js +15 -0
  45. package/dist/transforms/npm-publish.js.map +1 -0
  46. package/dist/transforms/package-manager.d.ts +3 -0
  47. package/dist/transforms/package-manager.d.ts.map +1 -0
  48. package/dist/transforms/package-manager.js +31 -0
  49. package/dist/transforms/package-manager.js.map +1 -0
  50. package/dist/types.d.ts +116 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +52 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/update.d.ts +2 -0
  55. package/dist/update.d.ts.map +1 -0
  56. package/dist/update.js +207 -0
  57. package/dist/update.js.map +1 -0
  58. package/package.json +94 -0
  59. package/template/.commitlintrc.json +3 -0
  60. package/template/.devcontainer/.zshrc +159 -0
  61. package/template/.devcontainer/DISCOVER-DEPS.md +109 -0
  62. package/template/.devcontainer/README.md +223 -0
  63. package/template/.devcontainer/SETUP.md +191 -0
  64. package/template/.devcontainer/TOOLS.md +215 -0
  65. package/template/.devcontainer/devcontainer.json +106 -0
  66. package/template/.devcontainer/scripts/init-project.sh +167 -0
  67. package/template/.editorconfig +12 -0
  68. package/template/.github/.release-please-manifest.json +3 -0
  69. package/template/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  70. package/template/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  71. package/template/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  72. package/template/.github/actions/setup-node-env/action.yml +20 -0
  73. package/template/.github/dependabot.yml +17 -0
  74. package/template/.github/labeler.yml +17 -0
  75. package/template/.github/release-please-config.json +7 -0
  76. package/template/.github/workflows/ci.yml +95 -0
  77. package/template/.github/workflows/codeql.yml +31 -0
  78. package/template/.github/workflows/labeler.yml +18 -0
  79. package/template/.github/workflows/release-please.yml +72 -0
  80. package/template/.github/workflows/stale.yml +32 -0
  81. package/template/.husky/commit-msg +1 -0
  82. package/template/.husky/pre-commit +1 -0
  83. package/template/.nvmrc +1 -0
  84. package/template/.vscode/extensions.json +11 -0
  85. package/template/.vscode/settings.json +12 -0
  86. package/template/AGENTS.md +1 -0
  87. package/template/CHANGELOG.md +11 -0
  88. package/template/CLAUDE.md +0 -0
  89. package/template/CONTRIBUTING.md +22 -0
  90. package/template/Dockerfile +21 -0
  91. package/template/LICENSE.Apache-2.0 +17 -0
  92. package/template/LICENSE.BSD-3-Clause +28 -0
  93. package/template/LICENSE.GPL-3.0 +17 -0
  94. package/template/LICENSE.ISC +15 -0
  95. package/template/LICENSE.MIT +21 -0
  96. package/template/README.md +62 -0
  97. package/template/biome.json +49 -0
  98. package/template/docker-compose.yml +7 -0
  99. package/template/docs/architecture/api-layer.md +44 -0
  100. package/template/docs/architecture/constitution.md +24 -0
  101. package/template/docs/architecture/data-model.md +24 -0
  102. package/template/docs/architecture/index.md +15 -0
  103. package/template/docs/architecture/project.md +24 -0
  104. package/template/docs/architecture/quality-checks.md +28 -0
  105. package/template/docs/architecture/testing-plan.md +35 -0
  106. package/template/docs/architecture/ui.md +37 -0
  107. package/template/docs/changelog.md +9 -0
  108. package/template/docs/contributing.md +46 -0
  109. package/template/docs/developer-guide/architecture.md +22 -0
  110. package/template/docs/developer-guide/contributing.md +30 -0
  111. package/template/docs/developer-guide/data-model.md +25 -0
  112. package/template/docs/developer-guide/index.md +12 -0
  113. package/template/docs/developer-guide/testing.md +40 -0
  114. package/template/docs/examples.md +37 -0
  115. package/template/docs/getting-started.md +42 -0
  116. package/template/docs/installation.md +45 -0
  117. package/template/docs/intro.md +60 -0
  118. package/template/docs/post-mortems/.gitkeep +0 -0
  119. package/template/docs/reference/cli.md +32 -0
  120. package/template/docs/reference/configuration.md +33 -0
  121. package/template/docs/reference/hooks.md +27 -0
  122. package/template/docs/research/competitor-analysis.md +21 -0
  123. package/template/docs/research/real-world-demand.md +21 -0
  124. package/template/docs/user-guide/configuration.md +32 -0
  125. package/template/docs/user-guide/features.md +21 -0
  126. package/template/docs/user-guide/how-it-works.md +29 -0
  127. package/template/docs/user-guide/index.md +11 -0
  128. package/template/docusaurus.config.ts +93 -0
  129. package/template/eslint.config.mjs +66 -0
  130. package/template/justfile +51 -0
  131. package/template/package.json +88 -0
  132. package/template/pnpm-workspace.yaml +8 -0
  133. package/template/sidebars.ts +72 -0
  134. package/template/src/index.ts +3 -0
  135. package/template/static/img/logo.svg +4 -0
  136. package/template/tests/index.test.ts +8 -0
  137. package/template/tsconfig.json +23 -0
  138. package/template/vitest.config.ts +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devcontainer.js","sourceRoot":"","sources":["../../src/transforms/devcontainer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe,EAAE,MAAqB;IAChF,IAAI,MAAM,CAAC,mBAAmB;QAAE,OAAO;IAEvC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformDocker(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/transforms/docker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3F"}
@@ -0,0 +1,11 @@
1
+ import path from 'node:path';
2
+ import fse from 'fs-extra';
3
+ export async function transformDocker(destDir, config) {
4
+ if (config.includeDockerfile)
5
+ return;
6
+ await Promise.all([
7
+ fse.remove(path.join(destDir, 'Dockerfile')),
8
+ fse.remove(path.join(destDir, 'docker-compose.yml')),
9
+ ]);
10
+ }
11
+ //# sourceMappingURL=docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/transforms/docker.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,MAAqB;IAC1E,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO;IAErC,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;KACrD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformDocs(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/transforms/docs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUjD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
@@ -0,0 +1,22 @@
1
+ import path from 'node:path';
2
+ import fse from 'fs-extra';
3
+ const DOCS_SCRIPTS = ['docs:dev', 'docs:build', 'docs:preview'];
4
+ export async function transformDocs(destDir, config) {
5
+ if (config.includeDocs)
6
+ return;
7
+ await fse.remove(path.join(destDir, 'docs'));
8
+ const pkgPath = path.join(destDir, 'package.json');
9
+ if (!(await fse.pathExists(pkgPath)))
10
+ return;
11
+ const pkg = (await fse.readJson(pkgPath));
12
+ if (pkg.scripts) {
13
+ for (const scriptName of DOCS_SCRIPTS) {
14
+ Reflect.deleteProperty(pkg.scripts, scriptName);
15
+ }
16
+ }
17
+ if (pkg.devDependencies) {
18
+ Reflect.deleteProperty(pkg.devDependencies, 'vitepress');
19
+ }
20
+ await fse.writeJson(pkgPath, pkg, { spaces: 2 });
21
+ }
22
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/transforms/docs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAS3B,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAU,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,MAAqB;IAErB,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO;IAE/B,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO;IAE7C,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAgB,CAAC;IAEzD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformDocumentation(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=documentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../src/transforms/documentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAqBjD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -0,0 +1,37 @@
1
+ import path from 'node:path';
2
+ import fse from 'fs-extra';
3
+ const DOCS_SCRIPTS = ['docs:start', 'docs:build', 'docs:serve', 'docs:clear'];
4
+ const DOCS_DEV_DEPS = [
5
+ '@docusaurus/core',
6
+ '@docusaurus/preset-classic',
7
+ '@docusaurus/types',
8
+ 'docusaurus-plugin-llms',
9
+ 'docusaurus-plugin-typedoc',
10
+ 'react',
11
+ 'react-dom',
12
+ 'typedoc',
13
+ ];
14
+ export async function transformDocumentation(destDir, config) {
15
+ if (config.includeDocs)
16
+ return;
17
+ await fse.remove(path.join(destDir, 'docs'));
18
+ await fse.remove(path.join(destDir, 'docusaurus.config.ts'));
19
+ await fse.remove(path.join(destDir, 'sidebars.ts'));
20
+ await fse.remove(path.join(destDir, 'static'));
21
+ const packagePath = path.join(destDir, 'package.json');
22
+ if (!(await fse.pathExists(packagePath)))
23
+ return;
24
+ const packageJson = (await fse.readJson(packagePath));
25
+ if (packageJson.scripts) {
26
+ for (const scriptName of DOCS_SCRIPTS) {
27
+ Reflect.deleteProperty(packageJson.scripts, scriptName);
28
+ }
29
+ }
30
+ if (packageJson.devDependencies) {
31
+ for (const dep of DOCS_DEV_DEPS) {
32
+ Reflect.deleteProperty(packageJson.devDependencies, dep);
33
+ }
34
+ }
35
+ await fse.writeJson(packagePath, packageJson, { spaces: 2 });
36
+ }
37
+ //# sourceMappingURL=documentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../../src/transforms/documentation.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAS3B,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAU,CAAC;AAEvF,MAAM,aAAa,GAAG;IACpB,kBAAkB;IAClB,4BAA4B;IAC5B,mBAAmB;IACnB,wBAAwB;IACxB,2BAA2B;IAC3B,OAAO;IACP,WAAW;IACX,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,MAAqB;IAErB,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO;IAE/B,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACpD,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO;IAEjD,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAgB,CAAC;IAErE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformGithubActions(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=github-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions.d.ts","sourceRoot":"","sources":["../../src/transforms/github-actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA+BjD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,48 @@
1
+ import path from 'node:path';
2
+ import fse from 'fs-extra';
3
+ const JOB_REGEX_CACHE = new Map();
4
+ function jobBlockRegex(jobName) {
5
+ const cached = JOB_REGEX_CACHE.get(jobName);
6
+ if (cached)
7
+ return cached;
8
+ const pattern = new RegExp(`\\n\\s{2}${jobName}:\\n(?:\\s{4,}.*\\n|\\s*\\n)*`, 'g');
9
+ JOB_REGEX_CACHE.set(jobName, pattern);
10
+ return pattern;
11
+ }
12
+ function removeJobBlock(yaml, jobName) {
13
+ return yaml.replaceAll(jobBlockRegex(jobName), '\n');
14
+ }
15
+ function removeCodecovStep(yaml) {
16
+ // eslint-disable-next-line sonarjs/slow-regex
17
+ const codecovStepRegex = /\n\s{6}- name: Upload coverage\n(?:\s{8,}.*\n)*/g;
18
+ return yaml.replaceAll(codecovStepRegex, '\n');
19
+ }
20
+ async function editYamlFile(filePath, transform) {
21
+ if (!(await fse.pathExists(filePath)))
22
+ return;
23
+ const original = await fse.readFile(filePath, 'utf8');
24
+ const updated = transform(original);
25
+ if (updated !== original) {
26
+ await fse.writeFile(filePath, updated, 'utf8');
27
+ }
28
+ }
29
+ export async function transformGithubActions(destDir, config) {
30
+ const githubDir = path.join(destDir, '.github');
31
+ if (!config.includeGithubActions) {
32
+ await fse.remove(githubDir);
33
+ return;
34
+ }
35
+ const ciPath = path.join(githubDir, 'workflows', 'ci.yml');
36
+ const releasePleaseYml = path.join(githubDir, 'workflows', 'release-please.yml');
37
+ if (!config.publishToNpm) {
38
+ await editYamlFile(releasePleaseYml, (yaml) => removeJobBlock(yaml, 'publish'));
39
+ }
40
+ if (!config.includeDocs) {
41
+ await editYamlFile(ciPath, (yaml) => removeJobBlock(yaml, 'docs'));
42
+ await editYamlFile(releasePleaseYml, (yaml) => removeJobBlock(yaml, 'deploy-docs'));
43
+ }
44
+ if (!config.includeCodecov) {
45
+ await editYamlFile(ciPath, removeCodecovStep);
46
+ }
47
+ }
48
+ //# sourceMappingURL=github-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-actions.js","sourceRoot":"","sources":["../../src/transforms/github-actions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;AAElD,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,YAAY,OAAO,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACpF,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,OAAe;IACnD,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,8CAA8C;IAC9C,MAAM,gBAAgB,GAAG,kDAAkD,CAAC;IAC5E,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,SAAmC;IAC/E,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO;IAC9C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,MAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACjC,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;IAEjF,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function applyTransforms(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgBjD,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3F"}
@@ -0,0 +1,24 @@
1
+ // eslint-disable-next-line import-x/no-unresolved
2
+ import { transformDevcontainer } from './devcontainer.js';
3
+ // eslint-disable-next-line import-x/no-unresolved
4
+ import { transformDocker } from './docker.js';
5
+ // eslint-disable-next-line import-x/no-unresolved
6
+ import { transformDocumentation } from './documentation.js';
7
+ // eslint-disable-next-line import-x/no-unresolved
8
+ import { transformGithubActions } from './github-actions.js';
9
+ // eslint-disable-next-line import-x/no-unresolved
10
+ import { transformLicense } from './license.js';
11
+ // eslint-disable-next-line import-x/no-unresolved
12
+ import { transformNpmPublish } from './npm-publish.js';
13
+ // eslint-disable-next-line import-x/no-unresolved
14
+ import { transformPackageManager } from './package-manager.js';
15
+ export async function applyTransforms(destDir, config) {
16
+ await transformLicense(destDir, config);
17
+ await transformGithubActions(destDir, config);
18
+ await transformDocker(destDir, config);
19
+ await transformDevcontainer(destDir, config);
20
+ await transformDocumentation(destDir, config);
21
+ await transformNpmPublish(destDir, config);
22
+ await transformPackageManager(destDir, config);
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AACA,kDAAkD;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,kDAAkD;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,kDAAkD;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,kDAAkD;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,kDAAkD;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,kDAAkD;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,kDAAkD;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,MAAqB;IAC1E,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformLicense(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=license.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/transforms/license.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAW5F"}
@@ -0,0 +1,19 @@
1
+ import { readdir } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import fse from 'fs-extra';
4
+ const LICENSE_PREFIX = 'LICENSE.';
5
+ async function listLicenseFiles(destDir) {
6
+ const entries = await readdir(destDir);
7
+ return entries.filter((entry) => entry.startsWith(LICENSE_PREFIX));
8
+ }
9
+ export async function transformLicense(destDir, config) {
10
+ const licenseFiles = await listLicenseFiles(destDir);
11
+ if (config.license !== 'UNLICENSED') {
12
+ const source = path.join(destDir, `${LICENSE_PREFIX}${config.license}`);
13
+ if (await fse.pathExists(source)) {
14
+ await fse.copyFile(source, path.join(destDir, 'LICENSE'));
15
+ }
16
+ }
17
+ await Promise.all(licenseFiles.map((file) => fse.remove(path.join(destDir, file))));
18
+ }
19
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/transforms/license.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAqB;IAC3E,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAErD,IAAI,MAAM,CAAC,OAAO,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,cAAc,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformNpmPublish(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=npm-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-publish.d.ts","sourceRoot":"","sources":["../../src/transforms/npm-publish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAOjD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F"}
@@ -0,0 +1,15 @@
1
+ import path from 'node:path';
2
+ import fse from 'fs-extra';
3
+ export async function transformNpmPublish(destDir, config) {
4
+ if (config.publishToNpm)
5
+ return;
6
+ const packagePath = path.join(destDir, 'package.json');
7
+ if (!(await fse.pathExists(packagePath)))
8
+ return;
9
+ const packageJson = (await fse.readJson(packagePath));
10
+ if (packageJson.scripts) {
11
+ Reflect.deleteProperty(packageJson.scripts, 'prepublishOnly');
12
+ }
13
+ await fse.writeJson(packagePath, packageJson, { spaces: 2 });
14
+ }
15
+ //# sourceMappingURL=npm-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-publish.js","sourceRoot":"","sources":["../../src/transforms/npm-publish.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,GAAG,MAAM,UAAU,CAAC;AAQ3B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe,EAAE,MAAqB;IAC9E,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO;IAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO;IAEjD,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAgB,CAAC;IAErE,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectConfig } from '../types.js';
2
+ export declare function transformPackageManager(destDir: string, config: ProjectConfig): Promise<void>;
3
+ //# sourceMappingURL=package-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/transforms/package-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAkBjD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,31 @@
1
+ import { exec } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import { promisify } from 'node:util';
4
+ import fse from 'fs-extra';
5
+ const execAsync = promisify(exec);
6
+ async function resolveVersion(pm) {
7
+ try {
8
+ const { stdout } = await execAsync(`${pm} --version`);
9
+ return stdout.trim();
10
+ }
11
+ catch {
12
+ return '0.0.0';
13
+ }
14
+ }
15
+ export async function transformPackageManager(destDir, config) {
16
+ if (config.packageManager === 'npm')
17
+ return;
18
+ const packagePath = path.join(destDir, 'package.json');
19
+ if (!(await fse.pathExists(packagePath)))
20
+ return;
21
+ const packageJson = (await fse.readJson(packagePath));
22
+ const version = await resolveVersion(config.packageManager);
23
+ packageJson.packageManager = `${config.packageManager}@${version}`;
24
+ // Rename placeholder key so the scaffolded project gets a real lint-staged config
25
+ if ('__lint-staged__' in packageJson) {
26
+ packageJson['lint-staged'] = packageJson['__lint-staged__'];
27
+ Reflect.deleteProperty(packageJson, '__lint-staged__');
28
+ }
29
+ await fse.writeJson(packagePath, packageJson, { spaces: 2 });
30
+ }
31
+ //# sourceMappingURL=package-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/transforms/package-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAOlC,KAAK,UAAU,cAAc,CAAC,EAAU;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAe,EACf,MAAqB;IAErB,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK;QAAE,OAAO;IAE5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO;IAEjD,MAAM,WAAW,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAgB,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC5D,WAAW,CAAC,cAAc,GAAG,GAAG,MAAM,CAAC,cAAc,IAAI,OAAO,EAAE,CAAC;IAEnE,kFAAkF;IAClF,IAAI,iBAAiB,IAAI,WAAW,EAAE,CAAC;QACrC,WAAW,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC5D,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Map of template placeholder tokens to their concrete string replacements.
4
+ * Every key is replaced verbatim inside template files during scaffolding.
5
+ */
6
+ /** Map of `__UPPER_SNAKE__` template placeholders to their replacement values. */
7
+ export type TokenMap = Record<string, string>;
8
+ /**
9
+ * Zod schema describing every user-selectable option for a scaffolded project.
10
+ * Source of truth for the interactive CLI prompts and template token resolution.
11
+ */
12
+ export declare const projectConfigSchema: z.ZodObject<{
13
+ /** kebab-case project slug, e.g. "my-awesome-lib" */
14
+ projectName: z.ZodString;
15
+ /** snake_case version of `projectName`, auto-derived via `deriveSlug` */
16
+ projectSlug: z.ZodString;
17
+ description: z.ZodString;
18
+ author: z.ZodString;
19
+ email: z.ZodString;
20
+ githubHandle: z.ZodString;
21
+ nodeVersion: z.ZodDefault<z.ZodEnum<["20", "22", "23"]>>;
22
+ packageManager: z.ZodDefault<z.ZodEnum<["pnpm", "bun", "npm"]>>;
23
+ projectType: z.ZodDefault<z.ZodEnum<["library", "cli", "server", "mcp-server"]>>;
24
+ includeGithubActions: z.ZodDefault<z.ZodBoolean>;
25
+ publishToNpm: z.ZodDefault<z.ZodBoolean>;
26
+ /** Include a Docusaurus docs site under `docs/` */
27
+ includeDocs: z.ZodDefault<z.ZodBoolean>;
28
+ includeCodecov: z.ZodDefault<z.ZodBoolean>;
29
+ includeDockerfile: z.ZodDefault<z.ZodBoolean>;
30
+ includeDevcontainer: z.ZodDefault<z.ZodBoolean>;
31
+ license: z.ZodDefault<z.ZodEnum<["MIT", "Apache-2.0", "BSD-3-Clause", "ISC", "GPL-3.0", "UNLICENSED"]>>;
32
+ }, "strict", z.ZodTypeAny, {
33
+ projectName: string;
34
+ projectSlug: string;
35
+ description: string;
36
+ author: string;
37
+ email: string;
38
+ githubHandle: string;
39
+ nodeVersion: "20" | "22" | "23";
40
+ packageManager: "pnpm" | "bun" | "npm";
41
+ projectType: "library" | "cli" | "server" | "mcp-server";
42
+ includeGithubActions: boolean;
43
+ publishToNpm: boolean;
44
+ includeDocs: boolean;
45
+ includeCodecov: boolean;
46
+ includeDockerfile: boolean;
47
+ includeDevcontainer: boolean;
48
+ license: "MIT" | "Apache-2.0" | "BSD-3-Clause" | "ISC" | "GPL-3.0" | "UNLICENSED";
49
+ }, {
50
+ projectName: string;
51
+ projectSlug: string;
52
+ description: string;
53
+ author: string;
54
+ email: string;
55
+ githubHandle: string;
56
+ nodeVersion?: "20" | "22" | "23" | undefined;
57
+ packageManager?: "pnpm" | "bun" | "npm" | undefined;
58
+ projectType?: "library" | "cli" | "server" | "mcp-server" | undefined;
59
+ includeGithubActions?: boolean | undefined;
60
+ publishToNpm?: boolean | undefined;
61
+ includeDocs?: boolean | undefined;
62
+ includeCodecov?: boolean | undefined;
63
+ includeDockerfile?: boolean | undefined;
64
+ includeDevcontainer?: boolean | undefined;
65
+ license?: "MIT" | "Apache-2.0" | "BSD-3-Clause" | "ISC" | "GPL-3.0" | "UNLICENSED" | undefined;
66
+ }>;
67
+ export type ProjectConfig = z.infer<typeof projectConfigSchema>;
68
+ export declare const userDefaultsSchema: z.ZodObject<{
69
+ author: z.ZodOptional<z.ZodString>;
70
+ email: z.ZodOptional<z.ZodString>;
71
+ githubHandle: z.ZodOptional<z.ZodString>;
72
+ nodeVersion: z.ZodOptional<z.ZodDefault<z.ZodEnum<["20", "22", "23"]>>>;
73
+ packageManager: z.ZodOptional<z.ZodDefault<z.ZodEnum<["pnpm", "bun", "npm"]>>>;
74
+ projectType: z.ZodOptional<z.ZodDefault<z.ZodEnum<["library", "cli", "server", "mcp-server"]>>>;
75
+ includeGithubActions: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
76
+ publishToNpm: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
77
+ includeDocs: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
78
+ includeCodecov: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
79
+ includeDockerfile: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
80
+ includeDevcontainer: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
81
+ license: z.ZodOptional<z.ZodDefault<z.ZodEnum<["MIT", "Apache-2.0", "BSD-3-Clause", "ISC", "GPL-3.0", "UNLICENSED"]>>>;
82
+ }, "strict", z.ZodTypeAny, {
83
+ author?: string | undefined;
84
+ email?: string | undefined;
85
+ githubHandle?: string | undefined;
86
+ nodeVersion?: "20" | "22" | "23" | undefined;
87
+ packageManager?: "pnpm" | "bun" | "npm" | undefined;
88
+ projectType?: "library" | "cli" | "server" | "mcp-server" | undefined;
89
+ includeGithubActions?: boolean | undefined;
90
+ publishToNpm?: boolean | undefined;
91
+ includeDocs?: boolean | undefined;
92
+ includeCodecov?: boolean | undefined;
93
+ includeDockerfile?: boolean | undefined;
94
+ includeDevcontainer?: boolean | undefined;
95
+ license?: "MIT" | "Apache-2.0" | "BSD-3-Clause" | "ISC" | "GPL-3.0" | "UNLICENSED" | undefined;
96
+ }, {
97
+ author?: string | undefined;
98
+ email?: string | undefined;
99
+ githubHandle?: string | undefined;
100
+ nodeVersion?: "20" | "22" | "23" | undefined;
101
+ packageManager?: "pnpm" | "bun" | "npm" | undefined;
102
+ projectType?: "library" | "cli" | "server" | "mcp-server" | undefined;
103
+ includeGithubActions?: boolean | undefined;
104
+ publishToNpm?: boolean | undefined;
105
+ includeDocs?: boolean | undefined;
106
+ includeCodecov?: boolean | undefined;
107
+ includeDockerfile?: boolean | undefined;
108
+ includeDevcontainer?: boolean | undefined;
109
+ license?: "MIT" | "Apache-2.0" | "BSD-3-Clause" | "ISC" | "GPL-3.0" | "UNLICENSED" | undefined;
110
+ }>;
111
+ export type UserDefaults = z.infer<typeof userDefaultsSchema>;
112
+ /** Convert a kebab-case identifier to snake_case. */
113
+ export declare function deriveSlug(name: string): string;
114
+ /** Build the template token map from a validated {@link ProjectConfig}. */
115
+ export declare function toTokenMap(config: ProjectConfig): TokenMap;
116
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,kFAAkF;AAClF,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,mBAAmB;IAE5B,qDAAqD;;IAErD,yEAAyE;;;;;;;;;;;IAWzE,mDAAmD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5C,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEnB,CAAC;AAEb,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,QAAQ,CAY1D"}
package/dist/types.js ADDED
@@ -0,0 +1,52 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema describing every user-selectable option for a scaffolded project.
4
+ * Source of truth for the interactive CLI prompts and template token resolution.
5
+ */
6
+ export const projectConfigSchema = z
7
+ .object({
8
+ /** kebab-case project slug, e.g. "my-awesome-lib" */
9
+ projectName: z.string().min(1),
10
+ /** snake_case version of `projectName`, auto-derived via `deriveSlug` */
11
+ projectSlug: z.string().min(1),
12
+ description: z.string(),
13
+ author: z.string().min(1),
14
+ email: z.string().email(),
15
+ githubHandle: z.string().min(1),
16
+ nodeVersion: z.enum(['20', '22', '23']).default('22'),
17
+ packageManager: z.enum(['pnpm', 'bun', 'npm']).default('pnpm'),
18
+ projectType: z.enum(['library', 'cli', 'server', 'mcp-server']).default('library'),
19
+ includeGithubActions: z.boolean().default(true),
20
+ publishToNpm: z.boolean().default(false),
21
+ /** Include a Docusaurus docs site under `docs/` */
22
+ includeDocs: z.boolean().default(false),
23
+ includeCodecov: z.boolean().default(false),
24
+ includeDockerfile: z.boolean().default(false),
25
+ includeDevcontainer: z.boolean().default(true),
26
+ license: z
27
+ .enum(['MIT', 'Apache-2.0', 'BSD-3-Clause', 'ISC', 'GPL-3.0', 'UNLICENSED'])
28
+ .default('MIT'),
29
+ })
30
+ .strict();
31
+ export const userDefaultsSchema = projectConfigSchema
32
+ .omit({ projectName: true, projectSlug: true, description: true })
33
+ .partial();
34
+ /** Convert a kebab-case identifier to snake_case. */
35
+ export function deriveSlug(name) {
36
+ return name.replaceAll('-', '_');
37
+ }
38
+ /** Build the template token map from a validated {@link ProjectConfig}. */
39
+ export function toTokenMap(config) {
40
+ return Object.fromEntries([
41
+ ['__PROJECT_NAME__', config.projectName],
42
+ ['__PROJECT_SLUG__', config.projectSlug],
43
+ ['__DESCRIPTION__', config.description],
44
+ ['__AUTHOR__', config.author],
45
+ ['__EMAIL__', config.email],
46
+ ['__GITHUB_HANDLE__', config.githubHandle],
47
+ ['__NODE_VERSION__', config.nodeVersion],
48
+ ['__YEAR__', String(new Date().getFullYear())],
49
+ ['__LICENSE__', config.license],
50
+ ]);
51
+ }
52
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function updateProject(targetDir: string): Promise<void>;
2
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AA6NA,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCpE"}