create-atom.io 0.0.0 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/{create-atom-BV6WVRvY.js → create-atom-DOkiQlT8.js} +27 -11
  2. package/dist/create-atom-DOkiQlT8.js.map +1 -0
  3. package/dist/create-atom.d.ts +5 -2
  4. package/dist/create-atom.d.ts.map +1 -1
  5. package/dist/create-atom.js +1 -1
  6. package/dist/create-atom.x.js +27 -31
  7. package/dist/create-atom.x.js.map +1 -1
  8. package/package.json +53 -55
  9. package/src/create-atom.ts +28 -5
  10. package/src/create-atom.x.ts +16 -19
  11. package/templates/{base → preact-svg-editor}/eslint.config.ts +4 -3
  12. package/templates/preact-svg-editor/eslint.d.ts +31 -0
  13. package/templates/preact-svg-editor/node_modules/.bin/vite +21 -0
  14. package/templates/{base → preact-svg-editor}/package.json +1 -1
  15. package/templates/{base → preact-svg-editor}/src/BezierPlayground.tsx +157 -147
  16. package/templates/{base → preact-svg-editor}/src/index.tsx +6 -4
  17. package/templates/{base → preact-svg-editor}/vite.config.ts +2 -1
  18. package/templates/react-node-backend/.turbo/turbo-build.log +12 -0
  19. package/templates/react-node-backend/README.md +75 -0
  20. package/templates/react-node-backend/_gitignore +24 -0
  21. package/templates/react-node-backend/dist/assets/index-6PkP9syN.js +9 -0
  22. package/templates/react-node-backend/dist/assets/index-By2j7w9s.css +1 -0
  23. package/templates/react-node-backend/dist/index.html +14 -0
  24. package/templates/react-node-backend/dist/react.svg +1 -0
  25. package/templates/react-node-backend/dist/vite.svg +1 -0
  26. package/templates/react-node-backend/eslint.config.ts +176 -0
  27. package/templates/react-node-backend/index.html +13 -0
  28. package/templates/react-node-backend/node/authenticator.ts +47 -0
  29. package/templates/react-node-backend/node/server.ts +103 -0
  30. package/templates/react-node-backend/node_modules/.bin/conc +21 -0
  31. package/templates/react-node-backend/node_modules/.bin/concurrently +21 -0
  32. package/templates/react-node-backend/node_modules/.bin/eslint +21 -0
  33. package/templates/react-node-backend/node_modules/.bin/tsc +21 -0
  34. package/templates/react-node-backend/node_modules/.bin/tsserver +21 -0
  35. package/templates/react-node-backend/node_modules/.bin/vite +21 -0
  36. package/templates/react-node-backend/package.json +33 -0
  37. package/templates/react-node-backend/public/react.svg +1 -0
  38. package/templates/react-node-backend/public/vite.svg +1 -0
  39. package/templates/react-node-backend/src/App.tsx +69 -0
  40. package/templates/react-node-backend/src/index.css +145 -0
  41. package/templates/react-node-backend/src/main.tsx +12 -0
  42. package/templates/react-node-backend/tsconfig.app.json +28 -0
  43. package/templates/react-node-backend/tsconfig.json +7 -0
  44. package/templates/react-node-backend/tsconfig.node.json +26 -0
  45. package/templates/react-node-backend/vite.config.ts +13 -0
  46. package/dist/create-atom-BV6WVRvY.js.map +0 -1
  47. package/templates/base/node_modules/.bin/browserslist +0 -21
  48. package/templates/base/node_modules/.bin/eslint +0 -21
  49. package/templates/base/node_modules/.bin/jiti +0 -21
  50. package/templates/base/node_modules/.bin/sass +0 -21
  51. package/templates/base/node_modules/.bin/terser +0 -21
  52. package/templates/base/node_modules/.bin/tsc +0 -21
  53. package/templates/base/node_modules/.bin/tsserver +0 -21
  54. package/templates/base/node_modules/.bin/vite +0 -21
  55. package/templates/base/node_modules/.bin/yaml +0 -21
  56. package/templates/base/node_modules/.vite/deps/_metadata.json +0 -82
  57. package/templates/base/node_modules/.vite/deps/atom__io.js +0 -72
  58. package/templates/base/node_modules/.vite/deps/atom__io.js.map +0 -7
  59. package/templates/base/node_modules/.vite/deps/atom__io_react.js +0 -170
  60. package/templates/base/node_modules/.vite/deps/atom__io_react.js.map +0 -7
  61. package/templates/base/node_modules/.vite/deps/chunk-2PJG54YB.js +0 -364
  62. package/templates/base/node_modules/.vite/deps/chunk-2PJG54YB.js.map +0 -7
  63. package/templates/base/node_modules/.vite/deps/chunk-6VZTUEOV.js +0 -3777
  64. package/templates/base/node_modules/.vite/deps/chunk-6VZTUEOV.js.map +0 -7
  65. package/templates/base/node_modules/.vite/deps/chunk-IHAFLL3M.js +0 -204
  66. package/templates/base/node_modules/.vite/deps/chunk-IHAFLL3M.js.map +0 -7
  67. package/templates/base/node_modules/.vite/deps/chunk-LZJKCPXG.js +0 -84
  68. package/templates/base/node_modules/.vite/deps/chunk-LZJKCPXG.js.map +0 -7
  69. package/templates/base/node_modules/.vite/deps/chunk-PJQAIOAR.js +0 -311
  70. package/templates/base/node_modules/.vite/deps/chunk-PJQAIOAR.js.map +0 -7
  71. package/templates/base/node_modules/.vite/deps/chunk-XRJUZPUF.js +0 -17
  72. package/templates/base/node_modules/.vite/deps/chunk-XRJUZPUF.js.map +0 -7
  73. package/templates/base/node_modules/.vite/deps/package.json +0 -3
  74. package/templates/base/node_modules/.vite/deps/preact.js +0 -27
  75. package/templates/base/node_modules/.vite/deps/preact.js.map +0 -7
  76. package/templates/base/node_modules/.vite/deps/preact_compat.js +0 -100
  77. package/templates/base/node_modules/.vite/deps/preact_compat.js.map +0 -7
  78. package/templates/base/node_modules/.vite/deps/preact_debug.js +0 -240
  79. package/templates/base/node_modules/.vite/deps/preact_debug.js.map +0 -7
  80. package/templates/base/node_modules/.vite/deps/preact_devtools.js +0 -7
  81. package/templates/base/node_modules/.vite/deps/preact_devtools.js.map +0 -7
  82. package/templates/base/node_modules/.vite/deps/preact_hooks.js +0 -29
  83. package/templates/base/node_modules/.vite/deps/preact_hooks.js.map +0 -7
  84. package/templates/base/node_modules/.vite/deps/preact_jsx-dev-runtime.js +0 -18
  85. package/templates/base/node_modules/.vite/deps/preact_jsx-dev-runtime.js.map +0 -7
  86. package/templates/base/node_modules/.vite/deps/preact_jsx-runtime.js +0 -18
  87. package/templates/base/node_modules/.vite/deps/preact_jsx-runtime.js.map +0 -7
  88. /package/templates/{base → preact-svg-editor}/_gitignore +0 -0
  89. /package/templates/{base → preact-svg-editor}/index.html +0 -0
  90. /package/templates/{base → preact-svg-editor}/public/preact.svg +0 -0
  91. /package/templates/{base → preact-svg-editor}/src/msg.md +0 -0
  92. /package/templates/{base → preact-svg-editor}/src/style.css +0 -0
  93. /package/templates/{base → preact-svg-editor}/tsconfig.json +0 -0
  94. /package/templates/{base → react-node-backend}/eslint.d.ts +0 -0
@@ -12,19 +12,35 @@ async function createAtom(argDir, options) {
12
12
  const skipHint = options.skipHints ?? false;
13
13
  const packageManager = options.packageManager ?? getPkgManager();
14
14
  prompts.intro(pico.greenBright(`atom.io - Data Components for TypeScript`));
15
- const { dir } = await prompts.group({ dir: () => argDir ? Promise.resolve(argDir) : prompts.text({
16
- message: `Project directory:`,
17
- placeholder: `my-preact-app`,
18
- validate(value) {
19
- if (value.length === 0) return `Directory name is required!`;
20
- if (existsSync(value)) return `Refusing to overwrite existing directory or file! Please provide a non-clashing name.`;
21
- }
22
- }) }, { onCancel: () => {
15
+ const { dir, templateName } = await prompts.group({
16
+ templateName: () => prompts.select({
17
+ message: `Template:`,
18
+ initialValue: `preact-svg-editor`,
19
+ options: [{
20
+ label: `Preact SVG Editor`,
21
+ value: `preact-svg-editor`
22
+ }, {
23
+ label: `React Node Backend`,
24
+ value: `react-node-backend`
25
+ }]
26
+ }),
27
+ dir: () => argDir ? Promise.resolve(argDir) : prompts.text({
28
+ message: `Project directory:`,
29
+ placeholder: `my-app`,
30
+ validate(value) {
31
+ if (value.length === 0) return `Directory name is required!`;
32
+ if (existsSync(value)) return `Refusing to overwrite existing directory or file! Please provide a non-clashing name.`;
33
+ }
34
+ })
35
+ }, { onCancel: () => {
23
36
  prompts.cancel(pico.yellow(`Cancelled`));
24
37
  process.exit(0);
25
38
  } });
26
39
  const targetDir = resolve(process.cwd(), dir);
27
- const opts = { packageManager };
40
+ const opts = {
41
+ packageManager,
42
+ templateName
43
+ };
28
44
  await useSpinner(`Setting up your project directory...`, () => scaffold(targetDir, opts), `Set up project directory`);
29
45
  await useSpinner(`Installing project dependencies...`, () => installDeps(targetDir, opts), `Installed project dependencies`);
30
46
  if (skipHint === false) {
@@ -43,7 +59,7 @@ async function useSpinner(startMessage, fn, finishMessage) {
43
59
  }
44
60
  async function scaffold(to, opts) {
45
61
  await promises.mkdir(to, { recursive: true });
46
- await templateDir(resolve(dirname(fileURLToPath(import.meta.url)), `../templates`, `base`), to, opts);
62
+ await templateDir(resolve(dirname(fileURLToPath(import.meta.url)), `../templates`, opts.templateName), to, opts);
47
63
  }
48
64
  /**
49
65
  * Recursive fs copy, swiped from `create-wmr`:
@@ -99,4 +115,4 @@ function getPkgManager() {
99
115
 
100
116
  //#endregion
101
117
  export { pico as n, createAtom as t };
102
- //# sourceMappingURL=create-atom-BV6WVRvY.js.map
118
+ //# sourceMappingURL=create-atom-DOkiQlT8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-atom-DOkiQlT8.js","names":["pico: Colors","opts: CreateAtomOptions","fs","dependencies: string[]","devDependencies: string[]"],"sources":["../src/create-atom.ts"],"sourcesContent":["import { existsSync, promises as fs } from \"node:fs\"\nimport { dirname, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport * as prompts from \"@clack/prompts\"\nimport picocolors from \"picocolors\"\nimport type { Colors } from \"picocolors/types\"\nimport { x } from \"tinyexec\"\n\nexport const pico: Colors = picocolors.createColors(true)\n\nconst s = prompts.spinner()\n\nexport type PackageManager = `bun` | `npm` | `pnpm` | `yarn`\nexport type TemplateName = `preact-svg-editor` | `react-node-backend`\n\nexport type CreateAtomOptions = {\n\tpackageManager: PackageManager\n\ttemplateName: TemplateName\n}\n\nexport type CreateAtomOptionsPreloaded = {\n\t[K in keyof CreateAtomOptions]?: CreateAtomOptions[K] | undefined\n} & { skipHints?: boolean | undefined }\n\nexport async function createAtom(\n\targDir: string | undefined,\n\toptions: CreateAtomOptionsPreloaded,\n): Promise<void> {\n\tconst skipHint = options.skipHints ?? false\n\tconst packageManager = options.packageManager ?? getPkgManager()\n\n\tprompts.intro(pico.greenBright(`atom.io - Data Components for TypeScript`))\n\n\tconst { dir, templateName } = await prompts.group(\n\t\t{\n\t\t\ttemplateName: () =>\n\t\t\t\tprompts.select<TemplateName>({\n\t\t\t\t\tmessage: `Template:`,\n\t\t\t\t\tinitialValue: `preact-svg-editor`,\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `Preact SVG Editor`,\n\t\t\t\t\t\t\tvalue: `preact-svg-editor`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `React Node Backend`,\n\t\t\t\t\t\t\tvalue: `react-node-backend`,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\tdir: () =>\n\t\t\t\targDir\n\t\t\t\t\t? Promise.resolve(argDir)\n\t\t\t\t\t: prompts.text({\n\t\t\t\t\t\t\tmessage: `Project directory:`,\n\t\t\t\t\t\t\tplaceholder: `my-app`,\n\t\t\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\t\t\tif (value.length === 0) {\n\t\t\t\t\t\t\t\t\treturn `Directory name is required!`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (existsSync(value)) {\n\t\t\t\t\t\t\t\t\treturn `Refusing to overwrite existing directory or file! Please provide a non-clashing name.`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tonCancel: () => {\n\t\t\t\tprompts.cancel(pico.yellow(`Cancelled`))\n\t\t\t\tprocess.exit(0)\n\t\t\t},\n\t\t},\n\t)\n\tconst targetDir = resolve(process.cwd(), dir)\n\tconst opts: CreateAtomOptions = { packageManager, templateName }\n\n\tawait useSpinner(\n\t\t`Setting up your project directory...`,\n\t\t() => scaffold(targetDir, opts),\n\t\t`Set up project directory`,\n\t)\n\n\tawait useSpinner(\n\t\t`Installing project dependencies...`,\n\t\t() => installDeps(targetDir, opts),\n\t\t`Installed project dependencies`,\n\t)\n\n\tif (skipHint === false) {\n\t\tconst gettingStarted = `\n\t\t\t${pico.dim(`$`)} ${pico.blueBright(`cd ${dir}`)}\n\t\t\t${pico.dim(`$`)} ${pico.blueBright(\n\t\t\t\t`${\n\t\t\t\t\tpackageManager === `npm`\n\t\t\t\t\t\t? `npm run`\n\t\t\t\t\t\t: packageManager === `bun`\n\t\t\t\t\t\t\t? `bun run`\n\t\t\t\t\t\t\t: packageManager\n\t\t\t\t} dev`,\n\t\t\t)}\n\t\t`\n\t\tprompts.note(\n\t\t\tgettingStarted.trim().replace(/^\\t\\t\\t/gm, ``),\n\t\t\t`Getting Started`,\n\t\t)\n\t}\n\n\tprompts.outro(pico.green(`You're all set!`))\n}\n\nasync function useSpinner(\n\tstartMessage: string,\n\tfn: () => Promise<void>,\n\tfinishMessage: string,\n): Promise<void> {\n\ts.start(startMessage)\n\tawait fn()\n\ts.stop(pico.green(finishMessage))\n}\n\nasync function scaffold(to: string, opts: CreateAtomOptions): Promise<void> {\n\tawait fs.mkdir(to, { recursive: true })\n\n\tconst __dirname = dirname(fileURLToPath(import.meta.url))\n\tawait templateDir(\n\t\tresolve(__dirname, `../templates`, opts.templateName),\n\t\tto,\n\t\topts,\n\t)\n}\n\n/**\n * Recursive fs copy, swiped from `create-wmr`:\n * https://github.com/preactjs/wmr/blob/3c5672ecd2f958c8eaf372d33c084dc69228ae3f/packages/create-wmr/src/index.js#L108-L124\n */\nasync function templateDir(\n\tfrom: string,\n\tto: string,\n\topts: CreateAtomOptions,\n): Promise<void[]> {\n\tconst files = await fs.readdir(from)\n\tconst results = await Promise.all(\n\t\tfiles.map(async (f) => {\n\t\t\tif (f === `.` || f === `..`) return\n\t\t\tconst filename = resolve(from, f)\n\t\t\tif ((await fs.stat(filename)).isDirectory()) {\n\t\t\t\tawait fs.mkdir(resolve(to, f), { recursive: true })\n\t\t\t\treturn templateDir(filename, resolve(to, f), opts)\n\t\t\t}\n\t\t\tif (opts.packageManager !== `npm` && f === `README.md`) {\n\t\t\t\tawait fs.writeFile(\n\t\t\t\t\tresolve(to, f),\n\t\t\t\t\t(await fs.readFile(filename, `utf-8`)).replace(\n\t\t\t\t\t\t/npm run/g,\n\t\t\t\t\t\topts.packageManager === `bun` ? `bun run` : opts.packageManager,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Publishing to npm renames the .gitignore to .npmignore\n\t\t\t// https://github.com/npm/npm/issues/7252#issuecomment-253339460\n\t\t\tif (f === `_gitignore`) f = `.gitignore`\n\t\t\tawait fs.copyFile(filename, resolve(to, f))\n\t\t}),\n\t)\n\treturn results.flat(99)\n}\n\nasync function installDeps(to: string, opts: CreateAtomOptions) {\n\tconst dependencies: string[] = []\n\tconst devDependencies: string[] = []\n\n\tconst installOpts = {\n\t\tpackageManager: opts.packageManager,\n\t\tto,\n\t}\n\n\tawait installPackages(dependencies, { ...installOpts })\n\tdevDependencies.length &&\n\t\t(await installPackages(devDependencies, { ...installOpts, dev: true }))\n}\n\ntype InstallOptions = {\n\tpackageManager: `bun` | `npm` | `pnpm` | `yarn`\n\tto: string\n\tdev?: boolean\n}\n\nfunction installPackages(pkgs: string[], opts: InstallOptions) {\n\treturn x(\n\t\topts.packageManager,\n\t\t[\n\t\t\t// `yarn add` will fail if nothing is provided\n\t\t\topts.packageManager === `yarn` ? (pkgs.length ? `add` : ``) : `install`,\n\t\t\topts.dev ? `-D` : ``,\n\t\t\t...pkgs,\n\t\t].filter(Boolean),\n\t\t{\n\t\t\tnodeOptions: {\n\t\t\t\tstdio: `ignore`,\n\t\t\t\tcwd: opts.to,\n\t\t\t},\n\t\t},\n\t)\n}\n\nfunction getPkgManager(): `bun` | `npm` | `pnpm` | `yarn` {\n\tconst userAgent = process.env[`npm_config_user_agent`] ?? ``\n\tif (userAgent.startsWith(`yarn`)) return `yarn`\n\tif (userAgent.startsWith(`pnpm`)) return `pnpm`\n\tif (userAgent.startsWith(`bun`)) return `bun`\n\treturn `npm`\n}\n"],"mappings":"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"}
@@ -2,13 +2,16 @@ import { Colors } from "picocolors/types";
2
2
 
3
3
  //#region src/create-atom.d.ts
4
4
  declare const pico: Colors;
5
+ type PackageManager = `bun` | `npm` | `pnpm` | `yarn`;
6
+ type TemplateName = `preact-svg-editor` | `react-node-backend`;
5
7
  type CreateAtomOptions = {
6
- packageManager: `bun` | `npm` | `pnpm` | `yarn`;
8
+ packageManager: PackageManager;
9
+ templateName: TemplateName;
7
10
  };
8
11
  type CreateAtomOptionsPreloaded = { [K in keyof CreateAtomOptions]?: CreateAtomOptions[K] | undefined } & {
9
12
  skipHints?: boolean | undefined;
10
13
  };
11
14
  declare function createAtom(argDir: string | undefined, options: CreateAtomOptionsPreloaded): Promise<void>;
12
15
  //#endregion
13
- export { CreateAtomOptions, CreateAtomOptionsPreloaded, createAtom, pico };
16
+ export { CreateAtomOptions, CreateAtomOptionsPreloaded, PackageManager, TemplateName, createAtom, pico };
14
17
  //# sourceMappingURL=create-atom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-atom.d.ts","names":["pico: Colors"],"sources":["../src/create-atom.ts"],"sourcesContent":[],"mappings":";;;cASaA,MAAM;KAIP,iBAAA;EAJZ,cAAmB,EAAA,KAAA,GAAA,KAAA,GAAA,MAAA,GAAA,MAAA;AAInB,CAAA;AAIY,KAAA,0BAAA,GAAA,QAAA,MACC,iBADD,IACsB,iBADtB,CACwC,CADxC,CAAA,GAAA,SAAA,EAAA,GAAA;EACC,SAAA,CAAA,EAAA,OAAA,GAAA,SAAA;CAAqB;AAAkB,iBAG9B,UAAA,CAH8B,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,OAAA,EAK1C,0BAL0C,CAAA,EAMjD,OANiD,CAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"create-atom.d.ts","names":["pico: Colors"],"sources":["../src/create-atom.ts"],"sourcesContent":[],"mappings":";;;cASaA,MAAM;KAIP,cAAA;AAJCA,KAKD,YAAA,GALO,mBAAA,GAAA,oBAAA;AAIP,KAGA,iBAAA,GAHA;EACZ,cAAY,EAGK,cAHL;EAEZ,YAAY,EAEG,YAFH;AAKZ,CAAA;AACa,KADD,0BAAA,GACC,QAAA,MAAA,iBAAA,IAAqB,iBAArB,CAAuC,CAAvC,CAAA,GAAA,SAAA,EAAA,GAAA;EAAqB,SAAA,CAAA,EAAA,OAAA,GAAA,SAAA;CAAkB;AAAA,iBAG9B,UAAA,CAH8B,MAAA,EAAA,MAAA,GAAA,SAAA,EAAA,OAAA,EAK1C,0BAL0C,CAAA,EAMjD,OANiD,CAAA,IAAA,CAAA"}
@@ -1,3 +1,3 @@
1
- import { n as pico, t as createAtom } from "./create-atom-BV6WVRvY.js";
1
+ import { n as pico, t as createAtom } from "./create-atom-DOkiQlT8.js";
2
2
 
3
3
  export { createAtom, pico };
@@ -1,38 +1,34 @@
1
1
  #!/usr/bin/env node
2
- import { t as createAtom } from "./create-atom-BV6WVRvY.js";
3
- import { cli, helpOption, optional, parseBooleanOption } from "comline";
4
- import { z } from "zod/v4";
2
+ import { t as createAtom } from "./create-atom-DOkiQlT8.js";
3
+ import { type } from "arktype";
4
+ import { cli, optional, options, parseBooleanOption } from "comline";
5
5
 
6
6
  //#region src/create-atom.x.ts
7
- const helper = helpOption();
8
- const CREATE_ATOM_OPTS = {
9
- description: `Check for breaking changes in a package.`,
10
- optionsSchema: z.object({
11
- packageManager: z.union([
12
- z.literal(`bun`),
13
- z.literal(`npm`),
14
- z.literal(`pnpm`),
15
- z.literal(`yarn`)
16
- ]).optional(),
17
- skipHints: z.boolean().optional()
18
- }),
19
- options: {
20
- ...helper.options,
21
- packageManager: {
22
- flag: `m`,
23
- required: false,
24
- description: `The package manager to use.`,
25
- example: `--packageManager="npm"`
26
- },
27
- skipHints: {
28
- flag: `k`,
29
- required: false,
30
- description: `Silences the 'Getting Started' info, mainly for use in other initializers that may wrap this one but provide their own scripts/instructions.`,
31
- example: `--skipHints`,
32
- parse: parseBooleanOption
33
- }
7
+ const CREATE_ATOM_OPTS = options(`Create a new project with atom.io.`, type({
8
+ "packageManager?": `"bun" | "npm" | "pnpm" | "yarn"`,
9
+ "templateName?": `"preact-svg-editor" | "react-node-backend"`,
10
+ "skipHints?": `boolean`
11
+ }), {
12
+ packageManager: {
13
+ flag: `m`,
14
+ required: false,
15
+ description: `The package manager to use.`,
16
+ example: `--packageManager="npm"`
17
+ },
18
+ templateName: {
19
+ flag: `t`,
20
+ required: false,
21
+ description: `The template to use.`,
22
+ example: `--templateName="preact-svg-editor"`
23
+ },
24
+ skipHints: {
25
+ flag: `k`,
26
+ required: false,
27
+ description: `Silences the 'Getting Started' info, mainly for use in other initializers that may wrap this one but provide their own scripts/instructions.`,
28
+ example: `--skipHints`,
29
+ parse: parseBooleanOption
34
30
  }
35
- };
31
+ });
36
32
  const { inputs } = cli({
37
33
  cliName: `create-atom`,
38
34
  routes: optional({ $projectName: null }),
@@ -1 +1 @@
1
- {"version":3,"file":"create-atom.x.js","names":[],"sources":["../src/create-atom.x.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport type { OptionsGroup } from \"comline\"\nimport { cli, helpOption, optional, parseBooleanOption } from \"comline\"\nimport { z } from \"zod/v4\"\n\nimport type { CreateAtomOptionsPreloaded } from \"./create-atom.ts\"\nimport { createAtom } from \"./create-atom.ts\"\n\nconst helper = helpOption()\n\nconst CREATE_ATOM_OPTS = {\n\tdescription: `Check for breaking changes in a package.`,\n\toptionsSchema: z.object({\n\t\tpackageManager: z\n\t\t\t.union([\n\t\t\t\tz.literal(`bun`),\n\t\t\t\tz.literal(`npm`),\n\t\t\t\tz.literal(`pnpm`),\n\t\t\t\tz.literal(`yarn`),\n\t\t\t])\n\t\t\t.optional(),\n\t\tskipHints: z.boolean().optional(),\n\t}),\n\toptions: {\n\t\t...helper.options,\n\t\tpackageManager: {\n\t\t\tflag: `m`,\n\t\t\trequired: false,\n\t\t\tdescription: `The package manager to use.`,\n\t\t\texample: `--packageManager=\"npm\"`,\n\t\t},\n\t\tskipHints: {\n\t\t\tflag: `k`,\n\t\t\trequired: false,\n\t\t\tdescription: `Silences the 'Getting Started' info, mainly for use in other initializers that may wrap this one but provide their own scripts/instructions.`,\n\t\t\texample: `--skipHints`,\n\t\t\tparse: parseBooleanOption,\n\t\t},\n\t},\n} satisfies OptionsGroup<CreateAtomOptionsPreloaded>\n\nconst parse = cli(\n\t{\n\t\tcliName: `create-atom`,\n\t\troutes: optional({ $projectName: null }),\n\t\trouteOptions: {\n\t\t\t\"\": CREATE_ATOM_OPTS,\n\t\t\t$projectName: CREATE_ATOM_OPTS,\n\t\t},\n\t},\n\t{\n\t\terror: console.error.bind(console),\n\t\tinfo: () => {},\n\t},\n)\nconst { inputs } = parse(process.argv)\n\nawait createAtom(inputs.path[0], inputs.opts)\n"],"mappings":";;;;;;AASA,MAAM,SAAS,YAAY;AAE3B,MAAM,mBAAmB;CACxB,aAAa;CACb,eAAe,EAAE,OAAO;EACvB,gBAAgB,EACd,MAAM;GACN,EAAE,QAAQ,MAAM;GAChB,EAAE,QAAQ,MAAM;GAChB,EAAE,QAAQ,OAAO;GACjB,EAAE,QAAQ,OAAO;GACjB,CAAC,CACD,UAAU;EACZ,WAAW,EAAE,SAAS,CAAC,UAAU;EACjC,CAAC;CACF,SAAS;EACR,GAAG,OAAO;EACV,gBAAgB;GACf,MAAM;GACN,UAAU;GACV,aAAa;GACb,SAAS;GACT;EACD,WAAW;GACV,MAAM;GACN,UAAU;GACV,aAAa;GACb,SAAS;GACT,OAAO;GACP;EACD;CACD;AAgBD,MAAM,EAAE,WAdM,IACb;CACC,SAAS;CACT,QAAQ,SAAS,EAAE,cAAc,MAAM,CAAC;CACxC,cAAc;EACb,IAAI;EACJ,cAAc;EACd;CACD,EACD;CACC,OAAO,QAAQ,MAAM,KAAK,QAAQ;CAClC,YAAY;CACZ,CACD,CACwB,QAAQ,KAAK;AAEtC,MAAM,WAAW,OAAO,KAAK,IAAI,OAAO,KAAK"}
1
+ {"version":3,"file":"create-atom.x.js","names":[],"sources":["../src/create-atom.x.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { type } from \"arktype\"\nimport type { OptionsGroup } from \"comline\"\nimport { cli, optional, options, parseBooleanOption } from \"comline\"\n\nimport type { CreateAtomOptionsPreloaded } from \"./create-atom.ts\"\nimport { createAtom } from \"./create-atom.ts\"\n\nconst CREATE_ATOM_OPTS = options(\n\t`Create a new project with atom.io.`,\n\ttype({\n\t\t\"packageManager?\": `\"bun\" | \"npm\" | \"pnpm\" | \"yarn\"`,\n\t\t\"templateName?\": `\"preact-svg-editor\" | \"react-node-backend\"`,\n\t\t\"skipHints?\": `boolean`,\n\t}),\n\t{\n\t\tpackageManager: {\n\t\t\tflag: `m`,\n\t\t\trequired: false,\n\t\t\tdescription: `The package manager to use.`,\n\t\t\texample: `--packageManager=\"npm\"`,\n\t\t},\n\t\ttemplateName: {\n\t\t\tflag: `t`,\n\t\t\trequired: false,\n\t\t\tdescription: `The template to use.`,\n\t\t\texample: `--templateName=\"preact-svg-editor\"`,\n\t\t},\n\t\tskipHints: {\n\t\t\tflag: `k`,\n\t\t\trequired: false,\n\t\t\tdescription: `Silences the 'Getting Started' info, mainly for use in other initializers that may wrap this one but provide their own scripts/instructions.`,\n\t\t\texample: `--skipHints`,\n\t\t\tparse: parseBooleanOption,\n\t\t},\n\t},\n) satisfies OptionsGroup<CreateAtomOptionsPreloaded>\n\nconst parse = cli(\n\t{\n\t\tcliName: `create-atom`,\n\t\troutes: optional({ $projectName: null }),\n\t\trouteOptions: {\n\t\t\t\"\": CREATE_ATOM_OPTS,\n\t\t\t$projectName: CREATE_ATOM_OPTS,\n\t\t},\n\t},\n\t{\n\t\terror: console.error.bind(console),\n\t\tinfo: () => {},\n\t},\n)\nconst { inputs } = parse(process.argv)\n\nawait createAtom(inputs.path[0], inputs.opts)\n"],"mappings":";;;;;;AASA,MAAM,mBAAmB,QACxB,sCACA,KAAK;CACJ,mBAAmB;CACnB,iBAAiB;CACjB,cAAc;CACd,CAAC,EACF;CACC,gBAAgB;EACf,MAAM;EACN,UAAU;EACV,aAAa;EACb,SAAS;EACT;CACD,cAAc;EACb,MAAM;EACN,UAAU;EACV,aAAa;EACb,SAAS;EACT;CACD,WAAW;EACV,MAAM;EACN,UAAU;EACV,aAAa;EACb,SAAS;EACT,OAAO;EACP;CACD,CACD;AAgBD,MAAM,EAAE,WAdM,IACb;CACC,SAAS;CACT,QAAQ,SAAS,EAAE,cAAc,MAAM,CAAC;CACxC,cAAc;EACb,IAAI;EACJ,cAAc;EACd;CACD,EACD;CACC,OAAO,QAAQ,MAAM,KAAK,QAAQ;CAClC,YAAY;CACZ,CACD,CACwB,QAAQ,KAAK;AAEtC,MAAM,WAAW,OAAO,KAAK,IAAI,OAAO,KAAK"}
package/package.json CHANGED
@@ -1,56 +1,54 @@
1
1
  {
2
- "name": "create-atom.io",
3
- "version": "0.0.0",
4
- "license": "MIT",
5
- "author": {
6
- "name": "Jeremy Banka",
7
- "email": "hello@jeremybanka.com"
8
- },
9
- "publishConfig": {
10
- "access": "public"
11
- },
12
- "repository": {
13
- "type": "git",
14
- "url": "git+https://github.com/jeremybanka/wayforge.git",
15
- "directory": "packages/create-atom"
16
- },
17
- "type": "module",
18
- "files": [
19
- "bin",
20
- "dist",
21
- "src",
22
- "templates"
23
- ],
24
- "main": "dist/create-atom.js",
25
- "types": "dist/create-atom.d.ts",
26
- "bin": "./bin/create-atom.bin.js",
27
- "dependencies": {
28
- "@clack/prompts": "0.11.0",
29
- "comline": "workspace:*",
30
- "picocolors": "1.1.1",
31
- "tinyexec": "1.0.1",
32
- "zod": "3.25.76"
33
- },
34
- "scripts": {
35
- "build": "tsdown && rm -f dist/*.x.d.ts",
36
- "lint:biome": "biome check -- .",
37
- "lint:eslint": "eslint -- .",
38
- "lint:types": "tsgo --noEmit",
39
- "watch:types": "tsgo --watch --noEmit",
40
- "lint": "concurrently \"bun:lint:*\"",
41
- "test": "bun test --watch -- **/*.test.ts",
42
- "test:once": "bun test -- **/*.test.ts",
43
- "postversion": "biome format --write package.json"
44
- },
45
- "devDependencies": {
46
- "@types/node": "24.9.1",
47
- "@types/bun": "npm:bun-types@1.3.1",
48
- "@types/tmp": "0.2.6",
49
- "@typescript/native-preview": "7.0.0-dev.20251025.1",
50
- "concurrently": "9.2.1",
51
- "eslint": "9.38.0",
52
- "rimraf": "6.0.1",
53
- "tmp": "0.2.5",
54
- "tsdown": "0.15.9"
55
- }
56
- }
2
+ "name": "create-atom.io",
3
+ "version": "0.0.2",
4
+ "license": "MIT",
5
+ "author": {
6
+ "name": "Jeremy Banka",
7
+ "email": "hello@jeremybanka.com"
8
+ },
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/jeremybanka/wayforge.git",
15
+ "directory": "packages/create-atom"
16
+ },
17
+ "type": "module",
18
+ "files": [
19
+ "bin",
20
+ "dist",
21
+ "src",
22
+ "templates"
23
+ ],
24
+ "main": "dist/create-atom.js",
25
+ "types": "dist/create-atom.d.ts",
26
+ "bin": "./bin/create-atom.bin.js",
27
+ "dependencies": {
28
+ "@clack/prompts": "0.11.0",
29
+ "arktype": "2.1.25",
30
+ "picocolors": "1.1.1",
31
+ "tinyexec": "1.0.1",
32
+ "comline": "0.4.2"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "24.9.1",
36
+ "@types/bun": "npm:bun-types@1.3.1",
37
+ "@types/tmp": "0.2.6",
38
+ "@typescript/native-preview": "7.0.0-dev.20251025.1",
39
+ "concurrently": "9.2.1",
40
+ "eslint": "9.38.0",
41
+ "rimraf": "6.0.1",
42
+ "tmp": "0.2.5",
43
+ "tsdown": "0.15.9"
44
+ },
45
+ "scripts": {
46
+ "build": "tsdown && rm -f dist/*.x.d.ts",
47
+ "lint:biome": "biome check -- .",
48
+ "lint:eslint": "eslint -- .",
49
+ "lint:types": "tsgo --noEmit",
50
+ "watch:types": "tsgo --watch --noEmit",
51
+ "lint": "concurrently \"bun:lint:*\"",
52
+ "postversion": "biome format --write package.json"
53
+ }
54
+ }
@@ -11,8 +11,12 @@ export const pico: Colors = picocolors.createColors(true)
11
11
 
12
12
  const s = prompts.spinner()
13
13
 
14
+ export type PackageManager = `bun` | `npm` | `pnpm` | `yarn`
15
+ export type TemplateName = `preact-svg-editor` | `react-node-backend`
16
+
14
17
  export type CreateAtomOptions = {
15
- packageManager: `bun` | `npm` | `pnpm` | `yarn`
18
+ packageManager: PackageManager
19
+ templateName: TemplateName
16
20
  }
17
21
 
18
22
  export type CreateAtomOptionsPreloaded = {
@@ -28,14 +32,29 @@ export async function createAtom(
28
32
 
29
33
  prompts.intro(pico.greenBright(`atom.io - Data Components for TypeScript`))
30
34
 
31
- const { dir } = await prompts.group(
35
+ const { dir, templateName } = await prompts.group(
32
36
  {
37
+ templateName: () =>
38
+ prompts.select<TemplateName>({
39
+ message: `Template:`,
40
+ initialValue: `preact-svg-editor`,
41
+ options: [
42
+ {
43
+ label: `Preact SVG Editor`,
44
+ value: `preact-svg-editor`,
45
+ },
46
+ {
47
+ label: `React Node Backend`,
48
+ value: `react-node-backend`,
49
+ },
50
+ ],
51
+ }),
33
52
  dir: () =>
34
53
  argDir
35
54
  ? Promise.resolve(argDir)
36
55
  : prompts.text({
37
56
  message: `Project directory:`,
38
- placeholder: `my-preact-app`,
57
+ placeholder: `my-app`,
39
58
  validate(value) {
40
59
  if (value.length === 0) {
41
60
  return `Directory name is required!`
@@ -54,7 +73,7 @@ export async function createAtom(
54
73
  },
55
74
  )
56
75
  const targetDir = resolve(process.cwd(), dir)
57
- const opts: CreateAtomOptions = { packageManager }
76
+ const opts: CreateAtomOptions = { packageManager, templateName }
58
77
 
59
78
  await useSpinner(
60
79
  `Setting up your project directory...`,
@@ -104,7 +123,11 @@ async function scaffold(to: string, opts: CreateAtomOptions): Promise<void> {
104
123
  await fs.mkdir(to, { recursive: true })
105
124
 
106
125
  const __dirname = dirname(fileURLToPath(import.meta.url))
107
- await templateDir(resolve(__dirname, `../templates`, `base`), to, opts)
126
+ await templateDir(
127
+ resolve(__dirname, `../templates`, opts.templateName),
128
+ to,
129
+ opts,
130
+ )
108
131
  }
109
132
 
110
133
  /**
@@ -1,35 +1,32 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { type } from "arktype"
3
4
  import type { OptionsGroup } from "comline"
4
- import { cli, helpOption, optional, parseBooleanOption } from "comline"
5
- import { z } from "zod/v4"
5
+ import { cli, optional, options, parseBooleanOption } from "comline"
6
6
 
7
7
  import type { CreateAtomOptionsPreloaded } from "./create-atom.ts"
8
8
  import { createAtom } from "./create-atom.ts"
9
9
 
10
- const helper = helpOption()
11
-
12
- const CREATE_ATOM_OPTS = {
13
- description: `Check for breaking changes in a package.`,
14
- optionsSchema: z.object({
15
- packageManager: z
16
- .union([
17
- z.literal(`bun`),
18
- z.literal(`npm`),
19
- z.literal(`pnpm`),
20
- z.literal(`yarn`),
21
- ])
22
- .optional(),
23
- skipHints: z.boolean().optional(),
10
+ const CREATE_ATOM_OPTS = options(
11
+ `Create a new project with atom.io.`,
12
+ type({
13
+ "packageManager?": `"bun" | "npm" | "pnpm" | "yarn"`,
14
+ "templateName?": `"preact-svg-editor" | "react-node-backend"`,
15
+ "skipHints?": `boolean`,
24
16
  }),
25
- options: {
26
- ...helper.options,
17
+ {
27
18
  packageManager: {
28
19
  flag: `m`,
29
20
  required: false,
30
21
  description: `The package manager to use.`,
31
22
  example: `--packageManager="npm"`,
32
23
  },
24
+ templateName: {
25
+ flag: `t`,
26
+ required: false,
27
+ description: `The template to use.`,
28
+ example: `--templateName="preact-svg-editor"`,
29
+ },
33
30
  skipHints: {
34
31
  flag: `k`,
35
32
  required: false,
@@ -38,7 +35,7 @@ const CREATE_ATOM_OPTS = {
38
35
  parse: parseBooleanOption,
39
36
  },
40
37
  },
41
- } satisfies OptionsGroup<CreateAtomOptionsPreloaded>
38
+ ) satisfies OptionsGroup<CreateAtomOptionsPreloaded>
42
39
 
43
40
  const parse = cli(
44
41
  {
@@ -1,10 +1,10 @@
1
1
  import { default as TypeScriptPlugin } from "@typescript-eslint/eslint-plugin"
2
2
  import * as parser from "@typescript-eslint/parser"
3
+ import AtomIOPlugin from "atom.io/eslint-plugin"
3
4
  import type { ESLint, Linter } from "eslint"
5
+ import PreactConfig from "eslint-config-preact"
4
6
  import * as ImportPlugin from "eslint-plugin-import-x"
5
7
  import { default as SimpleImportSortPlugin } from "eslint-plugin-simple-import-sort"
6
- import AtomIOPlugin from "atom.io/eslint-plugin"
7
- import PreactConfig from "eslint-config-preact"
8
8
 
9
9
  const ERROR = 2
10
10
 
@@ -154,11 +154,12 @@ const commonRules = {
154
154
  "simple-import-sort/exports": ERROR,
155
155
 
156
156
  "no-mixed-spaces-and-tabs": 0,
157
+ "no-duplicate-imports": 0,
157
158
  quotes: [ERROR, `backtick`],
158
159
  } satisfies Linter.Config[`rules`]
159
160
 
160
161
  const configs: Linter.Config[] = [
161
- PreactConfig,
162
+ ...PreactConfig,
162
163
  {
163
164
  ignores: [`**/dist/**`, `**/gen/**`, `**/node_modules/**`],
164
165
  },
@@ -0,0 +1,31 @@
1
+ // eslint-disable-next-line quotes
2
+ declare module "eslint-plugin-import-x" {
3
+ import type { ESLint } from "eslint"
4
+
5
+ const plugin: ESLint.Plugin
6
+ export = plugin
7
+ }
8
+
9
+ // eslint-disable-next-line quotes
10
+ declare module "eslint-plugin-simple-import-sort" {
11
+ import type { ESLint } from "eslint"
12
+
13
+ const plugin: ESLint.Plugin
14
+ export = plugin
15
+ }
16
+
17
+ // eslint-disable-next-line quotes
18
+ declare module "@typescript-eslint/eslint-plugin" {
19
+ import type { ESLint } from "eslint"
20
+
21
+ const plugin: ESLint.Plugin
22
+ export = plugin
23
+ }
24
+
25
+ // eslint-disable-next-line quotes
26
+ declare module "eslint-config-preact" {
27
+ import type { Linter } from "eslint"
28
+
29
+ const configs: Linter.Config[]
30
+ export = configs
31
+ }
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/home/runner/work/wayforge/wayforge/node_modules/.pnpm/vite@7.1.12_@types+node@24.9.2_jiti@2.6.1_lightningcss@1.30.2_sass-embedded@1.93.3_sass@1.93.3_terser@5.44.0_yaml@2.8.1/node_modules/vite/bin/node_modules:/home/runner/work/wayforge/wayforge/node_modules/.pnpm/vite@7.1.12_@types+node@24.9.2_jiti@2.6.1_lightningcss@1.30.2_sass-embedded@1.93.3_sass@1.93.3_terser@5.44.0_yaml@2.8.1/node_modules/vite/node_modules:/home/runner/work/wayforge/wayforge/node_modules/.pnpm/vite@7.1.12_@types+node@24.9.2_jiti@2.6.1_lightningcss@1.30.2_sass-embedded@1.93.3_sass@1.93.3_terser@5.44.0_yaml@2.8.1/node_modules:/home/runner/work/wayforge/wayforge/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/home/runner/work/wayforge/wayforge/node_modules/.pnpm/vite@7.1.12_@types+node@24.9.2_jiti@2.6.1_lightningcss@1.30.2_sass-embedded@1.93.3_sass@1.93.3_terser@5.44.0_yaml@2.8.1/node_modules/vite/bin/node_modules:/home/runner/work/wayforge/wayforge/node_modules/.pnpm/vite@7.1.12_@types+node@24.9.2_jiti@2.6.1_lightningcss@1.30.2_sass-embedded@1.93.3_sass@1.93.3_terser@5.44.0_yaml@2.8.1/node_modules/vite/node_modules:/home/runner/work/wayforge/wayforge/node_modules/.pnpm/vite@7.1.12_@types+node@24.9.2_jiti@2.6.1_lightningcss@1.30.2_sass-embedded@1.93.3_sass@1.93.3_terser@5.44.0_yaml@2.8.1/node_modules:/home/runner/work/wayforge/wayforge/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
19
+ else
20
+ exec node "$basedir/../vite/bin/vite.js" "$@"
21
+ fi
@@ -7,7 +7,7 @@
7
7
  "preview": "vite preview"
8
8
  },
9
9
  "dependencies": {
10
- "atom.io": "0.44.0",
10
+ "atom.io": "0.44.1",
11
11
  "preact": "10.27.2",
12
12
  "react": "npm:@preact/compat@18.3.1",
13
13
  "react-dom": "npm:@preact/compat@18.3.1"