create-skybridge 0.0.0-dev.c7e90f9 → 0.0.0-dev.c884459
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 +45 -18
- package/dist/index.test.js +11 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import fs from "node:fs";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import * as prompts from "@clack/prompts";
|
|
6
|
+
import { downloadTemplate } from "giget";
|
|
6
7
|
import mri from "mri";
|
|
7
8
|
const defaultProjectName = "skybridge-project";
|
|
8
9
|
// prettier-ignore
|
|
@@ -13,21 +14,30 @@ Create a new Skybridge project by copying the starter template.
|
|
|
13
14
|
|
|
14
15
|
Options:
|
|
15
16
|
-h, --help show this help message
|
|
17
|
+
--repo <uri> use a git repository instead of the built-in template
|
|
16
18
|
--overwrite remove existing files in target directory
|
|
17
19
|
--immediate install dependencies and start development server
|
|
18
20
|
|
|
21
|
+
Repository URI formats:
|
|
22
|
+
github:user/repo
|
|
23
|
+
gitlab:user/repo/subdirectory
|
|
24
|
+
bitbucket:user/repo#branch
|
|
25
|
+
|
|
19
26
|
Examples:
|
|
20
27
|
create-skybridge my-app
|
|
28
|
+
create-skybridge my-app --repo github:alpic-ai/skybridge/examples/ecom-carousel
|
|
21
29
|
create-skybridge . --overwrite --immediate
|
|
22
30
|
`;
|
|
23
31
|
export async function init(args = process.argv.slice(2)) {
|
|
24
32
|
const argv = mri(args, {
|
|
25
33
|
boolean: ["help", "overwrite", "immediate"],
|
|
34
|
+
string: ["repo"],
|
|
26
35
|
alias: { h: "help" },
|
|
27
36
|
});
|
|
28
37
|
const argTargetDir = argv._[0]
|
|
29
38
|
? sanitizeTargetDir(String(argv._[0]))
|
|
30
39
|
: undefined;
|
|
40
|
+
const argRepo = argv.repo;
|
|
31
41
|
const argOverwrite = argv.overwrite;
|
|
32
42
|
const argImmediate = argv.immediate;
|
|
33
43
|
const help = argv.help;
|
|
@@ -100,27 +110,44 @@ export async function init(args = process.argv.slice(2)) {
|
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
112
|
const root = path.join(process.cwd(), targetDir);
|
|
103
|
-
// 3.
|
|
104
|
-
|
|
113
|
+
// 3. Download from repo or copy template
|
|
114
|
+
try {
|
|
115
|
+
if (argRepo) {
|
|
116
|
+
prompts.log.step(`Downloading ${argRepo}...`);
|
|
117
|
+
await downloadTemplate(argRepo, { dir: root });
|
|
118
|
+
prompts.log.success(`Project created in ${root}`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
prompts.log.step(`Copying template...`);
|
|
122
|
+
const templateDir = fileURLToPath(new URL("../template", import.meta.url));
|
|
123
|
+
// Copy template to target directory
|
|
124
|
+
fs.cpSync(templateDir, root, {
|
|
125
|
+
recursive: true,
|
|
126
|
+
filter: (src) => [".npmrc"].every((file) => !src.endsWith(file)),
|
|
127
|
+
});
|
|
128
|
+
// Rename _gitignore to .gitignore
|
|
129
|
+
fs.renameSync(path.join(root, "_gitignore"), path.join(root, ".gitignore"));
|
|
130
|
+
prompts.log.success(`Project created in ${root}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
prompts.log.error("Failed to create project from template");
|
|
135
|
+
console.error(error);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
// Update project name in package.json
|
|
139
|
+
const pkgPath = path.join(root, "package.json");
|
|
140
|
+
if (!fs.existsSync(pkgPath)) {
|
|
141
|
+
prompts.log.error("No package.json found in project");
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
105
144
|
try {
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
fs.
|
|
109
|
-
recursive: true,
|
|
110
|
-
filter: (src) => [".npmrc"].every((file) => !src.endsWith(file)),
|
|
111
|
-
});
|
|
112
|
-
// Rename _gitignore to .gitignore
|
|
113
|
-
fs.renameSync(path.join(root, "_gitignore"), path.join(root, ".gitignore"));
|
|
114
|
-
// Update project name in package.json
|
|
115
|
-
const name = path.basename(root);
|
|
116
|
-
const pkgPath = path.join(root, "package.json");
|
|
117
|
-
const pkg = fs.readFileSync(pkgPath, "utf-8");
|
|
118
|
-
const fixed = pkg.replace(/apps-sdk-template/g, name);
|
|
119
|
-
fs.writeFileSync(pkgPath, fixed);
|
|
120
|
-
prompts.log.success(`Project created in ${root}`);
|
|
145
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
146
|
+
pkg.name = path.basename(root);
|
|
147
|
+
fs.writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\n`);
|
|
121
148
|
}
|
|
122
149
|
catch (error) {
|
|
123
|
-
prompts.log.error("Failed to
|
|
150
|
+
prompts.log.error("Failed to update project name in package.json");
|
|
124
151
|
console.error(error);
|
|
125
152
|
process.exit(1);
|
|
126
153
|
}
|
package/dist/index.test.js
CHANGED
|
@@ -14,10 +14,20 @@ describe("create-skybridge", () => {
|
|
|
14
14
|
force: true,
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
-
it("should
|
|
17
|
+
it("should copy the template", async () => {
|
|
18
18
|
const name = `../../${tempDirName}//project$`;
|
|
19
19
|
await init([name]);
|
|
20
20
|
await fs.access(path.join(process.cwd(), tempDirName, "project", ".gitignore"));
|
|
21
21
|
expect(fs.access(path.join(process.cwd(), tempDirName, "project", ".npmrc"))).rejects.toThrowError();
|
|
22
22
|
});
|
|
23
|
+
it("should download template from repo", async () => {
|
|
24
|
+
const name = `../../${tempDirName}//project$`;
|
|
25
|
+
await init([
|
|
26
|
+
name,
|
|
27
|
+
"--repo",
|
|
28
|
+
"github:alpic-ai/skybridge/examples/ecom-carousel",
|
|
29
|
+
]);
|
|
30
|
+
await fs.access(path.join(process.cwd(), tempDirName, "project", ".gitignore"));
|
|
31
|
+
expect(fs.access(path.join(process.cwd(), tempDirName, "project", ".npmrc"))).rejects.toThrowError();
|
|
32
|
+
});
|
|
23
33
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-skybridge",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.c884459",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Alpic",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@clack/prompts": "^0.11.0",
|
|
21
|
+
"giget": "^2.0.0",
|
|
21
22
|
"mri": "^1.2.0"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|