create-seedcli 0.1.12 → 0.1.14
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 +42 -14
- package/dist/index.js.map +1 -1
- package/package.json +13 -10
- package/templates/full/gitignore +9 -0
- package/templates/full/seed.config.ts.eta +10 -0
- package/templates/full/src/commands/hello.ts.eta +6 -1
- package/templates/full/src/extensions/timer.ts.eta +37 -0
- package/templates/full/src/index.ts.eta +1 -1
- package/templates/minimal/bunfig.toml +2 -0
- package/templates/minimal/gitignore +9 -0
- package/templates/minimal/package.json.eta +1 -0
- package/templates/minimal/tests/index.test.ts.eta +15 -0
- package/templates/plugin/bunfig.toml +2 -0
- package/templates/plugin/gitignore +9 -0
- package/templates/plugin/src/extensions/example.ts.eta +1 -1
- package/templates/plugin/src/types.d.ts.eta +1 -1
- package/templates/full/src/extensions/.gitkeep +0 -0
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
|
|
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
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAE7D,KAAK,UAAU,WAAW;IACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAA4D,QAAQ,CAAC,CAAC;IAEhG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,0DAA0D;IAC1D,6EAA6E;IAC7E,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;
|
|
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.
|
|
3
|
+
"version": "0.1.14",
|
|
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.
|
|
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.
|
|
44
|
-
"@seedcli/package-manager": "^0.1.
|
|
45
|
-
"@seedcli/print": "^0.1.
|
|
46
|
-
"@seedcli/prompt": "^0.1.
|
|
47
|
-
"@seedcli/strings": "^0.1.
|
|
48
|
-
"@seedcli/system": "^0.1.
|
|
49
|
-
"@seedcli/template": "^0.1.
|
|
46
|
+
"@seedcli/filesystem": "^0.1.11",
|
|
47
|
+
"@seedcli/package-manager": "^0.1.11",
|
|
48
|
+
"@seedcli/print": "^0.1.11",
|
|
49
|
+
"@seedcli/prompt": "^0.1.11",
|
|
50
|
+
"@seedcli/strings": "^0.1.11",
|
|
51
|
+
"@seedcli/system": "^0.1.11",
|
|
52
|
+
"@seedcli/template": "^0.1.11"
|
|
50
53
|
},
|
|
51
54
|
"devDependencies": {
|
|
52
|
-
"@seedcli/testing": "^0.1.
|
|
55
|
+
"@seedcli/testing": "^0.1.11"
|
|
53
56
|
}
|
|
54
57
|
}
|
|
@@ -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
|
+
});
|
|
@@ -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
|
+
});
|
|
@@ -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
|
},
|
|
File without changes
|