create-seedcli 0.1.12 → 0.1.13

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.
package/dist/index.js CHANGED
@@ -15,14 +15,19 @@ async function getVersions() {
15
15
  const version = pkg.version;
16
16
  // Framework version: derived from a @seedcli/* dependency
17
17
  // Published: "^0.1.7" → "0.1.7", Development: "workspace:*" → read from root
18
- const dep = pkg.dependencies["@seedcli/filesystem"];
18
+ const dep = pkg.dependencies?.["@seedcli/filesystem"];
19
19
  let frameworkVersion;
20
- if (dep.startsWith("workspace:")) {
20
+ if (!dep) {
21
+ // Fallback: use the create-seedcli version itself
22
+ frameworkVersion = version;
23
+ }
24
+ else if (dep.startsWith("workspace:")) {
21
25
  const rootPkg = await readJson(join(import.meta.dir, "..", "..", "..", "package.json"));
22
26
  frameworkVersion = rootPkg.version;
23
27
  }
24
28
  else {
25
- frameworkVersion = dep.replace(/^\^/, "");
29
+ // Strip version range prefixes: ^, ~, >=, >, <=, <, =
30
+ frameworkVersion = dep.replace(/^[~^>=<]+/, "");
26
31
  }
27
32
  return { version, frameworkVersion };
28
33
  }
@@ -103,17 +108,40 @@ async function main() {
103
108
  }
104
109
  // Scaffold
105
110
  const spinner = spin("Scaffolding project...");
106
- await directory({
107
- source: join(TEMPLATES_DIR, options.template),
108
- target: targetDir,
109
- props: {
110
- name: options.name,
111
- description: options.description,
112
- version: "0.1.0",
113
- seedcliVersion: FRAMEWORK_VERSION,
114
- includeExamples: options.template === "full",
115
- },
116
- });
111
+ try {
112
+ // JSON-escape the description to prevent injection in package.json templates
113
+ const safeDescription = options.description
114
+ .replace(/\\/g, "\\\\")
115
+ .replace(/"/g, '\\"')
116
+ .replace(/\n/g, "\\n")
117
+ .replace(/\r/g, "\\r")
118
+ .replace(/\t/g, "\\t");
119
+ await directory({
120
+ source: join(TEMPLATES_DIR, options.template),
121
+ target: targetDir,
122
+ props: {
123
+ name: options.name,
124
+ description: safeDescription,
125
+ version: "0.1.0",
126
+ seedcliVersion: FRAMEWORK_VERSION,
127
+ includeExamples: options.template === "full",
128
+ },
129
+ // npm strips .gitignore from published tarballs, so templates store it as "gitignore"
130
+ rename: { gitignore: ".gitignore" },
131
+ });
132
+ }
133
+ catch (err) {
134
+ spinner.fail("Failed to scaffold project");
135
+ // Clean up partial scaffold
136
+ try {
137
+ const { rm } = await import("node:fs/promises");
138
+ await rm(targetDir, { recursive: true, force: true });
139
+ }
140
+ catch {
141
+ // Ignore cleanup errors
142
+ }
143
+ throw err;
144
+ }
117
145
  spinner.succeed("Project scaffolded");
118
146
  // Git init
119
147
  if (!options.skipGit) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-seedcli",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "Scaffold a new Seed CLI project — works with bun create, npx, and npm create",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -23,12 +23,15 @@
23
23
  "engines": {
24
24
  "bun": ">=1.3.0"
25
25
  },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
26
29
  "main": "./dist/index.js",
27
30
  "types": "./dist/index.d.ts",
28
31
  "exports": {
29
32
  ".": {
30
33
  "import": "./dist/index.js",
31
- "types": "./dist/index.d.ts"
34
+ "types": "./dist/index.js"
32
35
  }
33
36
  },
34
37
  "bin": {
@@ -40,15 +43,15 @@
40
43
  "templates"
41
44
  ],
42
45
  "dependencies": {
43
- "@seedcli/filesystem": "^0.1.8",
44
- "@seedcli/package-manager": "^0.1.8",
45
- "@seedcli/print": "^0.1.8",
46
- "@seedcli/prompt": "^0.1.8",
47
- "@seedcli/strings": "^0.1.8",
48
- "@seedcli/system": "^0.1.8",
49
- "@seedcli/template": "^0.1.8"
46
+ "@seedcli/filesystem": "^0.1.10",
47
+ "@seedcli/package-manager": "^0.1.10",
48
+ "@seedcli/print": "^0.1.10",
49
+ "@seedcli/prompt": "^0.1.10",
50
+ "@seedcli/strings": "^0.1.10",
51
+ "@seedcli/system": "^0.1.10",
52
+ "@seedcli/template": "^0.1.10"
50
53
  },
51
54
  "devDependencies": {
52
- "@seedcli/testing": "^0.1.8"
55
+ "@seedcli/testing": "^0.1.10"
53
56
  }
54
57
  }
@@ -0,0 +1,9 @@
1
+ node_modules/
2
+ dist/
3
+ *.log
4
+ .DS_Store
5
+ .seed-build-*
6
+ *.tsbuildinfo
7
+ coverage/
8
+ .env
9
+ .env.local
@@ -1,8 +1,18 @@
1
1
  import { defineConfig } from "@seedcli/core";
2
2
 
3
3
  export default defineConfig({
4
+ // Development server options
4
5
  dev: {
5
6
  entry: "src/index.ts",
6
7
  clearScreen: true,
7
8
  },
9
+
10
+ // Build configuration
11
+ // build: {
12
+ // entry: "src/index.ts",
13
+ // outDir: "dist",
14
+ // },
15
+
16
+ // Plugin directories to scan
17
+ // pluginDirs: ["./plugins"],
8
18
  });
@@ -8,10 +8,15 @@ export default command({
8
8
  },
9
9
  flags: {
10
10
  loud: flag({ type: "boolean", default: false, alias: "l", description: "SHOUT the greeting" }),
11
+ timed: flag({ type: "boolean", default: false, alias: "t", description: "Show execution time" }),
11
12
  },
12
- run: async ({ args, flags, print }) => {
13
+ run: async ({ args, flags, print, timer }) => {
14
+ if (flags.timed) timer.start();
15
+
13
16
  const name = args.name ?? "World";
14
17
  const greeting = `Hello, ${name}!`;
15
18
  print.info(flags.loud ? greeting.toUpperCase() : greeting);
19
+
20
+ if (flags.timed) print.muted(`Done in ${timer.stop()}`);
16
21
  },
17
22
  });
@@ -0,0 +1,37 @@
1
+ import { defineExtension } from "@seedcli/core";
2
+
3
+ /**
4
+ * Example extension — adds a `timer` helper to the toolbox.
5
+ *
6
+ * Extensions run before any command and can attach utilities to the toolbox.
7
+ * This file is auto-discovered from the `extensions/` directory.
8
+ *
9
+ * To type the toolbox for consumers, declare the module augmentation:
10
+ */
11
+ declare module "@seedcli/core" {
12
+ interface ToolboxExtensions {
13
+ timer: {
14
+ start(): void;
15
+ stop(): string;
16
+ };
17
+ }
18
+ }
19
+
20
+ export default defineExtension({
21
+ name: "timer",
22
+ description: "Simple timing utility",
23
+
24
+ setup: (toolbox) => {
25
+ let startTime = 0;
26
+
27
+ toolbox.timer = {
28
+ start: () => {
29
+ startTime = performance.now();
30
+ },
31
+ stop: () => {
32
+ const elapsed = performance.now() - startTime;
33
+ return `${elapsed.toFixed(0)}ms`;
34
+ },
35
+ };
36
+ },
37
+ });
@@ -3,7 +3,7 @@
3
3
  import { build } from "@seedcli/core";
4
4
 
5
5
  const cli = build("<%= it.name %>")
6
- .src(import.meta.dir)
6
+ .src(import.meta.dir) // Auto-discovers commands/ and extensions/
7
7
  .help()
8
8
  .version("<%= it.version %>")
9
9
  .create();
@@ -0,0 +1,2 @@
1
+ [install]
2
+ peer = false
@@ -0,0 +1,9 @@
1
+ node_modules/
2
+ dist/
3
+ *.log
4
+ .DS_Store
5
+ .seed-build-*
6
+ *.tsbuildinfo
7
+ coverage/
8
+ .env
9
+ .env.local
@@ -8,6 +8,7 @@
8
8
  },
9
9
  "scripts": {
10
10
  "dev": "bun --watch src/index.ts",
11
+ "test": "bun test",
11
12
  "build": "seed build",
12
13
  "compile": "seed build --compile --outfile <%= it.name %>",
13
14
  "typecheck": "tsc --noEmit"
@@ -0,0 +1,15 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { join } from "node:path";
3
+
4
+ describe("<%= it.name %>", () => {
5
+ test("hello command prints greeting", async () => {
6
+ const proc = Bun.spawn(["bun", "run", join(import.meta.dir, "..", "src", "index.ts"), "hello"], {
7
+ stdout: "pipe",
8
+ stderr: "pipe",
9
+ });
10
+ const stdout = await new Response(proc.stdout).text();
11
+ await proc.exited;
12
+
13
+ expect(stdout).toContain("Hello from <%= it.name %>!");
14
+ });
15
+ });
@@ -0,0 +1,2 @@
1
+ [install]
2
+ peer = false
@@ -0,0 +1,9 @@
1
+ node_modules/
2
+ dist/
3
+ *.log
4
+ .DS_Store
5
+ .seed-build-*
6
+ *.tsbuildinfo
7
+ coverage/
8
+ .env
9
+ .env.local
@@ -9,7 +9,7 @@ export const exampleExtension = defineExtension({
9
9
  toolbox.print.muted("[<%= it.name %>] extension loaded");
10
10
 
11
11
  // Attach your extension to the toolbox (typed via src/types.d.ts)
12
- toolbox.<%= it.name.replace(/-/g, "_") %> = {
12
+ toolbox.<%= it.name.replace(/-/g, "_").replace(/^(\d)/, "_$1") %> = {
13
13
  greet: (name: string) => `Hello from <%= it.name %>, ${name}!`,
14
14
  };
15
15
  },
@@ -2,7 +2,7 @@ import type {} from "@seedcli/core";
2
2
 
3
3
  declare module "@seedcli/core" {
4
4
  interface ToolboxExtensions {
5
- <%= it.name.replace(/-/g, "_") %>: {
5
+ <%= it.name.replace(/-/g, "_").replace(/^(\d)/, "_$1") %>: {
6
6
  greet(name: string): string;
7
7
  };
8
8
  }
File without changes