@pixpilot/scaffoldfy-configs 0.15.0 → 0.17.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 (27) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.prettiercache +1 -1
  3. package/.turbo/turbo-format.log +1 -1
  4. package/.turbo/turbo-lint.log +1 -1
  5. package/.turbo/turbo-test.log +8 -7
  6. package/CHANGELOG.md +12 -0
  7. package/license-file/scaffoldfy.json +3 -3
  8. package/package.json +4 -4
  9. package/test/workspace-package-generator.test.ts +336 -0
  10. package/workspace-package-generator/experiment/scaffoldfy-base.json +13 -0
  11. package/workspace-package-generator/experiment/scaffoldfy-disabled.json +19 -0
  12. package/workspace-package-generator/experiment/scaffoldfy-extend-with-disables.json +13 -0
  13. package/workspace-package-generator/experiment/scaffoldfy.json +14 -0
  14. package/workspace-package-generator/scaffoldfy-base.json +132 -0
  15. package/workspace-package-generator/scaffoldfy-project-info.json +9 -0
  16. package/workspace-package-generator/scaffoldfy.json +150 -0
  17. package/workspace-package-generator/scripts/add-dependencies.cjs +76 -0
  18. package/workspace-package-generator/scripts/check-tsdown-config.cjs +28 -0
  19. package/workspace-package-generator/templates/README.md.hbs +3 -0
  20. package/workspace-package-generator/templates/eslint.config.mjs.hbs +6 -0
  21. package/workspace-package-generator/templates/package.json.hbs +82 -0
  22. package/workspace-package-generator/templates/src/index.ts.hbs +1 -0
  23. package/workspace-package-generator/templates/test/index.test.ts.hbs +9 -0
  24. package/workspace-package-generator/templates/tsconfig.build.json.hbs +11 -0
  25. package/workspace-package-generator/templates/tsconfig.json.hbs +4 -0
  26. package/workspace-package-generator/templates/tsdown.config.ts.hbs +16 -0
  27. package/workspace-package-generator/templates/vitest.config.ts.hbs +3 -0
@@ -1 +1 @@
1
- [{"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/README.md":"1","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/eslint.config.mjs":"2","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/license-file/scaffoldfy.json":"3","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/generate-packages-section.js":"4","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/scaffoldfy.json":"5","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/package.json":"6","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/release.yml":"7","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/scaffoldfy.json":"8","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/copilot-instructions.md":"9","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/scaffoldfy.json":"10","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-info/scaffoldfy.json":"11","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/detect-git-hub-org.js":"12","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/scaffoldfy.json":"13","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/security-policy/scaffoldfy.json":"14","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/validate-schema.test.ts":"15","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/tsdown.config.ts":"16","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/turbo-workspace-package-generator/scaffoldfy.json":"17","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/update-root-package-json/scaffoldfy.json":"18","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/vitest.config.ts":"19"},{"size":2298,"mtime":1761654700817,"results":"20","hashOfConfig":"21"},{"size":260,"mtime":1761654700817,"results":"22","hashOfConfig":"23"},{"size":4993,"mtime":1761654700818,"results":"24","hashOfConfig":"25"},{"size":2047,"mtime":1761654700818,"results":"26","hashOfConfig":"27"},{"size":2045,"mtime":1761654700818,"results":"28","hashOfConfig":"25"},{"size":1149,"mtime":1761654714088,"results":"29","hashOfConfig":"30"},{"size":1139,"mtime":1761654700818,"results":"31","hashOfConfig":"32"},{"size":1307,"mtime":1761654700818,"results":"33","hashOfConfig":"25"},{"size":904,"mtime":1761654700818,"results":"34","hashOfConfig":"21"},{"size":704,"mtime":1761654700818,"results":"35","hashOfConfig":"25"},{"size":785,"mtime":1761654700818,"results":"36","hashOfConfig":"25"},{"size":1962,"mtime":1761654700818,"results":"37","hashOfConfig":"27"},{"size":3515,"mtime":1761654700818,"results":"38","hashOfConfig":"25"},{"size":1297,"mtime":1761654700818,"results":"39","hashOfConfig":"25"},{"size":960,"mtime":1761654700818,"results":"40","hashOfConfig":"41"},{"size":160,"mtime":1761654700818,"results":"42","hashOfConfig":"43"},{"size":964,"mtime":1761654700818,"results":"44","hashOfConfig":"25"},{"size":835,"mtime":1761654700818,"results":"45","hashOfConfig":"25"},{"size":78,"mtime":1761654700818,"results":"46","hashOfConfig":"43"},{"filePath":"47","messages":"48","suppressedMessages":"49","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1lvqh6q",{"filePath":"50","messages":"51","suppressedMessages":"52","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"ygaxad",{"filePath":"53","messages":"54","suppressedMessages":"55","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"185cgie",{"filePath":"56","messages":"57","suppressedMessages":"58","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"130171j",{"filePath":"59","messages":"60","suppressedMessages":"61","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"62","messages":"63","suppressedMessages":"64","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1r8t28z",{"filePath":"65","messages":"66","suppressedMessages":"67","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1o67o8g",{"filePath":"68","messages":"69","suppressedMessages":"70","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"71","messages":"72","suppressedMessages":"73","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"74","messages":"75","suppressedMessages":"76","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"77","messages":"78","suppressedMessages":"79","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","suppressedMessages":"82","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"83","messages":"84","suppressedMessages":"85","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"86","messages":"87","suppressedMessages":"88","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"89","messages":"90","suppressedMessages":"91","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"lsyrod",{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"13wjuik",{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/README.md",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/eslint.config.mjs",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/license-file/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/generate-packages-section.js",[],["104"],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/package.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/release.yml",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/copilot-instructions.md",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-info/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/detect-git-hub-org.js",["105"],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/security-policy/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/validate-schema.test.ts",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/tsdown.config.ts",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/turbo-workspace-package-generator/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/update-root-package-json/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/vitest.config.ts",[],[],{"ruleId":"106","severity":2,"message":"107","line":65,"column":1,"nodeType":"108","messageId":"109","endLine":65,"endColumn":12,"suggestions":"110","suppressions":"111"},{"ruleId":"112","severity":1,"message":"113","line":40,"column":33,"nodeType":"114","messageId":"115","endLine":40,"endColumn":34},"no-console","Unexpected console statement. Only these console methods are allowed: warn, error.","MemberExpression","limited",["116"],["117"],"no-magic-numbers","No magic number: 2.","Literal","noMagic",{"fix":"118","messageId":"119","data":"120","desc":"121"},{"kind":"122","justification":"123"},{"range":"124","text":"123"},"removeConsole",{"propertyName":"125"},"Remove the console.log().","directive","",[1994,2042],"log"]
1
+ [{"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/README.md":"1","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/eslint.config.mjs":"2","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/license-file/scaffoldfy.json":"3","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/generate-packages-section.js":"4","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/scaffoldfy.json":"5","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/package.json":"6","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/release.yml":"7","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/scaffoldfy.json":"8","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/copilot-instructions.md":"9","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/scaffoldfy.json":"10","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-info/scaffoldfy.json":"11","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/detect-git-hub-org.js":"12","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/scaffoldfy.json":"13","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/security-policy/scaffoldfy.json":"14","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/validate-schema.test.ts":"15","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/workspace-package-generator.test.ts":"16","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/tsdown.config.ts":"17","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/turbo-workspace-package-generator/scaffoldfy.json":"18","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/update-root-package-json/scaffoldfy.json":"19","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/vitest.config.ts":"20","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-base.json":"21","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-disabled.json":"22","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-extend-with-disables.json":"23","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy.json":"24","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy-base.json":"25","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy-project-info.json":"26","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy.json":"27","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scripts/add-dependencies.cjs":"28","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scripts/check-tsdown-config.cjs":"29","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/templates/test/index.test.ts.hbs":"30"},{"size":2298,"mtime":1771694061779,"results":"31","hashOfConfig":"32"},{"size":260,"mtime":1771694061779,"results":"33","hashOfConfig":"34"},{"size":4994,"mtime":1771694061780,"results":"35","hashOfConfig":"36"},{"size":2047,"mtime":1771694061780,"results":"37","hashOfConfig":"38"},{"size":2045,"mtime":1771694061780,"results":"39","hashOfConfig":"36"},{"size":1149,"mtime":1771694074048,"results":"40","hashOfConfig":"41"},{"size":1139,"mtime":1771694061780,"results":"42","hashOfConfig":"43"},{"size":1307,"mtime":1771694061780,"results":"44","hashOfConfig":"36"},{"size":904,"mtime":1771694061780,"results":"45","hashOfConfig":"32"},{"size":704,"mtime":1771694061780,"results":"46","hashOfConfig":"36"},{"size":785,"mtime":1771694061780,"results":"47","hashOfConfig":"36"},{"size":1962,"mtime":1771694061781,"results":"48","hashOfConfig":"38"},{"size":3515,"mtime":1771694061781,"results":"49","hashOfConfig":"36"},{"size":1297,"mtime":1771694061781,"results":"50","hashOfConfig":"36"},{"size":960,"mtime":1771694061781,"results":"51","hashOfConfig":"52"},{"size":12229,"mtime":1771694061781,"results":"53","hashOfConfig":"52"},{"size":160,"mtime":1771694061781,"results":"54","hashOfConfig":"55"},{"size":964,"mtime":1771694061781,"results":"56","hashOfConfig":"36"},{"size":835,"mtime":1771694061781,"results":"57","hashOfConfig":"36"},{"size":78,"mtime":1771694061781,"results":"58","hashOfConfig":"55"},{"size":361,"mtime":1771694061781,"results":"59","hashOfConfig":"36"},{"size":561,"mtime":1771694061781,"results":"60","hashOfConfig":"36"},{"size":358,"mtime":1771694061781,"results":"61","hashOfConfig":"36"},{"size":432,"mtime":1771694061781,"results":"62","hashOfConfig":"36"},{"size":3251,"mtime":1771694061781,"results":"63","hashOfConfig":"36"},{"size":388,"mtime":1771694061781,"results":"64","hashOfConfig":"36"},{"size":4802,"mtime":1771694061781,"results":"65","hashOfConfig":"36"},{"size":1753,"mtime":1771694061781,"results":"66","hashOfConfig":"67"},{"size":858,"mtime":1771694061781,"results":"68","hashOfConfig":"67"},{"size":181,"mtime":1771694061782,"results":"69","hashOfConfig":"70"},{"filePath":"71","messages":"72","suppressedMessages":"73","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1o3qqi3",{"filePath":"74","messages":"75","suppressedMessages":"76","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1d4mhdo",{"filePath":"77","messages":"78","suppressedMessages":"79","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1dc3ock",{"filePath":"80","messages":"81","suppressedMessages":"82","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"xjf53n",{"filePath":"83","messages":"84","suppressedMessages":"85","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"86","messages":"87","suppressedMessages":"88","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"18wrtc",{"filePath":"89","messages":"90","suppressedMessages":"91","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1javrp5",{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"104","messages":"105","suppressedMessages":"106","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"107","messages":"108","suppressedMessages":"109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"110","messages":"111","suppressedMessages":"112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"113","messages":"114","suppressedMessages":"115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"skhll",{"filePath":"116","messages":"117","suppressedMessages":"118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"119","messages":"120","suppressedMessages":"121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1pyjbrw",{"filePath":"122","messages":"123","suppressedMessages":"124","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"125","messages":"126","suppressedMessages":"127","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"128","messages":"129","suppressedMessages":"130","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"131","messages":"132","suppressedMessages":"133","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"134","messages":"135","suppressedMessages":"136","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"137","messages":"138","suppressedMessages":"139","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"140","messages":"141","suppressedMessages":"142","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"143","messages":"144","suppressedMessages":"145","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"146","messages":"147","suppressedMessages":"148","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"149","messages":"150","suppressedMessages":"151","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"152","messages":"153","suppressedMessages":"154","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"s2da7g",{"filePath":"155","messages":"156","suppressedMessages":"157","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"158","messages":"159","suppressedMessages":"160","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"exmpos","/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/README.md",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/eslint.config.mjs",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/license-file/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/generate-packages-section.js",[],["161"],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/package.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/release.yml",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/copilot-instructions.md",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-info/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/detect-git-hub-org.js",["162"],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/security-policy/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/validate-schema.test.ts",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/workspace-package-generator.test.ts",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/tsdown.config.ts",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/turbo-workspace-package-generator/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/update-root-package-json/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/vitest.config.ts",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-base.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-disabled.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-extend-with-disables.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy-base.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy-project-info.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy.json",[],[],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scripts/add-dependencies.cjs",[],["163","164","165","166","167"],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scripts/check-tsdown-config.cjs",[],["168","169"],"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/templates/test/index.test.ts.hbs",[],[],{"ruleId":"170","severity":2,"message":"171","line":65,"column":1,"nodeType":"172","messageId":"173","endLine":65,"endColumn":12,"suggestions":"174","suppressions":"175"},{"ruleId":"176","severity":1,"message":"177","line":40,"column":33,"nodeType":"178","messageId":"179","endLine":40,"endColumn":34},{"ruleId":"180","severity":2,"message":"181","line":19,"column":15,"nodeType":"182","messageId":"183","endLine":19,"endColumn":22,"suppressions":"184"},{"ruleId":"180","severity":2,"message":"181","line":28,"column":3,"nodeType":"182","messageId":"183","endLine":28,"endColumn":10,"suppressions":"185"},{"ruleId":"180","severity":2,"message":"181","line":33,"column":3,"nodeType":"182","messageId":"183","endLine":33,"endColumn":10,"suppressions":"186"},{"ruleId":"180","severity":2,"message":"181","line":38,"column":3,"nodeType":"182","messageId":"183","endLine":38,"endColumn":10,"suppressions":"187"},{"ruleId":"180","severity":2,"message":"181","line":48,"column":3,"nodeType":"182","messageId":"183","endLine":48,"endColumn":10,"suppressions":"188"},{"ruleId":"180","severity":2,"message":"181","line":13,"column":13,"nodeType":"182","messageId":"183","endLine":13,"endColumn":20,"suppressions":"189"},{"ruleId":"180","severity":2,"message":"181","line":28,"column":1,"nodeType":"182","messageId":"183","endLine":28,"endColumn":8,"suppressions":"190"},"no-console","Unexpected console statement. Only these console methods are allowed: warn, error.","MemberExpression","limited",["191"],["192"],"no-magic-numbers","No magic number: 2.","Literal","noMagic","node/prefer-global/process","Unexpected use of the global variable 'process'. Use 'require(\"process\")' instead.","Identifier","preferModule",["193"],["194"],["195"],["196"],["197"],["198"],["199"],{"fix":"200","messageId":"201","data":"202","desc":"203"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"kind":"204","justification":"205"},{"range":"206","text":"205"},"removeConsole",{"propertyName":"207"},"Remove the console.log().","directive","",[1994,2042],"log"]
@@ -1 +1 @@
1
- [["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"],{"key":"21","value":"22"},{"key":"23","value":"24"},{"key":"25","value":"26"},{"key":"27","value":"28"},{"key":"29","value":"30"},{"key":"31","value":"32"},{"key":"33","value":"34"},{"key":"35","value":"36"},{"key":"37","value":"38"},{"key":"39","value":"40"},{"key":"41","value":"42"},{"key":"43","value":"44"},{"key":"45","value":"46"},{"key":"47","value":"48"},{"key":"49","value":"50"},{"key":"51","value":"52"},{"key":"53","value":"54"},{"key":"55","value":"56"},{"key":"57","value":"58"},{"key":"59","value":"60"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/license-file/scaffoldfy.json",{"size":4993,"mtime":1761654700818,"hash":"61","data":"62"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/copilot-instructions.md",{"size":904,"mtime":1761654700818,"hash":"63","data":"64"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/package.json",{"size":1149,"mtime":1761654714088,"hash":"65","data":"66"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/security-policy/scaffoldfy.json",{"size":1297,"mtime":1761654700818,"hash":"67","data":"68"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/scaffoldfy.json",{"size":2045,"mtime":1761654700818,"hash":"69","data":"70"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/tsdown.config.ts",{"size":160,"mtime":1761654700818,"hash":"71","data":"72"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/scaffoldfy.json",{"size":704,"mtime":1761654700818,"hash":"73","data":"74"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-info/scaffoldfy.json",{"size":785,"mtime":1761654700818,"hash":"75","data":"76"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/turbo-workspace-package-generator/scaffoldfy.json",{"size":964,"mtime":1761654700818,"hash":"77","data":"78"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/vitest.config.ts",{"size":78,"mtime":1761654700818,"hash":"79","data":"80"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/generate-packages-section.js",{"size":2047,"mtime":1761654700818,"hash":"81","data":"82"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/eslint.config.mjs",{"size":260,"mtime":1761654700817,"hash":"83","data":"84"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/release.yml",{"size":1139,"mtime":1761654700818,"hash":"85","data":"86"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/update-root-package-json/scaffoldfy.json",{"size":835,"mtime":1761654700818,"hash":"87","data":"88"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/detect-git-hub-org.js",{"size":1962,"mtime":1761654700818,"hash":"89","data":"90"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/scaffoldfy.json",{"size":3515,"mtime":1761654700818,"hash":"91","data":"92"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/validate-schema.test.ts",{"size":960,"mtime":1761654700818,"hash":"93","data":"94"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/scaffoldfy.json",{"size":1307,"mtime":1761654700818,"hash":"95","data":"96"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/README.md",{"size":2298,"mtime":1761654700817,"hash":"97","data":"98"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/LICENSE",{"size":1065,"mtime":1761654700817,"hash":"99"},"a7231deb9e023052a2eb2d1cdb263c48",{"hashOfOptions":"100"},"129fc064577f2fe749ed401b01155b0c",{"hashOfOptions":"101"},"3d2b9f051c6e71275040c0cbb19e522f",{"hashOfOptions":"102"},"baadfd22a57a81937d70e0dec8b37aac",{"hashOfOptions":"103"},"f54318350f291f72ab00fda487548c18",{"hashOfOptions":"104"},"513debbbe37a0908feda9f0bcc5fcc4b",{"hashOfOptions":"105"},"20171b8fd858f9b268e89c1aa6484a92",{"hashOfOptions":"106"},"2be50f22a6d61efa5175d1c8162901b6",{"hashOfOptions":"107"},"d16152bdbad281c6f548789be4bfd8dd",{"hashOfOptions":"108"},"fb12a6e35e71f2db94bbf66fedb48a90",{"hashOfOptions":"109"},"c4b2e848701a00ec46150ef82d25fe09",{"hashOfOptions":"110"},"f9ce2b24b6b27b0bd159849f75d8bfd0",{"hashOfOptions":"111"},"6d888308c5d2927c9472c902b56b2973",{"hashOfOptions":"112"},"3f83e52f12983c940261936f58d44cd1",{"hashOfOptions":"113"},"0f3cdcc0b5df24febf8e9a0cad1950f6",{"hashOfOptions":"114"},"7515222c611237db89fcbcfffa9546a8",{"hashOfOptions":"115"},"a0fc37307c5b3e7ef6c635ee81d4b22a",{"hashOfOptions":"116"},"552893570f59b876cc311161764b971b",{"hashOfOptions":"117"},"9ffdd9ced1b95e3c890a9ac66d04b26d",{"hashOfOptions":"118"},"9937b6ab6bff563917af91b674d32d26","1091911791","2734378173","7569829","34869034","2621525778","3649285687","3457824335","87225127","4008244420","2330534099","3818238147","733243520","4034346358","3037609409","913773266","2737831477","982426797","4256979194","1064095472"]
1
+ [["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"],{"key":"31","value":"32"},{"key":"33","value":"34"},{"key":"35","value":"36"},{"key":"37","value":"38"},{"key":"39","value":"40"},{"key":"41","value":"42"},{"key":"43","value":"44"},{"key":"45","value":"46"},{"key":"47","value":"48"},{"key":"49","value":"50"},{"key":"51","value":"52"},{"key":"53","value":"54"},{"key":"55","value":"56"},{"key":"57","value":"58"},{"key":"59","value":"60"},{"key":"61","value":"62"},{"key":"63","value":"64"},{"key":"65","value":"66"},{"key":"67","value":"68"},{"key":"69","value":"70"},{"key":"71","value":"72"},{"key":"73","value":"74"},{"key":"75","value":"76"},{"key":"77","value":"78"},{"key":"79","value":"80"},{"key":"81","value":"82"},{"key":"83","value":"84"},{"key":"85","value":"86"},{"key":"87","value":"88"},{"key":"89","value":"90"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/license-file/scaffoldfy.json",{"size":4994,"mtime":1771694061780,"hash":"91","data":"92"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/copilot-instructions.md",{"size":904,"mtime":1771694061780,"hash":"93","data":"94"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/package.json",{"size":1149,"mtime":1771694074048,"hash":"95","data":"96"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/security-policy/scaffoldfy.json",{"size":1297,"mtime":1771694061781,"hash":"97","data":"98"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scripts/add-dependencies.cjs",{"size":1753,"mtime":1771694061781,"hash":"99","data":"100"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/workspace-package-generator.test.ts",{"size":12229,"mtime":1771694061781,"hash":"101","data":"102"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/scaffoldfy.json",{"size":2045,"mtime":1771694061780,"hash":"103","data":"104"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/tsdown.config.ts",{"size":160,"mtime":1771694061781,"hash":"105","data":"106"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-copilot-instructions/scaffoldfy.json",{"size":704,"mtime":1771694061780,"hash":"107","data":"108"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-info/scaffoldfy.json",{"size":785,"mtime":1771694061780,"hash":"109","data":"110"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/turbo-workspace-package-generator/scaffoldfy.json",{"size":964,"mtime":1771694061781,"hash":"111","data":"112"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/vitest.config.ts",{"size":78,"mtime":1771694061781,"hash":"113","data":"114"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/monorepo-generate-packages-section/generate-packages-section.js",{"size":2047,"mtime":1771694061780,"hash":"115","data":"116"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-extend-with-disables.json",{"size":358,"mtime":1771694061781,"hash":"117","data":"118"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy.json",{"size":432,"mtime":1771694061781,"hash":"119","data":"120"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/eslint.config.mjs",{"size":260,"mtime":1771694061779,"hash":"121","data":"122"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/release.yml",{"size":1139,"mtime":1771694061780,"hash":"123","data":"124"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy.json",{"size":4802,"mtime":1771694061781,"hash":"125","data":"126"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/update-root-package-json/scaffoldfy.json",{"size":835,"mtime":1771694061781,"hash":"127","data":"128"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-disabled.json",{"size":561,"mtime":1771694061781,"hash":"129","data":"130"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scripts/check-tsdown-config.cjs",{"size":858,"mtime":1771694061781,"hash":"131","data":"132"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/detect-git-hub-org.js",{"size":1962,"mtime":1771694061781,"hash":"133","data":"134"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/project-info/scaffoldfy.json",{"size":3515,"mtime":1771694061781,"hash":"135","data":"136"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/test/validate-schema.test.ts",{"size":960,"mtime":1771694061781,"hash":"137","data":"138"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/experiment/scaffoldfy-base.json",{"size":361,"mtime":1771694061781,"hash":"139","data":"140"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy-base.json",{"size":3251,"mtime":1771694061781,"hash":"141","data":"142"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/pixpilot-changesets-release/scaffoldfy.json",{"size":1307,"mtime":1771694061780,"hash":"143","data":"144"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/README.md",{"size":2298,"mtime":1771694061779,"hash":"145","data":"146"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/workspace-package-generator/scaffoldfy-project-info.json",{"size":388,"mtime":1771694061781,"hash":"147","data":"148"},"/home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs/LICENSE",{"size":1065,"mtime":1771694061779,"hash":"149"},"6d73ab423c42975f3098a5faf5887a1b",{"hashOfOptions":"150"},"129fc064577f2fe749ed401b01155b0c",{"hashOfOptions":"151"},"6c55cdf14716b5a15bfd328b3817a759",{"hashOfOptions":"152"},"baadfd22a57a81937d70e0dec8b37aac",{"hashOfOptions":"153"},"cf8e67ad653b3e260e8934c29acd3b96",{"hashOfOptions":"154"},"e464727e71590fb03cd663baf1f341ae",{"hashOfOptions":"155"},"f54318350f291f72ab00fda487548c18",{"hashOfOptions":"156"},"513debbbe37a0908feda9f0bcc5fcc4b",{"hashOfOptions":"157"},"20171b8fd858f9b268e89c1aa6484a92",{"hashOfOptions":"158"},"2be50f22a6d61efa5175d1c8162901b6",{"hashOfOptions":"159"},"d16152bdbad281c6f548789be4bfd8dd",{"hashOfOptions":"160"},"fb12a6e35e71f2db94bbf66fedb48a90",{"hashOfOptions":"161"},"c4b2e848701a00ec46150ef82d25fe09",{"hashOfOptions":"162"},"2c919b3cf9d5c7564cd34ea5ef2f43ee",{"hashOfOptions":"163"},"e651245e6bffc9e7dbc5af2429e52131",{"hashOfOptions":"164"},"f9ce2b24b6b27b0bd159849f75d8bfd0",{"hashOfOptions":"165"},"6d888308c5d2927c9472c902b56b2973",{"hashOfOptions":"166"},"514dc329df8d9d1585e6f7bfe2097f9b",{"hashOfOptions":"167"},"3f83e52f12983c940261936f58d44cd1",{"hashOfOptions":"168"},"19c08961ecbe2ad976ba5da2d8277e5a",{"hashOfOptions":"169"},"37869e9ac49f0c14c1996d62cf69bec8",{"hashOfOptions":"170"},"0f3cdcc0b5df24febf8e9a0cad1950f6",{"hashOfOptions":"171"},"7515222c611237db89fcbcfffa9546a8",{"hashOfOptions":"172"},"a0fc37307c5b3e7ef6c635ee81d4b22a",{"hashOfOptions":"173"},"c20d4a6d559453b60294af84b449ab57",{"hashOfOptions":"174"},"886808504694ef21932e957e8f1ead6c",{"hashOfOptions":"175"},"552893570f59b876cc311161764b971b",{"hashOfOptions":"176"},"9ffdd9ced1b95e3c890a9ac66d04b26d",{"hashOfOptions":"177"},"6eef894b2f07712c525ba75684764564",{"hashOfOptions":"178"},"9937b6ab6bff563917af91b674d32d26","1228183422","703189870","1914606772","3423351643","2891414639","2296905056","1043358625","1175802438","3196870400","1543004120","312527989","4152018146","1656442100","3753816910","3570345646","2275067953","3507797927","3913745798","2114078672","1809810027","1097452595","1135076193","2874103108","1118698428","1933678496","3310438088","701893163","1154011297","4047521945"]
@@ -1,5 +1,5 @@
1
1
 
2
- > @pixpilot/scaffoldfy-configs@0.15.0 format /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
2
+ > @pixpilot/scaffoldfy-configs@0.17.0 format /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
3
3
  > prettier --check . --ignore-path ../../.gitignore --ignore-path ../../.prettierignore --write --cache --cache-location .cache/.prettiercache
4
4
 
5
5
  Checking formatting...
@@ -1,5 +1,5 @@
1
1
 
2
- > @pixpilot/scaffoldfy-configs@0.15.0 lint /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
2
+ > @pixpilot/scaffoldfy-configs@0.17.0 lint /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
3
3
  > eslint --cache --cache-location .cache/.eslintcache
4
4
 
5
5
 
@@ -1,15 +1,16 @@
1
1
 
2
- > @pixpilot/scaffoldfy-configs@0.15.0 test /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
2
+ > @pixpilot/scaffoldfy-configs@0.17.0 test /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
3
3
  > vitest --run --passWithNoTests
4
4
 
5
5
 
6
6
   RUN  v3.2.4 /home/runner/work/scaffoldfy/scaffoldfy/packages/scaffoldfy-configs
7
7
 
8
- ✓ test/validate-schema.test.ts (2 tests) 707ms
9
- ✓ validate-schema > should validate all scaffoldfy.json files in scaffoldfy-configs  703ms
8
+ ✓ test/validate-schema.test.ts (2 tests) 1051ms
9
+ ✓ validate-schema > should validate all scaffoldfy.json files in scaffoldfy-configs  1047ms
10
+ ✓ test/workspace-package-generator.test.ts (22 tests) 1440ms
10
11
 
11
-  Test Files  1 passed (1)
12
-  Tests  2 passed (2)
13
-  Start at  12:32:40
14
-  Duration  2.17s (transform 660ms, setup 0ms, collect 1.08s, tests 707ms, environment 0ms, prepare 139ms)
12
+  Test Files  2 passed (2)
13
+  Tests  24 passed (24)
14
+  Start at  17:15:20
15
+  Duration  3.09s (transform 842ms, setup 0ms, collect 2.47s, tests 2.49s, environment 1ms, prepare 351ms)
15
16
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @pixpilot/scaffoldfy-configs
2
2
 
3
+ ## 0.17.0
4
+
5
+ ### Minor Changes
6
+
7
+ - add "No License" option and update default selection
8
+
9
+ ## 0.16.0
10
+
11
+ ### Minor Changes
12
+
13
+ - add initial implementation for workspace package generator
14
+
3
15
  ## 0.15.0
4
16
 
5
17
  ### Minor Changes
@@ -10,6 +10,7 @@
10
10
  "type": "select",
11
11
  "message": "Select a license for your project",
12
12
  "choices": [
13
+ { "name": "No License", "value": "NONE" },
13
14
  { "name": "MIT", "value": "MIT" },
14
15
  { "name": "Apache 2.0", "value": "Apache-2.0" },
15
16
  { "name": "GPL v3", "value": "GPL-3.0" },
@@ -19,10 +20,9 @@
19
20
  { "name": "ISC", "value": "ISC" },
20
21
  { "name": "MPL 2.0", "value": "MPL-2.0" },
21
22
  { "name": "AGPL v3", "value": "AGPL-3.0" },
22
- { "name": "Unlicense", "value": "Unlicense" },
23
- { "name": "No License", "value": "NONE" }
23
+ { "name": "Unlicense", "value": "Unlicense" }
24
24
  ],
25
- "default": "MIT"
25
+ "default": "NONE"
26
26
  }
27
27
  ],
28
28
  "tasks": [
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pixpilot/scaffoldfy-configs",
3
3
  "type": "module",
4
- "version": "0.15.0",
4
+ "version": "0.17.0",
5
5
  "author": "PixPilot <m.doaie@hotmail.com>",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -23,11 +23,11 @@
23
23
  "devDependencies": {
24
24
  "@types/node": "^22.18.11",
25
25
  "eslint": "^9.38.0",
26
+ "@internal/eslint-config": "0.3.0",
26
27
  "@internal/prettier-config": "0.0.1",
27
28
  "@internal/tsdown-config": "0.1.0",
28
- "@internal/eslint-config": "0.3.0",
29
- "@internal/vitest-config": "0.1.0",
30
- "@pixpilot/scaffoldfy": "0.44.0"
29
+ "@pixpilot/scaffoldfy": "0.45.0",
30
+ "@internal/vitest-config": "0.1.0"
31
31
  },
32
32
  "prettier": "@internal/prettier-config",
33
33
  "publishConfig": {
@@ -0,0 +1,336 @@
1
+ import { execSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { validateScaffoldfyJsonFile } from '@pixpilot/scaffoldfy';
6
+ import { describe, expect, it } from 'vitest';
7
+
8
+ const CONFIG_DIR = path.join(__dirname, '..', 'workspace-package-generator');
9
+ const TEMPLATES_DIR = path.join(CONFIG_DIR, 'templates');
10
+ const SCRIPTS_DIR = path.join(CONFIG_DIR, 'scripts');
11
+
12
+ /** Directory where scaffoldfy is installed (contains its own handlebars dep). */
13
+ const SCAFFOLDFY_DIR = path.join(
14
+ __dirname,
15
+ '..',
16
+ 'node_modules',
17
+ '@pixpilot',
18
+ 'scaffoldfy',
19
+ );
20
+
21
+ /* -------------------------------------------------------------------------- */
22
+ /* Helpers */
23
+ /* -------------------------------------------------------------------------- */
24
+
25
+ /**
26
+ * Render a Handlebars template file by writing a small CJS runner script to
27
+ * a temp file and executing it inside the scaffoldfy package directory so that
28
+ * `require('handlebars')` resolves correctly.
29
+ */
30
+ function renderHbs(templatePath: string, context: Record<string, unknown>): string {
31
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scaffoldfy-hbs-'));
32
+ const runnerPath = path.join(tmpDir, 'run.cjs');
33
+ /*
34
+ * The runner is a plain CJS file — it resolves Handlebars relative to
35
+ * SCAFFOLDFY_DIR via require.resolve, then renders the template.
36
+ */
37
+ const hbsPath = require.resolve('handlebars', { paths: [SCAFFOLDFY_DIR] });
38
+ const runnerScript = [
39
+ `'use strict';`,
40
+ `const Handlebars = require(${JSON.stringify(hbsPath)});`,
41
+ `const templateContent = require('node:fs').readFileSync(${JSON.stringify(templatePath)}, 'utf8');`,
42
+ `const compiled = Handlebars.compile(templateContent);`,
43
+ `process.stdout.write(compiled(${JSON.stringify(context)}));`,
44
+ ].join('\n');
45
+
46
+ try {
47
+ fs.writeFileSync(runnerPath, runnerScript);
48
+ return execSync(`node "${runnerPath}"`, { encoding: 'utf8' });
49
+ } finally {
50
+ fs.rmSync(tmpDir, { recursive: true, force: true });
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Run the add-dependencies.cjs script in a temp directory and return
56
+ * the resulting package.json as an object.
57
+ */
58
+ function runAddDeps(
59
+ initialPkg: Record<string, unknown>,
60
+ deps: string,
61
+ ): Record<string, unknown> {
62
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scaffoldfy-test-'));
63
+ const pkgFile = path.join(tmpDir, 'package.json');
64
+ try {
65
+ fs.writeFileSync(pkgFile, JSON.stringify(initialPkg, null, 2));
66
+ execSync(
67
+ `node ${JSON.stringify(path.join(SCRIPTS_DIR, 'add-dependencies.cjs'))} --file=${JSON.stringify(pkgFile)} --deps=${JSON.stringify(deps)}`,
68
+ { encoding: 'utf8' },
69
+ );
70
+ return JSON.parse(fs.readFileSync(pkgFile, 'utf8')) as Record<string, unknown>;
71
+ } finally {
72
+ fs.rmSync(tmpDir, { recursive: true, force: true });
73
+ }
74
+ }
75
+
76
+ /* -------------------------------------------------------------------------- */
77
+ /* Schema validation */
78
+ /* -------------------------------------------------------------------------- */
79
+
80
+ describe('workspace-package-generator – schema', () => {
81
+ it('should have a valid scaffoldfy.json', () => {
82
+ const filePath = path.join(CONFIG_DIR, 'scaffoldfy.json');
83
+ expect(fs.existsSync(filePath)).toBe(true);
84
+
85
+ const result = validateScaffoldfyJsonFile(filePath);
86
+ if (!result.valid) {
87
+ console.error('Validation errors:', result.errors);
88
+ }
89
+ expect(result.valid).toBe(true);
90
+ });
91
+ });
92
+
93
+ /* -------------------------------------------------------------------------- */
94
+ /* Template file existence */
95
+ /* -------------------------------------------------------------------------- */
96
+
97
+ describe('workspace-package-generator – template files', () => {
98
+ const expectedTemplates = [
99
+ 'eslint.config.mjs.hbs',
100
+ 'package.json.hbs',
101
+ 'README.md.hbs',
102
+ 'tsconfig.json.hbs',
103
+ 'tsconfig.build.json.hbs',
104
+ 'tsdown.config.ts.hbs',
105
+ 'vitest.config.ts.hbs',
106
+ path.join('src', 'index.ts.hbs'),
107
+ path.join('test', 'index.test.ts.hbs'),
108
+ // license templates removed from this config; no expectations here
109
+ ];
110
+
111
+ for (const tpl of expectedTemplates) {
112
+ it(`should have template: ${tpl}`, () => {
113
+ expect(fs.existsSync(path.join(TEMPLATES_DIR, tpl))).toBe(true);
114
+ });
115
+ }
116
+ });
117
+
118
+ /* -------------------------------------------------------------------------- */
119
+ /* Helper scripts */
120
+ /* -------------------------------------------------------------------------- */
121
+
122
+ describe('workspace-package-generator – add-dependencies script', () => {
123
+ it('should add dependencies to package.json', () => {
124
+ const initial = { name: 'test-pkg', dependencies: {} };
125
+ const result = runAddDeps(initial, 'lodash axios');
126
+
127
+ expect(result.dependencies).toMatchObject({ lodash: '*', axios: '*' });
128
+ });
129
+
130
+ it('should sort dependencies alphabetically', () => {
131
+ const initial = { name: 'test-pkg', dependencies: {} };
132
+ const result = runAddDeps(initial, 'zod axios chalk');
133
+ const keys = Object.keys(result.dependencies as Record<string, string>);
134
+
135
+ expect(keys).toEqual([...keys].sort());
136
+ });
137
+
138
+ it('should sort existing devDependencies alphabetically', () => {
139
+ const initial = {
140
+ name: 'test-pkg',
141
+ dependencies: {},
142
+ devDependencies: { zod: '^3.0.0', axios: '^1.0.0', chalk: '^5.0.0' },
143
+ };
144
+ const result = runAddDeps(initial, 'vitest');
145
+ const keys = Object.keys(result.devDependencies as Record<string, string>);
146
+
147
+ expect(keys).toEqual([...keys].sort());
148
+ });
149
+
150
+ it('should exit gracefully when no deps are provided', () => {
151
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scaffoldfy-test-'));
152
+ const pkgFile = path.join(tmpDir, 'package.json');
153
+ try {
154
+ const initial = { name: 'test-pkg' };
155
+ fs.writeFileSync(pkgFile, JSON.stringify(initial, null, 2));
156
+
157
+ expect(() =>
158
+ execSync(
159
+ `node "${path.join(SCRIPTS_DIR, 'add-dependencies.cjs')}" --file="${pkgFile}" --deps=""`,
160
+ { encoding: 'utf8' },
161
+ ),
162
+ ).not.toThrow();
163
+
164
+ /* File should be unchanged */
165
+ expect(JSON.parse(fs.readFileSync(pkgFile, 'utf8'))).toMatchObject(initial);
166
+ } finally {
167
+ fs.rmSync(tmpDir, { recursive: true, force: true });
168
+ }
169
+ });
170
+ });
171
+
172
+ /* -------------------------------------------------------------------------- */
173
+ /* Template rendering – key scenarios */
174
+ /* -------------------------------------------------------------------------- */
175
+
176
+ describe('workspace-package-generator – package.json.hbs rendering', () => {
177
+ const tplPath = path.join(TEMPLATES_DIR, 'package.json.hbs');
178
+
179
+ /** Internal package (non-npm) */
180
+ it('should render a valid JSON for an internal package', () => {
181
+ const ctx = {
182
+ packageBaseName: 'my-package',
183
+ isNpmPackage: false,
184
+ workspace: 'packages',
185
+ repoDirectory: 'packages/my-package',
186
+ relativeRootPath: '../../',
187
+ author: 'Test Author',
188
+ repoUrl: 'https://github.com/test/monorepo.git',
189
+ orgName: 'myorg',
190
+ isBundlerTsc: false,
191
+ isBundlerTsdown: false,
192
+ hasTsdownConfig: false,
193
+ tsdownConfigPackage: '@pixpilot/tsdown-config',
194
+ };
195
+
196
+ const rendered = renderHbs(tplPath, ctx);
197
+ const pkg = JSON.parse(rendered);
198
+
199
+ expect(pkg.name).toBe('@internal/my-package');
200
+ expect(pkg.private).toBe(true);
201
+ expect(pkg.publishConfig).toBeUndefined();
202
+ expect(pkg.files).toBeUndefined();
203
+ });
204
+
205
+ /** Public npm package with tsdown bundler */
206
+ it('should render valid JSON for a public npm package (tsdown)', () => {
207
+ const ctx = {
208
+ packageBaseName: 'my-package',
209
+ isNpmPackage: true,
210
+ isPublicPackage: true,
211
+ bundler: 'tsdown',
212
+ isBundlerTsc: false,
213
+ isBundlerTsdown: true,
214
+ hasTsdownConfig: false,
215
+ tsdownConfigPackage: '@pixpilot/tsdown-config',
216
+ workspace: 'packages',
217
+ repoDirectory: 'packages/my-package',
218
+ relativeRootPath: '../../',
219
+ author: 'Test Author',
220
+ repoUrl: 'https://github.com/test/monorepo.git',
221
+ orgName: 'myorg',
222
+ };
223
+
224
+ const rendered = renderHbs(tplPath, ctx);
225
+ const pkg = JSON.parse(rendered);
226
+
227
+ expect(pkg.name).toBe('@myorg/my-package');
228
+ expect(pkg.private).toBeUndefined();
229
+ expect(pkg.publishConfig?.access).toBe('public');
230
+ expect(pkg.files).toContain('dist');
231
+ expect(pkg.scripts?.build).toBe('tsdown');
232
+ expect(pkg.devDependencies?.['@pixpilot/tsdown-config']).toBeDefined();
233
+ expect(pkg.devDependencies?.tsdown).toBe('catalog:dev');
234
+ });
235
+
236
+ /** Private npm package with tsc bundler */
237
+ it('should render valid JSON for a private npm package (tsc)', () => {
238
+ const ctx = {
239
+ packageBaseName: 'my-package',
240
+ isNpmPackage: true,
241
+ isPublicPackage: false,
242
+ bundler: 'tsc',
243
+ isBundlerTsc: true,
244
+ isBundlerTsdown: false,
245
+ hasTsdownConfig: false,
246
+ tsdownConfigPackage: '@pixpilot/tsdown-config',
247
+ workspace: 'packages',
248
+ repoDirectory: 'packages/my-package',
249
+ relativeRootPath: '../../',
250
+ author: 'Test Author',
251
+ repoUrl: 'https://github.com/test/monorepo.git',
252
+ orgName: '',
253
+ };
254
+
255
+ const rendered = renderHbs(tplPath, ctx);
256
+ const pkg = JSON.parse(rendered);
257
+
258
+ expect(pkg.name).toBe('my-package');
259
+ expect(pkg.publishConfig?.access).toBe('restricted');
260
+ expect(pkg.scripts?.build).toContain('tsc');
261
+ expect(pkg.scripts?.['build:watch']).toContain('tsc');
262
+ expect(pkg.devDependencies?.tsdown).toBeUndefined();
263
+ });
264
+
265
+ /** npm package with internal tsdown config */
266
+ it('should use @internal/tsdown-config when hasTsdownConfig is true', () => {
267
+ const ctx = {
268
+ packageBaseName: 'my-package',
269
+ isNpmPackage: true,
270
+ isPublicPackage: true,
271
+ bundler: 'tsdown',
272
+ isBundlerTsc: false,
273
+ isBundlerTsdown: true,
274
+ hasTsdownConfig: true,
275
+ tsdownConfigPackage: '@internal/tsdown-config',
276
+ workspace: 'packages',
277
+ repoDirectory: 'packages/my-package',
278
+ relativeRootPath: '../../',
279
+ author: 'Test Author',
280
+ repoUrl: '',
281
+ orgName: 'myorg',
282
+ };
283
+
284
+ const rendered = renderHbs(tplPath, ctx);
285
+ const pkg = JSON.parse(rendered);
286
+
287
+ expect(pkg.devDependencies?.['@internal/tsdown-config']).toBe('workspace:*');
288
+ expect(pkg.devDependencies?.['@pixpilot/tsdown-config']).toBeUndefined();
289
+ });
290
+ });
291
+
292
+ describe('workspace-package-generator – tsdown.config.ts.hbs rendering', () => {
293
+ const tplPath = path.join(TEMPLATES_DIR, 'tsdown.config.ts.hbs');
294
+
295
+ it('should render without bundle size when bundleSizeLimit is falsy', () => {
296
+ const ctx = {
297
+ tsdownConfigPackage: '@pixpilot/tsdown-config',
298
+ bundleSizeLimit: 0,
299
+ };
300
+ const rendered = renderHbs(tplPath, ctx);
301
+
302
+ expect(rendered).toContain("import { defineConfig } from '@pixpilot/tsdown-config'");
303
+ expect(rendered).not.toContain('MAX_BUNDLE_SIZE_KB');
304
+ expect(rendered).toContain("entry: 'src/index.ts'");
305
+ });
306
+
307
+ it('should render bundle size limit when bundleSizeLimit is set', () => {
308
+ const ctx = {
309
+ tsdownConfigPackage: '@pixpilot/tsdown-config',
310
+ bundleSizeLimit: 50,
311
+ };
312
+ const rendered = renderHbs(tplPath, ctx);
313
+
314
+ expect(rendered).toContain('MAX_BUNDLE_SIZE_KB = 50');
315
+ expect(rendered).toContain('bundleSize: MAX_BUNDLE_SIZE_KB * KB');
316
+ });
317
+ });
318
+
319
+ describe('workspace-package-generator – src/index.ts.hbs rendering', () => {
320
+ it('should render the package name into the exported constant', () => {
321
+ const tplPath = path.join(TEMPLATES_DIR, 'src', 'index.ts.hbs');
322
+ const rendered = renderHbs(tplPath, { packageBaseName: 'cool-lib' });
323
+
324
+ expect(rendered).toContain("export const name = 'cool-lib'");
325
+ });
326
+ });
327
+
328
+ describe('workspace-package-generator – test/index.test.ts.hbs rendering', () => {
329
+ it('should render a valid vitest test file', () => {
330
+ const tplPath = path.join(TEMPLATES_DIR, 'test', 'index.test.ts.hbs');
331
+ const rendered = renderHbs(tplPath, {});
332
+
333
+ expect(rendered).toContain("from 'vitest'");
334
+ expect(rendered).toContain("from '../src'");
335
+ });
336
+ });
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+ "prompts": [
6
+ {
7
+ "id": "isEnabled",
8
+ "type": "confirm",
9
+ "message": "Should Disable Next Prompt?",
10
+ "default": false
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+
6
+ "extends": [
7
+ "./scaffoldfy-extend-with-disables.json",
8
+ "https://unpkg.com/@pixpilot/scaffoldfy-configs@latest/license-file/scaffoldfy.json"
9
+ ],
10
+ "enabled": { "type": "condition", "value": "isEnabled == true" },
11
+
12
+ "prompts": [
13
+ {
14
+ "id": "disabledPrompt",
15
+ "type": "input",
16
+ "message": "This prompt is disabled"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+
6
+ "prompts": [
7
+ {
8
+ "id": "filesystemDisabledPrompt",
9
+ "type": "input",
10
+ "message": "This Filesystem prompt is disabled"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+ "extends": ["./scaffoldfy-base.json", "./scaffoldfy-disabled.json"],
6
+ "prompts": [
7
+ {
8
+ "id": "finalPrompt",
9
+ "type": "confirm",
10
+ "message": "Is this the final prompt?",
11
+ "default": false
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,132 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator-base",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+
6
+ "variables": [
7
+ {
8
+ "id": "currentYear",
9
+ "value": {
10
+ "type": "exec",
11
+ "value": "node -e \"process.stdout.write(String(new Date().getFullYear()))\""
12
+ }
13
+ },
14
+ {
15
+ "id": "hasTsdownConfig",
16
+ "required": false,
17
+ "value": {
18
+ "type": "exec-file",
19
+ "file": "./scripts/check-tsdown-config.cjs",
20
+ "runtime": "node"
21
+ }
22
+ },
23
+ {
24
+ "id": "relativeRootPath",
25
+ "value": "../../"
26
+ },
27
+ {
28
+ "id": "bundler",
29
+ "value": {
30
+ "type": "conditional",
31
+ "condition": "hasTsdownConfig === true",
32
+ "ifTrue": "tsdown",
33
+ "ifFalse": "tsc"
34
+ }
35
+ },
36
+ {
37
+ "id": "isBundlerTsc",
38
+ "value": {
39
+ "type": "conditional",
40
+ "condition": "bundler === 'tsc'",
41
+ "ifTrue": true,
42
+ "ifFalse": false
43
+ }
44
+ },
45
+ {
46
+ "id": "isBundlerTsdown",
47
+ "value": {
48
+ "type": "conditional",
49
+ "condition": "bundler === 'tsdown'",
50
+ "ifTrue": true,
51
+ "ifFalse": false
52
+ }
53
+ },
54
+ {
55
+ "id": "tsdownConfigPackage",
56
+ "value": {
57
+ "type": "conditional",
58
+ "condition": "hasTsdownConfig === true",
59
+ "ifTrue": "@internal/tsdown-config",
60
+ "ifFalse": "@pixpilot/tsdown-config"
61
+ }
62
+ }
63
+ ],
64
+
65
+ "prompts": [
66
+ {
67
+ "id": "workspace",
68
+ "type": "select",
69
+ "message": "Select target workspace",
70
+ "choices": [
71
+ { "name": "packages", "value": "packages" },
72
+ { "name": "apps", "value": "apps" },
73
+ { "name": "tooling", "value": "tooling" },
74
+ { "name": "api", "value": "api" }
75
+ ],
76
+ "default": "packages"
77
+ },
78
+ {
79
+ "id": "packageBaseName",
80
+ "type": "input",
81
+ "message": "Enter the package name (e.g. my-package)",
82
+ "required": true,
83
+ "transformers": ["kebabcase"]
84
+ },
85
+ {
86
+ "id": "deps",
87
+ "type": "input",
88
+ "message": "Enter list of dependencies (space separated, leave empty to skip)",
89
+ "required": false
90
+ },
91
+ {
92
+ "id": "isNpmPackage",
93
+ "type": "confirm",
94
+ "message": "Is this an npm package?",
95
+ "default": false
96
+ },
97
+ {
98
+ "id": "isPublicPackage",
99
+ "type": "confirm",
100
+ "message": "Is this a public package?",
101
+ "default": false,
102
+ "enabled": {
103
+ "type": "condition",
104
+ "value": "isNpmPackage === true"
105
+ }
106
+ },
107
+ {
108
+ "id": "bundler",
109
+ "type": "select",
110
+ "message": "Select a bundler for this package",
111
+ "choices": [
112
+ { "name": "TypeScript Compiler (tsc)", "value": "tsc" },
113
+ { "name": "tsdown", "value": "tsdown" }
114
+ ],
115
+ "default": "tsc",
116
+ "enabled": {
117
+ "type": "condition",
118
+ "value": "isNpmPackage === true"
119
+ }
120
+ },
121
+ {
122
+ "id": "bundleSizeLimit",
123
+ "type": "number",
124
+ "message": "Enter bundle size limit in KB (0 for no limit)",
125
+ "default": 0,
126
+ "enabled": {
127
+ "type": "condition",
128
+ "value": "bundler === 'tsdown' && isPublicPackage === true"
129
+ }
130
+ }
131
+ ]
132
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+ "extends": [
6
+ "https://unpkg.com/@pixpilot/scaffoldfy-configs@latest/project-info/scaffoldfy.json"
7
+ ],
8
+ "enabled": { "type": "condition", "value": "isNpmPackage == true" }
9
+ }
@@ -0,0 +1,150 @@
1
+ {
2
+ "$schema": "../node_modules/@pixpilot/scaffoldfy/schema/scaffoldfy.schema.json",
3
+ "name": "workspace-package-generator",
4
+ "description": "Generate a new package for a pnpm + Turbo monorepo workspace",
5
+ "extends": [
6
+ "./scaffoldfy-base.json",
7
+ "./scaffoldfy-project-info.json",
8
+ "../license-file/scaffoldfy.json"
9
+ ],
10
+
11
+ "tasks": [
12
+ {
13
+ "id": "create-eslint-config",
14
+ "name": "Create eslint.config.mjs",
15
+ "description": "Create the ESLint configuration file for the new package",
16
+ "type": "create",
17
+ "config": {
18
+ "file": "{{workspace}}/{{packageBaseName}}/eslint.config.mjs",
19
+ "templateFile": "./templates/eslint.config.mjs.hbs"
20
+ }
21
+ },
22
+ {
23
+ "id": "create-package-json",
24
+ "name": "Create package.json",
25
+ "description": "Create the package.json for the new package",
26
+ "type": "create",
27
+ "config": {
28
+ "file": "{{workspace}}/{{packageBaseName}}/package.json",
29
+ "templateFile": "./templates/package.json.hbs"
30
+ }
31
+ },
32
+ {
33
+ "id": "create-tsconfig",
34
+ "name": "Create tsconfig.json",
35
+ "description": "Create the TypeScript configuration file for the new package",
36
+ "type": "create",
37
+ "config": {
38
+ "file": "{{workspace}}/{{packageBaseName}}/tsconfig.json",
39
+ "templateFile": "./templates/tsconfig.json.hbs"
40
+ }
41
+ },
42
+ {
43
+ "id": "create-tsconfig-build",
44
+ "name": "Create tsconfig.build.json",
45
+ "description": "Create the TypeScript build configuration (tsc bundler only)",
46
+ "type": "create",
47
+ "enabled": {
48
+ "type": "condition",
49
+ "value": "bundler === 'tsc' && isNpmPackage === true"
50
+ },
51
+ "config": {
52
+ "file": "{{workspace}}/{{packageBaseName}}/tsconfig.build.json",
53
+ "templateFile": "./templates/tsconfig.build.json.hbs"
54
+ }
55
+ },
56
+ {
57
+ "id": "create-tsdown-config",
58
+ "name": "Create tsdown.config.ts",
59
+ "description": "Create the tsdown bundler configuration (tsdown bundler only)",
60
+ "type": "create",
61
+ "enabled": {
62
+ "type": "condition",
63
+ "value": "bundler === 'tsdown' && isNpmPackage === true"
64
+ },
65
+ "config": {
66
+ "file": "{{workspace}}/{{packageBaseName}}/tsdown.config.ts",
67
+ "templateFile": "./templates/tsdown.config.ts.hbs"
68
+ }
69
+ },
70
+ {
71
+ "id": "create-vitest-config",
72
+ "name": "Create vitest.config.ts",
73
+ "description": "Create the Vitest configuration file for the new package",
74
+ "type": "create",
75
+ "config": {
76
+ "file": "{{workspace}}/{{packageBaseName}}/vitest.config.ts",
77
+ "templateFile": "./templates/vitest.config.ts.hbs"
78
+ }
79
+ },
80
+ {
81
+ "id": "create-readme",
82
+ "name": "Create README.md",
83
+ "description": "Create the README file for the new package",
84
+ "type": "create",
85
+ "config": {
86
+ "file": "{{workspace}}/{{packageBaseName}}/README.md",
87
+ "templateFile": "./templates/README.md.hbs"
88
+ }
89
+ },
90
+ {
91
+ "id": "create-src-index",
92
+ "name": "Create src/index.ts",
93
+ "description": "Create the main entry point source file",
94
+ "type": "create",
95
+ "config": {
96
+ "file": "{{workspace}}/{{packageBaseName}}/src/index.ts",
97
+ "templateFile": "./templates/src/index.ts.hbs"
98
+ }
99
+ },
100
+ {
101
+ "id": "create-test-index",
102
+ "name": "Create test/index.test.ts",
103
+ "description": "Create the main test file",
104
+ "type": "create",
105
+ "config": {
106
+ "file": "{{workspace}}/{{packageBaseName}}/test/index.test.ts",
107
+ "templateFile": "./templates/test/index.test.ts.hbs"
108
+ }
109
+ },
110
+ {
111
+ "id": "add-dependencies",
112
+ "name": "Add user-specified dependencies",
113
+ "description": "Add any extra dependencies the user specified to package.json",
114
+ "type": "exec-file",
115
+ "required": false,
116
+ "enabled": {
117
+ "type": "condition",
118
+ "value": "deps !== undefined && deps !== '' && deps !== null"
119
+ },
120
+ "config": {
121
+ "file": "./scripts/add-dependencies.cjs",
122
+ "runtime": "node",
123
+ "args": [
124
+ "--file={{workspace}}/{{packageBaseName}}/package.json",
125
+ "--deps={{deps}}"
126
+ ]
127
+ }
128
+ },
129
+ {
130
+ "id": "install-dependencies",
131
+ "name": "Install dependencies",
132
+ "description": "Run pnpm install to install workspace dependencies",
133
+ "type": "exec",
134
+ "required": false,
135
+ "config": {
136
+ "command": "pnpm install"
137
+ }
138
+ },
139
+ {
140
+ "id": "format-files",
141
+ "name": "Format generated files",
142
+ "description": "Run Prettier to format all generated files",
143
+ "type": "exec",
144
+ "required": false,
145
+ "config": {
146
+ "command": "pnpm prettier --write \"{{workspace}}/{{packageBaseName}}/**\" --ignore-unknown"
147
+ }
148
+ }
149
+ ]
150
+ }
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ /* eslint-disable node/prefer-global/process */
3
+ /**
4
+ * Adds user-specified dependencies to a package.json file and sorts all
5
+ * dependency maps alphabetically.
6
+ *
7
+ * Usage:
8
+ * node add-dependencies.js --file=<path> --deps="dep1 dep2 dep3"
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ const fs = require('node:fs');
14
+
15
+ const INDENT_SPACES = 2;
16
+
17
+ /** @param {string} prefix */
18
+ function getArg(prefix) {
19
+ const arg = process.argv.find((a) => a.startsWith(prefix));
20
+ return arg ? arg.slice(prefix.length) : undefined;
21
+ }
22
+
23
+ const file = getArg('--file=');
24
+ const depsRaw = getArg('--deps=');
25
+
26
+ if (!file) {
27
+ console.error('Missing --file argument');
28
+ process.exit(1);
29
+ }
30
+
31
+ if (!depsRaw || !depsRaw.trim()) {
32
+ /* No dependencies to add — exit gracefully. */
33
+ process.exit(0);
34
+ }
35
+
36
+ if (!fs.existsSync(file)) {
37
+ console.error(`File not found: ${file}`);
38
+ process.exit(1);
39
+ }
40
+
41
+ /** @type {Record<string, unknown>} */
42
+ let pkg;
43
+
44
+ try {
45
+ pkg = JSON.parse(fs.readFileSync(file, 'utf8'));
46
+ } catch (err) {
47
+ console.error(`Failed to parse ${file}: ${err.message}`);
48
+ process.exit(1);
49
+ }
50
+
51
+ const deps = depsRaw.split(' ').filter(Boolean);
52
+
53
+ if (!pkg.dependencies || typeof pkg.dependencies !== 'object') {
54
+ pkg.dependencies = {};
55
+ }
56
+
57
+ for (const dep of deps) {
58
+ pkg.dependencies[dep] = '*';
59
+ }
60
+
61
+ /**
62
+ * Sort a dependency map alphabetically by key.
63
+ */
64
+ function sortDeps(map) {
65
+ return Object.fromEntries(Object.entries(map).sort(([a], [b]) => a.localeCompare(b)));
66
+ }
67
+
68
+ if (pkg.dependencies && typeof pkg.dependencies === 'object') {
69
+ pkg.dependencies = sortDeps(pkg.dependencies);
70
+ }
71
+
72
+ if (pkg.devDependencies && typeof pkg.devDependencies === 'object') {
73
+ pkg.devDependencies = sortDeps(pkg.devDependencies);
74
+ }
75
+
76
+ fs.writeFileSync(file, JSON.stringify(pkg, null, INDENT_SPACES));
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ /* eslint-disable node/prefer-global/process */
3
+ /**
4
+ * Checks whether @internal/tsdown-config exists in the monorepo's node_modules.
5
+ * Outputs "true" or "false" to stdout.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ const fs = require('node:fs');
11
+ const path = require('node:path');
12
+
13
+ const cwd = process.cwd();
14
+
15
+ /*
16
+ * In a pnpm monorepo, the workspace packages may be hoisted to the root
17
+ * node_modules or available via the workspace symlinks.
18
+ * Check common locations relative to the current working directory.
19
+ */
20
+ const locations = [
21
+ path.join(cwd, 'node_modules', '@internal', 'tsdown-config'),
22
+ path.join(cwd, '..', 'node_modules', '@internal', 'tsdown-config'),
23
+ path.join(cwd, '..', '..', 'node_modules', '@internal', 'tsdown-config'),
24
+ ];
25
+
26
+ const exists = locations.some((loc) => fs.existsSync(loc));
27
+
28
+ process.stdout.write(exists ? 'true' : 'false');
@@ -0,0 +1,3 @@
1
+ # {{packageBaseName}}
2
+
3
+ ## Add usage instructions here.
@@ -0,0 +1,6 @@
1
+ import baseConfig from '@internal/eslint-config/base';
2
+
3
+ // Uncomment to use the internal ESLint config if available
4
+ // /** @type {import('@internal/eslint-config').Config} */
5
+ /** @type {import('typescript-eslint').Config} */
6
+ export default baseConfig;
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "{{#if isNpmPackage}}{{#if orgName}}@{{orgName}}/{{packageBaseName}}{{else}}{{packageBaseName}}{{/if}}{{else}}@internal/{{packageBaseName}}{{/if}}",
3
+ "type": "module",
4
+ "version": "0.0.0",
5
+ {{#unless isNpmPackage}}
6
+ "private": true,
7
+ {{/unless}}
8
+ "packageManager": "pnpm@10.17.0",
9
+ "author": "{{{author}}}",
10
+ "license": "MIT",
11
+ {{#if repoUrl}}
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "{{repoUrl}}",
15
+ "directory": "{{repoDirectory}}"
16
+ },
17
+ {{/if}}
18
+ "keywords": [],
19
+ "exports": "./src/index.ts",
20
+ {{#if isNpmPackage}}
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "publishConfig": {
25
+ "access": "{{#if isPublicPackage}}public{{else}}restricted{{/if}}",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js",
30
+ "require": "./dist/index.cjs"
31
+ }
32
+ },
33
+ "main": "./dist/index.cjs",
34
+ "module": "./dist/index.js",
35
+ "types": "./dist/index.d.ts"
36
+ },
37
+ {{/if}}
38
+ "scripts": {
39
+ {{#if isNpmPackage}}
40
+ "prepublishOnly": "pnpm run clean && pnpm run build",
41
+ {{/if}}
42
+ "clean": "git clean -xdf .cache .turbo dist",
43
+ "clean:all": "pnpm clean && git clean -xdf node_modules",
44
+ {{#if isNpmPackage}}
45
+ {{#if isBundlerTsc}}
46
+ "build": "pnpm run clean && tsc -p tsconfig.build.json",
47
+ "build:watch": "pnpm run clean && tsc -p tsconfig.build.json --watch",
48
+ {{/if}}
49
+ {{#if isBundlerTsdown}}
50
+ "build": "tsdown",
51
+ "build:watch": "tsdown --watch",
52
+ {{/if}}
53
+ {{/if}}
54
+ "test": "vitest --run --passWithNoTests",
55
+ "test:watch": "vitest --watch",
56
+ "test:ui": "vitest --ui",
57
+ "test:coverage": "vitest --coverage",
58
+ "typecheck": "tsc --noEmit",
59
+ "lint": "eslint",
60
+ "format": "prettier --check . --ignore-path {{relativeRootPath}}.gitignore --ignore-path {{relativeRootPath}}.prettierignore"
61
+ },
62
+ "devDependencies": {
63
+ "@internal/eslint-config": "workspace:*",
64
+ "@internal/prettier-config": "workspace:*",
65
+ "@internal/tsconfig": "workspace:*",
66
+ {{#if isNpmPackage}}
67
+ {{#if isBundlerTsdown}}
68
+ "{{tsdownConfigPackage}}": "{{#if hasTsdownConfig}}workspace:*{{else}}^1.0.0{{/if}}",
69
+ {{/if}}
70
+ {{/if}}
71
+ "@internal/vitest-config": "workspace:*",
72
+ "@types/node": "catalog:dev",
73
+ "eslint": "catalog:dev",
74
+ {{#if isNpmPackage}}
75
+ {{#if isBundlerTsdown}}
76
+ "tsdown": "catalog:dev",
77
+ {{/if}}
78
+ {{/if}}
79
+ "typescript": "catalog:dev"
80
+ },
81
+ "prettier": "@internal/prettier-config"
82
+ }
@@ -0,0 +1 @@
1
+ export const name = '{{packageBaseName}}';
@@ -0,0 +1,9 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import { name } from '../src';
4
+
5
+ describe('name', () => {
6
+ it('should be defined', () => {
7
+ expect(name).toBeDefined();
8
+ });
9
+ });
@@ -0,0 +1,11 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src",
5
+ "declaration": true,
6
+ "declarationDir": "./dist",
7
+ "outDir": "./dist"
8
+ },
9
+ "include": ["src"],
10
+ "exclude": ["test/**/*.spec.ts", "test/**/*.test.ts"]
11
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "@internal/tsconfig/base.json",
3
+ "include": ["src/**/*", "test/**/*", "scripts/**/*", "*.config.ts", "*.config.js"]
4
+ }
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from '{{tsdownConfigPackage}}';
2
+
3
+ {{#if bundleSizeLimit}}
4
+ const KB = 1024;
5
+ const MAX_BUNDLE_SIZE_KB = {{bundleSizeLimit}};
6
+
7
+ {{/if}}
8
+ export default defineConfig({
9
+ {{#if bundleSizeLimit}}
10
+ bundleSize: MAX_BUNDLE_SIZE_KB * KB,
11
+ {{/if}}
12
+ entry: 'src/index.ts',
13
+ dts: true,
14
+ minify: true,
15
+ clean: true,
16
+ });
@@ -0,0 +1,3 @@
1
+ import baseConfig from '@internal/vitest-config';
2
+
3
+ export default baseConfig;