@appsbyme/create-basekit 1.0.1 → 1.0.3
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/README.md +3 -1
- package/dist/commands/app/index.cjs +37 -16
- package/dist/commands/mobile/index.cjs +2 -2
- package/dist/commands/web/index.cjs +2 -2
- package/dist/index.cjs +40 -19
- package/fixtures/new_project.py +0 -0
- package/package.json +3 -3
- package/template-mobile/scripts/check-env.sh +0 -0
- package/template-web/.npmrc +2 -0
- package/template-web/scripts/setup-testing.js +0 -0
- package/template-web/scripts/setup.js +0 -0
- package/template-mobile/.yarnrc.yml +0 -1
- package/template-web/.github/workflows/ci.yml +0 -57
- package/template-web/.github/workflows/release.yml +0 -43
- package/template-web/.yarnrc.yml +0 -12
package/README.md
CHANGED
|
@@ -73,7 +73,9 @@ Useful flags: `--yes`, `--no-git`, `--no-install`, `--monorepo`, `--port-offset
|
|
|
73
73
|
| `--yes`, `-y` | Non-interactive mode with defaults |
|
|
74
74
|
| `--mobile` | Include Expo mobile app (BE + FE + mobile) |
|
|
75
75
|
| `--mobile-only` | Backend + Expo mobile only (skip web frontend) |
|
|
76
|
-
| `--ai-helpers` | Sync AI helper assets after scaffold |
|
|
76
|
+
| `--ai-helpers` | Sync AI helper assets after scaffold (also passes `--with-claude`) |
|
|
77
|
+
|
|
78
|
+
The Django backend installs **`appsbyme-basekit[cli]` from PyPI** by default. Kit authors can override with `BASEKIT_DJANGO_BASE=/path/to/basekit` or a local `../basekit` sibling checkout. Frontend `@appsbyme/basekit-*` packages always come from the public npm registry when you use `npx` (no local `basekit-web` needed).
|
|
77
79
|
|
|
78
80
|
## Development
|
|
79
81
|
|
|
@@ -5232,7 +5232,7 @@ function createSpinner(text) {
|
|
|
5232
5232
|
init_cjs_shims();
|
|
5233
5233
|
var import_fs2 = __toESM(require("fs"), 1);
|
|
5234
5234
|
var import_path = __toESM(require("path"), 1);
|
|
5235
|
-
var
|
|
5235
|
+
var DJANGO_BASE_PYPI_REQUIREMENT = "appsbyme-basekit[cli]==1.0.0";
|
|
5236
5236
|
function getWebKitRootFromPackage() {
|
|
5237
5237
|
let dir = import_path.default.resolve(__dirname);
|
|
5238
5238
|
for (let i = 0; i < 6; i += 1) {
|
|
@@ -5245,6 +5245,12 @@ function getWebKitRootFromPackage() {
|
|
|
5245
5245
|
}
|
|
5246
5246
|
return import_path.default.resolve(__dirname, "../../..");
|
|
5247
5247
|
}
|
|
5248
|
+
function djangoBasePipInstallArg(spec) {
|
|
5249
|
+
if (spec.kind === "pypi") {
|
|
5250
|
+
return spec.pipSpec;
|
|
5251
|
+
}
|
|
5252
|
+
return `appsbyme-basekit[cli] @ ${spec.pipSpec}`;
|
|
5253
|
+
}
|
|
5248
5254
|
function isUsableCheckout(dir) {
|
|
5249
5255
|
return import_fs2.default.existsSync(dir) && (import_fs2.default.existsSync(import_path.default.join(dir, "pyproject.toml")) || import_fs2.default.existsSync(import_path.default.join(dir, "setup.py")) || import_fs2.default.existsSync(import_path.default.join(dir, "setup.cfg")));
|
|
5250
5256
|
}
|
|
@@ -5286,9 +5292,9 @@ function resolveDjangoBaseInstallSpec(opts) {
|
|
|
5286
5292
|
}
|
|
5287
5293
|
}
|
|
5288
5294
|
return {
|
|
5289
|
-
kind: "
|
|
5290
|
-
pipSpec:
|
|
5291
|
-
label: "
|
|
5295
|
+
kind: "pypi",
|
|
5296
|
+
pipSpec: DJANGO_BASE_PYPI_REQUIREMENT,
|
|
5297
|
+
label: "PyPI (appsbyme-basekit)"
|
|
5292
5298
|
};
|
|
5293
5299
|
}
|
|
5294
5300
|
|
|
@@ -5313,17 +5319,18 @@ async function scaffoldBackend(opts) {
|
|
|
5313
5319
|
projectRoot,
|
|
5314
5320
|
webKitRoot: getWebKitRootFromPackage()
|
|
5315
5321
|
});
|
|
5316
|
-
const
|
|
5322
|
+
const pipArg = djangoBasePipInstallArg(djangoBase);
|
|
5323
|
+
const installSpinner = createSpinner(`Installing appsbyme-basekit[cli] from ${djangoBase.label}\u2026`);
|
|
5317
5324
|
const installResult = await execAsync(
|
|
5318
|
-
`"${pip}" install "
|
|
5325
|
+
`"${pip}" install "${pipArg}"`,
|
|
5319
5326
|
backendDir
|
|
5320
5327
|
);
|
|
5321
5328
|
if (!installResult.success) {
|
|
5322
|
-
installSpinner.fail("Failed to install basekit[cli]");
|
|
5329
|
+
installSpinner.fail("Failed to install appsbyme-basekit[cli]");
|
|
5323
5330
|
logError(installResult.error ?? "unknown error");
|
|
5324
5331
|
throw new Error("pip install failed");
|
|
5325
5332
|
}
|
|
5326
|
-
installSpinner.succeed(`basekit[cli] installed (${djangoBase.label})`);
|
|
5333
|
+
installSpinner.succeed(`appsbyme-basekit[cli] installed (${djangoBase.label})`);
|
|
5327
5334
|
const configPath = writeTempConfig(projectName, portOffset, includeMobile);
|
|
5328
5335
|
logStep("Running basekit init (answer the remaining prompts)");
|
|
5329
5336
|
console.log("");
|
|
@@ -6408,7 +6415,7 @@ async function runWebCommand(argv) {
|
|
|
6408
6415
|
return;
|
|
6409
6416
|
}
|
|
6410
6417
|
if (args.includes("--version") || args.includes("-v")) {
|
|
6411
|
-
console.log("1.0.
|
|
6418
|
+
console.log("1.0.3");
|
|
6412
6419
|
return;
|
|
6413
6420
|
}
|
|
6414
6421
|
printBanner();
|
|
@@ -6612,7 +6619,7 @@ async function runWebCommand(argv) {
|
|
|
6612
6619
|
function printBanner() {
|
|
6613
6620
|
console.log("");
|
|
6614
6621
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
6615
|
-
console.log(` \u2551 create-basekit web v${"1.0.
|
|
6622
|
+
console.log(` \u2551 create-basekit web v${"1.0.3"} \u2551`);
|
|
6616
6623
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
6617
6624
|
console.log("");
|
|
6618
6625
|
}
|
|
@@ -7274,7 +7281,7 @@ async function runMobileCommand(argv) {
|
|
|
7274
7281
|
return;
|
|
7275
7282
|
}
|
|
7276
7283
|
if (args.includes("--version") || args.includes("-v")) {
|
|
7277
|
-
console.log("1.0.
|
|
7284
|
+
console.log("1.0.3");
|
|
7278
7285
|
return;
|
|
7279
7286
|
}
|
|
7280
7287
|
printBanner2();
|
|
@@ -7377,7 +7384,7 @@ async function runMobileCommand(argv) {
|
|
|
7377
7384
|
function printBanner2() {
|
|
7378
7385
|
console.log("");
|
|
7379
7386
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
7380
|
-
console.log(` \u2551 create-basekit mobile v${"1.0.
|
|
7387
|
+
console.log(` \u2551 create-basekit mobile v${"1.0.3"} \u2551`);
|
|
7381
7388
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
7382
7389
|
console.log("");
|
|
7383
7390
|
console.log(" Expo (React Native) app scaffolder");
|
|
@@ -7496,6 +7503,20 @@ var import_path13 = __toESM(require("path"), 1);
|
|
|
7496
7503
|
init_cjs_shims();
|
|
7497
7504
|
var import_fs12 = __toESM(require("fs"), 1);
|
|
7498
7505
|
var import_path12 = __toESM(require("path"), 1);
|
|
7506
|
+
var import_node_url3 = require("url");
|
|
7507
|
+
function resolveNewProjectFixturePath(fromDir = import_path12.default.dirname((0, import_node_url3.fileURLToPath)(importMetaUrl))) {
|
|
7508
|
+
const candidates = [
|
|
7509
|
+
import_path12.default.join(fromDir, "../../../fixtures/new_project.py"),
|
|
7510
|
+
import_path12.default.join(fromDir, "../fixtures/new_project.py")
|
|
7511
|
+
];
|
|
7512
|
+
for (const candidate of candidates) {
|
|
7513
|
+
const resolved = import_path12.default.resolve(candidate);
|
|
7514
|
+
if (import_fs12.default.existsSync(resolved)) return resolved;
|
|
7515
|
+
}
|
|
7516
|
+
throw new Error(
|
|
7517
|
+
`fixtures/new_project.py missing (searched: ${candidates.map((c) => import_path12.default.resolve(c)).join(", ")})`
|
|
7518
|
+
);
|
|
7519
|
+
}
|
|
7499
7520
|
function deriveProjectIdentity(projectName) {
|
|
7500
7521
|
const slug = toPythonSlug(projectName);
|
|
7501
7522
|
const name = projectName.split(/[-_\s]+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
@@ -7514,7 +7535,7 @@ function writeProjectIdentity(projectRoot, projectName) {
|
|
|
7514
7535
|
);
|
|
7515
7536
|
const scriptsDir = import_path12.default.join(projectRoot, "scripts");
|
|
7516
7537
|
mkdirp(scriptsDir);
|
|
7517
|
-
const fixturePath =
|
|
7538
|
+
const fixturePath = resolveNewProjectFixturePath();
|
|
7518
7539
|
const scriptPath = import_path12.default.join(scriptsDir, "new_project.py");
|
|
7519
7540
|
import_fs12.default.copyFileSync(fixturePath, scriptPath);
|
|
7520
7541
|
import_fs12.default.chmodSync(scriptPath, 493);
|
|
@@ -8560,7 +8581,7 @@ async function runAppCommand(argv) {
|
|
|
8560
8581
|
return;
|
|
8561
8582
|
}
|
|
8562
8583
|
if (args.includes("--version") || args.includes("-V")) {
|
|
8563
|
-
console.log("1.0.
|
|
8584
|
+
console.log("1.0.3");
|
|
8564
8585
|
return;
|
|
8565
8586
|
}
|
|
8566
8587
|
printBanner3();
|
|
@@ -8722,7 +8743,7 @@ function initRootGit(projectRoot, includeMobile = false) {
|
|
|
8722
8743
|
function printBanner3() {
|
|
8723
8744
|
console.log("");
|
|
8724
8745
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
8725
|
-
console.log(` \u2551 create-basekit app v${"1.0.
|
|
8746
|
+
console.log(` \u2551 create-basekit app v${"1.0.3"} \u2551`);
|
|
8726
8747
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
8727
8748
|
console.log("");
|
|
8728
8749
|
console.log(" Full-stack project scaffolder");
|
|
@@ -8730,7 +8751,7 @@ function printBanner3() {
|
|
|
8730
8751
|
}
|
|
8731
8752
|
function printHelp3() {
|
|
8732
8753
|
console.log(`
|
|
8733
|
-
create-basekit app v${"1.0.
|
|
8754
|
+
create-basekit app v${"1.0.3"}
|
|
8734
8755
|
|
|
8735
8756
|
Usage: npx @appsbyme/create-basekit app [project-name] [options]
|
|
8736
8757
|
|
|
@@ -5365,7 +5365,7 @@ async function runMobileCommand(argv) {
|
|
|
5365
5365
|
return;
|
|
5366
5366
|
}
|
|
5367
5367
|
if (args.includes("--version") || args.includes("-v")) {
|
|
5368
|
-
console.log("1.0.
|
|
5368
|
+
console.log("1.0.3");
|
|
5369
5369
|
return;
|
|
5370
5370
|
}
|
|
5371
5371
|
printBanner();
|
|
@@ -5468,7 +5468,7 @@ async function runMobileCommand(argv) {
|
|
|
5468
5468
|
function printBanner() {
|
|
5469
5469
|
console.log("");
|
|
5470
5470
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
5471
|
-
console.log(` \u2551 create-basekit mobile v${"1.0.
|
|
5471
|
+
console.log(` \u2551 create-basekit mobile v${"1.0.3"} \u2551`);
|
|
5472
5472
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
5473
5473
|
console.log("");
|
|
5474
5474
|
console.log(" Expo (React Native) app scaffolder");
|
|
@@ -5957,7 +5957,7 @@ async function runWebCommand(argv) {
|
|
|
5957
5957
|
return;
|
|
5958
5958
|
}
|
|
5959
5959
|
if (args.includes("--version") || args.includes("-v")) {
|
|
5960
|
-
console.log("1.0.
|
|
5960
|
+
console.log("1.0.3");
|
|
5961
5961
|
return;
|
|
5962
5962
|
}
|
|
5963
5963
|
printBanner();
|
|
@@ -6161,7 +6161,7 @@ async function runWebCommand(argv) {
|
|
|
6161
6161
|
function printBanner() {
|
|
6162
6162
|
console.log("");
|
|
6163
6163
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
6164
|
-
console.log(` \u2551 create-basekit web v${"1.0.
|
|
6164
|
+
console.log(` \u2551 create-basekit web v${"1.0.3"} \u2551`);
|
|
6165
6165
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
6166
6166
|
console.log("");
|
|
6167
6167
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -5974,7 +5974,7 @@ async function runWebCommand(argv) {
|
|
|
5974
5974
|
return;
|
|
5975
5975
|
}
|
|
5976
5976
|
if (args.includes("--version") || args.includes("-v")) {
|
|
5977
|
-
console.log("1.0.
|
|
5977
|
+
console.log("1.0.3");
|
|
5978
5978
|
return;
|
|
5979
5979
|
}
|
|
5980
5980
|
printBanner();
|
|
@@ -6178,7 +6178,7 @@ async function runWebCommand(argv) {
|
|
|
6178
6178
|
function printBanner() {
|
|
6179
6179
|
console.log("");
|
|
6180
6180
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
6181
|
-
console.log(` \u2551 create-basekit web v${"1.0.
|
|
6181
|
+
console.log(` \u2551 create-basekit web v${"1.0.3"} \u2551`);
|
|
6182
6182
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
6183
6183
|
console.log("");
|
|
6184
6184
|
}
|
|
@@ -6716,7 +6716,7 @@ async function runMobileCommand(argv) {
|
|
|
6716
6716
|
return;
|
|
6717
6717
|
}
|
|
6718
6718
|
if (args.includes("--version") || args.includes("-v")) {
|
|
6719
|
-
console.log("1.0.
|
|
6719
|
+
console.log("1.0.3");
|
|
6720
6720
|
return;
|
|
6721
6721
|
}
|
|
6722
6722
|
printBanner2();
|
|
@@ -6819,7 +6819,7 @@ async function runMobileCommand(argv) {
|
|
|
6819
6819
|
function printBanner2() {
|
|
6820
6820
|
console.log("");
|
|
6821
6821
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
6822
|
-
console.log(` \u2551 create-basekit mobile v${"1.0.
|
|
6822
|
+
console.log(` \u2551 create-basekit mobile v${"1.0.3"} \u2551`);
|
|
6823
6823
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
6824
6824
|
console.log("");
|
|
6825
6825
|
console.log(" Expo (React Native) app scaffolder");
|
|
@@ -7175,6 +7175,12 @@ function getWebKitRootFromPackage() {
|
|
|
7175
7175
|
}
|
|
7176
7176
|
return import_path6.default.resolve(__dirname, "../../..");
|
|
7177
7177
|
}
|
|
7178
|
+
function djangoBasePipInstallArg(spec) {
|
|
7179
|
+
if (spec.kind === "pypi") {
|
|
7180
|
+
return spec.pipSpec;
|
|
7181
|
+
}
|
|
7182
|
+
return `appsbyme-basekit[cli] @ ${spec.pipSpec}`;
|
|
7183
|
+
}
|
|
7178
7184
|
function isUsableCheckout(dir) {
|
|
7179
7185
|
return import_fs7.default.existsSync(dir) && (import_fs7.default.existsSync(import_path6.default.join(dir, "pyproject.toml")) || import_fs7.default.existsSync(import_path6.default.join(dir, "setup.py")) || import_fs7.default.existsSync(import_path6.default.join(dir, "setup.cfg")));
|
|
7180
7186
|
}
|
|
@@ -7216,19 +7222,19 @@ function resolveDjangoBaseInstallSpec(opts) {
|
|
|
7216
7222
|
}
|
|
7217
7223
|
}
|
|
7218
7224
|
return {
|
|
7219
|
-
kind: "
|
|
7220
|
-
pipSpec:
|
|
7221
|
-
label: "
|
|
7225
|
+
kind: "pypi",
|
|
7226
|
+
pipSpec: DJANGO_BASE_PYPI_REQUIREMENT,
|
|
7227
|
+
label: "PyPI (appsbyme-basekit)"
|
|
7222
7228
|
};
|
|
7223
7229
|
}
|
|
7224
|
-
var import_fs7, import_path6,
|
|
7230
|
+
var import_fs7, import_path6, DJANGO_BASE_PYPI_REQUIREMENT;
|
|
7225
7231
|
var init_resolve_django_base = __esm({
|
|
7226
7232
|
"src/commands/app/resolve-django-base.ts"() {
|
|
7227
7233
|
"use strict";
|
|
7228
7234
|
init_cjs_shims();
|
|
7229
7235
|
import_fs7 = __toESM(require("fs"), 1);
|
|
7230
7236
|
import_path6 = __toESM(require("path"), 1);
|
|
7231
|
-
|
|
7237
|
+
DJANGO_BASE_PYPI_REQUIREMENT = "appsbyme-basekit[cli]==1.0.0";
|
|
7232
7238
|
}
|
|
7233
7239
|
});
|
|
7234
7240
|
|
|
@@ -7253,17 +7259,18 @@ async function scaffoldBackend(opts) {
|
|
|
7253
7259
|
projectRoot,
|
|
7254
7260
|
webKitRoot: getWebKitRootFromPackage()
|
|
7255
7261
|
});
|
|
7256
|
-
const
|
|
7262
|
+
const pipArg = djangoBasePipInstallArg(djangoBase);
|
|
7263
|
+
const installSpinner = createSpinner3(`Installing appsbyme-basekit[cli] from ${djangoBase.label}\u2026`);
|
|
7257
7264
|
const installResult = await execAsync3(
|
|
7258
|
-
`"${pip}" install "
|
|
7265
|
+
`"${pip}" install "${pipArg}"`,
|
|
7259
7266
|
backendDir
|
|
7260
7267
|
);
|
|
7261
7268
|
if (!installResult.success) {
|
|
7262
|
-
installSpinner.fail("Failed to install basekit[cli]");
|
|
7269
|
+
installSpinner.fail("Failed to install appsbyme-basekit[cli]");
|
|
7263
7270
|
logError3(installResult.error ?? "unknown error");
|
|
7264
7271
|
throw new Error("pip install failed");
|
|
7265
7272
|
}
|
|
7266
|
-
installSpinner.succeed(`basekit[cli] installed (${djangoBase.label})`);
|
|
7273
|
+
installSpinner.succeed(`appsbyme-basekit[cli] installed (${djangoBase.label})`);
|
|
7267
7274
|
const configPath = writeTempConfig(projectName, portOffset, includeMobile);
|
|
7268
7275
|
logStep3("Running basekit init (answer the remaining prompts)");
|
|
7269
7276
|
console.log("");
|
|
@@ -7619,6 +7626,19 @@ var init_mobile2 = __esm({
|
|
|
7619
7626
|
});
|
|
7620
7627
|
|
|
7621
7628
|
// src/commands/app/project-identity.ts
|
|
7629
|
+
function resolveNewProjectFixturePath(fromDir = import_path12.default.dirname((0, import_node_url3.fileURLToPath)(importMetaUrl))) {
|
|
7630
|
+
const candidates = [
|
|
7631
|
+
import_path12.default.join(fromDir, "../../../fixtures/new_project.py"),
|
|
7632
|
+
import_path12.default.join(fromDir, "../fixtures/new_project.py")
|
|
7633
|
+
];
|
|
7634
|
+
for (const candidate of candidates) {
|
|
7635
|
+
const resolved = import_path12.default.resolve(candidate);
|
|
7636
|
+
if (import_fs12.default.existsSync(resolved)) return resolved;
|
|
7637
|
+
}
|
|
7638
|
+
throw new Error(
|
|
7639
|
+
`fixtures/new_project.py missing (searched: ${candidates.map((c) => import_path12.default.resolve(c)).join(", ")})`
|
|
7640
|
+
);
|
|
7641
|
+
}
|
|
7622
7642
|
function deriveProjectIdentity(projectName) {
|
|
7623
7643
|
const slug = toPythonSlug(projectName);
|
|
7624
7644
|
const name = projectName.split(/[-_\s]+/).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
@@ -7637,18 +7657,19 @@ function writeProjectIdentity(projectRoot, projectName) {
|
|
|
7637
7657
|
);
|
|
7638
7658
|
const scriptsDir = import_path12.default.join(projectRoot, "scripts");
|
|
7639
7659
|
mkdirp(scriptsDir);
|
|
7640
|
-
const fixturePath =
|
|
7660
|
+
const fixturePath = resolveNewProjectFixturePath();
|
|
7641
7661
|
const scriptPath = import_path12.default.join(scriptsDir, "new_project.py");
|
|
7642
7662
|
import_fs12.default.copyFileSync(fixturePath, scriptPath);
|
|
7643
7663
|
import_fs12.default.chmodSync(scriptPath, 493);
|
|
7644
7664
|
}
|
|
7645
|
-
var import_fs12, import_path12;
|
|
7665
|
+
var import_fs12, import_path12, import_node_url3;
|
|
7646
7666
|
var init_project_identity = __esm({
|
|
7647
7667
|
"src/commands/app/project-identity.ts"() {
|
|
7648
7668
|
"use strict";
|
|
7649
7669
|
init_cjs_shims();
|
|
7650
7670
|
import_fs12 = __toESM(require("fs"), 1);
|
|
7651
7671
|
import_path12 = __toESM(require("path"), 1);
|
|
7672
|
+
import_node_url3 = require("url");
|
|
7652
7673
|
init_utils3();
|
|
7653
7674
|
}
|
|
7654
7675
|
});
|
|
@@ -8725,7 +8746,7 @@ async function runAppCommand(argv) {
|
|
|
8725
8746
|
return;
|
|
8726
8747
|
}
|
|
8727
8748
|
if (args.includes("--version") || args.includes("-V")) {
|
|
8728
|
-
console.log("1.0.
|
|
8749
|
+
console.log("1.0.3");
|
|
8729
8750
|
return;
|
|
8730
8751
|
}
|
|
8731
8752
|
printBanner3();
|
|
@@ -8887,7 +8908,7 @@ function initRootGit(projectRoot, includeMobile = false) {
|
|
|
8887
8908
|
function printBanner3() {
|
|
8888
8909
|
console.log("");
|
|
8889
8910
|
console.log(" \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
8890
|
-
console.log(` \u2551 create-basekit app v${"1.0.
|
|
8911
|
+
console.log(` \u2551 create-basekit app v${"1.0.3"} \u2551`);
|
|
8891
8912
|
console.log(" \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
|
|
8892
8913
|
console.log("");
|
|
8893
8914
|
console.log(" Full-stack project scaffolder");
|
|
@@ -8895,7 +8916,7 @@ function printBanner3() {
|
|
|
8895
8916
|
}
|
|
8896
8917
|
function printHelp3() {
|
|
8897
8918
|
console.log(`
|
|
8898
|
-
create-basekit app v${"1.0.
|
|
8919
|
+
create-basekit app v${"1.0.3"}
|
|
8899
8920
|
|
|
8900
8921
|
Usage: npx @appsbyme/create-basekit app [project-name] [options]
|
|
8901
8922
|
|
|
@@ -9066,7 +9087,7 @@ function printHelp4() {
|
|
|
9066
9087
|
console.log("");
|
|
9067
9088
|
}
|
|
9068
9089
|
function printVersion() {
|
|
9069
|
-
console.log("1.0.
|
|
9090
|
+
console.log("1.0.3");
|
|
9070
9091
|
}
|
|
9071
9092
|
async function main() {
|
|
9072
9093
|
const argv = process.argv.slice(2);
|
package/fixtures/new_project.py
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appsbyme/create-basekit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Scaffold Basekit web, mobile, or full-stack apps",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": "./dist/index.cjs",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"prompts": "^2.4.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@appsbyme/basekit-tsconfig": "
|
|
26
|
+
"@appsbyme/basekit-tsconfig": "^1.0.0",
|
|
27
27
|
"@types/node": "^24.0.14",
|
|
28
28
|
"@types/prompts": "^2.4.9",
|
|
29
29
|
"tsup": "^8.4.0",
|
|
@@ -52,4 +52,4 @@
|
|
|
52
52
|
"engines": {
|
|
53
53
|
"node": ">=18"
|
|
54
54
|
}
|
|
55
|
-
}
|
|
55
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
nodeLinker: node-modules
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [main]
|
|
8
|
-
workflow_dispatch: # Allow manual re-triggers (e.g. after transient GitHub infra failures)
|
|
9
|
-
|
|
10
|
-
jobs:
|
|
11
|
-
check:
|
|
12
|
-
name: Type-check · Lint · Test
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
|
|
15
|
-
steps:
|
|
16
|
-
- name: Checkout
|
|
17
|
-
uses: actions/checkout@v4
|
|
18
|
-
|
|
19
|
-
- name: Enable Corepack (Yarn 4)
|
|
20
|
-
run: corepack enable
|
|
21
|
-
|
|
22
|
-
- name: Setup Node.js
|
|
23
|
-
uses: actions/setup-node@v4
|
|
24
|
-
with:
|
|
25
|
-
node-version: 22
|
|
26
|
-
|
|
27
|
-
- name: Install dependencies
|
|
28
|
-
run: yarn install --no-immutable
|
|
29
|
-
|
|
30
|
-
- name: Type-check
|
|
31
|
-
run: yarn type-check
|
|
32
|
-
|
|
33
|
-
- name: Lint (ESLint)
|
|
34
|
-
run: yarn lint
|
|
35
|
-
|
|
36
|
-
- name: Lint (Stylelint)
|
|
37
|
-
run: yarn stylelint
|
|
38
|
-
|
|
39
|
-
- name: Tests (with coverage gates)
|
|
40
|
-
run: yarn vitest run --coverage --reporter=verbose
|
|
41
|
-
|
|
42
|
-
- name: Build app
|
|
43
|
-
run: yarn build
|
|
44
|
-
|
|
45
|
-
- name: Install Playwright browsers
|
|
46
|
-
run: npx playwright install --with-deps chromium
|
|
47
|
-
|
|
48
|
-
- name: E2E tests (Playwright)
|
|
49
|
-
run: yarn e2e
|
|
50
|
-
|
|
51
|
-
- name: Upload Playwright report
|
|
52
|
-
uses: actions/upload-artifact@v4
|
|
53
|
-
if: ${{ !cancelled() }}
|
|
54
|
-
with:
|
|
55
|
-
name: playwright-report
|
|
56
|
-
path: playwright-report/
|
|
57
|
-
retention-days: 14
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
name: Build & Deploy
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [main]
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
build:
|
|
10
|
-
name: Build
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
|
|
13
|
-
steps:
|
|
14
|
-
- name: Checkout
|
|
15
|
-
uses: actions/checkout@v4
|
|
16
|
-
|
|
17
|
-
- name: Enable Corepack (Yarn 4)
|
|
18
|
-
run: corepack enable
|
|
19
|
-
|
|
20
|
-
- name: Setup Node.js
|
|
21
|
-
uses: actions/setup-node@v4
|
|
22
|
-
with:
|
|
23
|
-
node-version: 22
|
|
24
|
-
|
|
25
|
-
- name: Install dependencies
|
|
26
|
-
run: yarn install --no-immutable
|
|
27
|
-
|
|
28
|
-
- name: Build app
|
|
29
|
-
run: yarn build
|
|
30
|
-
|
|
31
|
-
# Uncomment and configure for your deployment target:
|
|
32
|
-
# - name: Deploy to GitHub Pages
|
|
33
|
-
# uses: peaceiris/actions-gh-pages@v4
|
|
34
|
-
# with:
|
|
35
|
-
# github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
36
|
-
# publish_dir: ./dist
|
|
37
|
-
|
|
38
|
-
- name: Upload build artifact
|
|
39
|
-
uses: actions/upload-artifact@v4
|
|
40
|
-
with:
|
|
41
|
-
name: dist
|
|
42
|
-
path: dist/
|
|
43
|
-
retention-days: 30
|
package/template-web/.yarnrc.yml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
nodeLinker: node-modules
|
|
2
|
-
|
|
3
|
-
# Public @appsbyme packages resolve from registry.npmjs.org (default).
|
|
4
|
-
# No npmScopes needed unless you later switch to a private registry.
|
|
5
|
-
|
|
6
|
-
packageExtensions:
|
|
7
|
-
"@appsbyme/basekit-ui@*":
|
|
8
|
-
dependencies:
|
|
9
|
-
"@appsbyme/basekit-utils": "^1.0.0"
|
|
10
|
-
"@appsbyme/basekit-hooks@*":
|
|
11
|
-
dependencies:
|
|
12
|
-
"@appsbyme/basekit-utils": "^1.0.0"
|