swallowkit 1.0.0-beta.6 → 1.0.0-beta.61
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.ja.md +87 -175
- package/README.md +87 -176
- package/dist/__tests__/fixtures.d.ts +12 -0
- package/dist/__tests__/fixtures.d.ts.map +1 -1
- package/dist/__tests__/fixtures.js +101 -0
- package/dist/__tests__/fixtures.js.map +1 -1
- package/dist/cli/commands/add-auth.d.ts +15 -0
- package/dist/cli/commands/add-auth.d.ts.map +1 -0
- package/dist/cli/commands/add-auth.js +790 -0
- package/dist/cli/commands/add-auth.js.map +1 -0
- package/dist/cli/commands/add-connector.d.ts +20 -0
- package/dist/cli/commands/add-connector.d.ts.map +1 -0
- package/dist/cli/commands/add-connector.js +164 -0
- package/dist/cli/commands/add-connector.js.map +1 -0
- package/dist/cli/commands/cosmos-worktree-isolation.d.ts +25 -0
- package/dist/cli/commands/cosmos-worktree-isolation.d.ts.map +1 -0
- package/dist/cli/commands/cosmos-worktree-isolation.js +124 -0
- package/dist/cli/commands/cosmos-worktree-isolation.js.map +1 -0
- package/dist/cli/commands/create-model.d.ts +1 -4
- package/dist/cli/commands/create-model.d.ts.map +1 -1
- package/dist/cli/commands/create-model.js +20 -82
- package/dist/cli/commands/create-model.js.map +1 -1
- package/dist/cli/commands/dev-seeds.d.ts +62 -0
- package/dist/cli/commands/dev-seeds.d.ts.map +1 -0
- package/dist/cli/commands/dev-seeds.js +474 -0
- package/dist/cli/commands/dev-seeds.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +38 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +733 -155
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +74 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +1376 -930
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +24 -0
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +473 -90
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/index.d.ts +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +335 -55
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +14 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +179 -8
- package/dist/core/config.js.map +1 -1
- package/dist/core/mock/connector-mock-server.d.ts +101 -0
- package/dist/core/mock/connector-mock-server.d.ts.map +1 -0
- package/dist/core/mock/connector-mock-server.js +480 -0
- package/dist/core/mock/connector-mock-server.js.map +1 -0
- package/dist/core/mock/zod-mock-generator.d.ts +14 -0
- package/dist/core/mock/zod-mock-generator.d.ts.map +1 -0
- package/dist/core/mock/zod-mock-generator.js +163 -0
- package/dist/core/mock/zod-mock-generator.js.map +1 -0
- package/dist/core/operations/auth-operations.d.ts +61 -0
- package/dist/core/operations/auth-operations.d.ts.map +1 -0
- package/dist/core/operations/auth-operations.js +272 -0
- package/dist/core/operations/auth-operations.js.map +1 -0
- package/dist/core/operations/create-model.d.ts +15 -0
- package/dist/core/operations/create-model.d.ts.map +1 -0
- package/dist/core/operations/create-model.js +185 -0
- package/dist/core/operations/create-model.js.map +1 -0
- package/dist/core/operations/file-session.d.ts +56 -0
- package/dist/core/operations/file-session.d.ts.map +1 -0
- package/dist/core/operations/file-session.js +203 -0
- package/dist/core/operations/file-session.js.map +1 -0
- package/dist/core/operations/provision-operations.d.ts +52 -0
- package/dist/core/operations/provision-operations.d.ts.map +1 -0
- package/dist/core/operations/provision-operations.js +211 -0
- package/dist/core/operations/provision-operations.js.map +1 -0
- package/dist/core/operations/runtime.d.ts +37 -0
- package/dist/core/operations/runtime.d.ts.map +1 -0
- package/dist/core/operations/runtime.js +248 -0
- package/dist/core/operations/runtime.js.map +1 -0
- package/dist/core/operations/scaffold-apply.d.ts +21 -0
- package/dist/core/operations/scaffold-apply.d.ts.map +1 -0
- package/dist/core/operations/scaffold-apply.js +57 -0
- package/dist/core/operations/scaffold-apply.js.map +1 -0
- package/dist/core/operations/scaffold-machine.d.ts +16 -0
- package/dist/core/operations/scaffold-machine.d.ts.map +1 -0
- package/dist/core/operations/scaffold-machine.js +51 -0
- package/dist/core/operations/scaffold-machine.js.map +1 -0
- package/dist/core/operations/scaffold-plan.d.ts +43 -0
- package/dist/core/operations/scaffold-plan.d.ts.map +1 -0
- package/dist/core/operations/scaffold-plan.js +187 -0
- package/dist/core/operations/scaffold-plan.js.map +1 -0
- package/dist/core/project/agent-instructions.d.ts +29 -0
- package/dist/core/project/agent-instructions.d.ts.map +1 -0
- package/dist/core/project/agent-instructions.js +160 -0
- package/dist/core/project/agent-instructions.js.map +1 -0
- package/dist/core/project/artifacts.d.ts +58 -0
- package/dist/core/project/artifacts.d.ts.map +1 -0
- package/dist/core/project/artifacts.js +179 -0
- package/dist/core/project/artifacts.js.map +1 -0
- package/dist/core/project/boundaries.d.ts +50 -0
- package/dist/core/project/boundaries.d.ts.map +1 -0
- package/dist/core/project/boundaries.js +117 -0
- package/dist/core/project/boundaries.js.map +1 -0
- package/dist/core/project/capabilities.d.ts +58 -0
- package/dist/core/project/capabilities.d.ts.map +1 -0
- package/dist/core/project/capabilities.js +135 -0
- package/dist/core/project/capabilities.js.map +1 -0
- package/dist/core/project/drift.d.ts +29 -0
- package/dist/core/project/drift.d.ts.map +1 -0
- package/dist/core/project/drift.js +188 -0
- package/dist/core/project/drift.js.map +1 -0
- package/dist/core/project/infra.d.ts +49 -0
- package/dist/core/project/infra.d.ts.map +1 -0
- package/dist/core/project/infra.js +167 -0
- package/dist/core/project/infra.js.map +1 -0
- package/dist/core/project/manifest.d.ts +92 -0
- package/dist/core/project/manifest.d.ts.map +1 -0
- package/dist/core/project/manifest.js +321 -0
- package/dist/core/project/manifest.js.map +1 -0
- package/dist/core/project/state.d.ts +15 -0
- package/dist/core/project/state.d.ts.map +1 -0
- package/dist/core/project/state.js +106 -0
- package/dist/core/project/state.js.map +1 -0
- package/dist/core/project/validation.d.ts +20 -0
- package/dist/core/project/validation.d.ts.map +1 -0
- package/dist/core/project/validation.js +274 -0
- package/dist/core/project/validation.js.map +1 -0
- package/dist/core/project/workflows.d.ts +43 -0
- package/dist/core/project/workflows.d.ts.map +1 -0
- package/dist/core/project/workflows.js +299 -0
- package/dist/core/project/workflows.js.map +1 -0
- package/dist/core/scaffold/auth-generator.d.ts +63 -0
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -0
- package/dist/core/scaffold/auth-generator.js +1774 -0
- package/dist/core/scaffold/auth-generator.js.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts +41 -0
- package/dist/core/scaffold/connector-functions-generator.d.ts.map +1 -0
- package/dist/core/scaffold/connector-functions-generator.js +1029 -0
- package/dist/core/scaffold/connector-functions-generator.js.map +1 -0
- package/dist/core/scaffold/functions-generator.d.ts +7 -1
- package/dist/core/scaffold/functions-generator.d.ts.map +1 -1
- package/dist/core/scaffold/functions-generator.js +771 -69
- package/dist/core/scaffold/functions-generator.js.map +1 -1
- package/dist/core/scaffold/model-parser.d.ts +21 -1
- package/dist/core/scaffold/model-parser.d.ts.map +1 -1
- package/dist/core/scaffold/model-parser.js +230 -79
- package/dist/core/scaffold/model-parser.js.map +1 -1
- package/dist/core/scaffold/native-schema-generator.d.ts +19 -0
- package/dist/core/scaffold/native-schema-generator.d.ts.map +1 -0
- package/dist/core/scaffold/native-schema-generator.js +753 -0
- package/dist/core/scaffold/native-schema-generator.js.map +1 -0
- package/dist/core/scaffold/nextjs-generator.d.ts +8 -0
- package/dist/core/scaffold/nextjs-generator.d.ts.map +1 -1
- package/dist/core/scaffold/nextjs-generator.js +153 -9
- package/dist/core/scaffold/nextjs-generator.js.map +1 -1
- package/dist/core/scaffold/openapi-generator.d.ts +3 -0
- package/dist/core/scaffold/openapi-generator.d.ts.map +1 -0
- package/dist/core/scaffold/openapi-generator.js +190 -0
- package/dist/core/scaffold/openapi-generator.js.map +1 -0
- package/dist/core/scaffold/ui-generator.d.ts +17 -4
- package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
- package/dist/core/scaffold/ui-generator.js +174 -34
- package/dist/core/scaffold/ui-generator.js.map +1 -1
- package/dist/core/verify/index.d.ts +69 -0
- package/dist/core/verify/index.d.ts.map +1 -0
- package/dist/core/verify/index.js +412 -0
- package/dist/core/verify/index.js.map +1 -0
- package/dist/database/base-model.d.ts +3 -3
- package/dist/database/base-model.js +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/machine/contracts.d.ts +24 -0
- package/dist/machine/contracts.d.ts.map +1 -0
- package/dist/machine/contracts.js +3 -0
- package/dist/machine/contracts.js.map +1 -0
- package/dist/machine/errors.d.ts +14 -0
- package/dist/machine/errors.d.ts.map +1 -0
- package/dist/machine/errors.js +42 -0
- package/dist/machine/errors.js.map +1 -0
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +566 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/mcp/index.d.ts +25 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +425 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/types/index.d.ts +109 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/package-manager.d.ts +9 -12
- package/dist/utils/package-manager.d.ts.map +1 -1
- package/dist/utils/package-manager.js +51 -22
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/python-uv.d.ts +21 -0
- package/dist/utils/python-uv.d.ts.map +1 -0
- package/dist/utils/python-uv.js +111 -0
- package/dist/utils/python-uv.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +49 -0
- package/dist/version.js.map +1 -0
- package/package.json +16 -17
- package/src/__tests__/__snapshots__/functions-generator.test.ts.snap +1139 -0
- package/src/__tests__/__snapshots__/nextjs-generator.test.ts.snap +206 -0
- package/src/__tests__/__snapshots__/ui-generator.test.ts.snap +532 -0
- package/src/__tests__/agent-instructions.test.ts +237 -0
- package/src/__tests__/agent-loop-phase34.test.ts +513 -0
- package/src/__tests__/auth.test.ts +770 -0
- package/src/__tests__/bff-swa-auth.test.ts +275 -0
- package/src/__tests__/config.test.ts +295 -0
- package/src/__tests__/connector-functions-generator.test.ts +288 -0
- package/src/__tests__/connector-mock-server.test.ts +459 -0
- package/src/__tests__/connector-model-bff.test.ts +162 -0
- package/src/__tests__/cosmos-worktree-isolation.test.ts +149 -0
- package/src/__tests__/dev-seeds.test.ts +236 -0
- package/src/__tests__/dev.test.ts +296 -0
- package/src/__tests__/file-session.test.ts +98 -0
- package/src/__tests__/fixtures.ts +184 -0
- package/src/__tests__/functions-generator.test.ts +237 -0
- package/src/__tests__/init.test.ts +363 -0
- package/src/__tests__/jest-globals.d.ts +8 -0
- package/src/__tests__/machine.test.ts +371 -0
- package/src/__tests__/mcp.test.ts +253 -0
- package/src/__tests__/model-parser.test.ts +142 -0
- package/src/__tests__/multi-auth.test.ts +160 -0
- package/src/__tests__/nextjs-generator.test.ts +105 -0
- package/src/__tests__/openapi-generator.test.ts +43 -0
- package/src/__tests__/package-manager.test.ts +244 -0
- package/src/__tests__/plan-apply.test.ts +499 -0
- package/src/__tests__/python-uv.test.ts +48 -0
- package/src/__tests__/scaffold.test.ts +302 -0
- package/src/__tests__/string-utils.test.ts +75 -0
- package/src/__tests__/tsconfig.json +15 -0
- package/src/__tests__/ui-generator.test.ts +248 -0
- package/src/__tests__/zod-mock-generator.test.ts +132 -0
- package/src/cli/commands/add-auth.ts +853 -0
- package/src/cli/commands/add-connector.ts +159 -0
- package/src/cli/commands/cosmos-worktree-isolation.ts +130 -0
- package/src/cli/commands/create-model.ts +62 -0
- package/src/cli/commands/dev-seeds.ts +629 -0
- package/src/cli/commands/dev.ts +1252 -0
- package/src/cli/commands/index.ts +9 -0
- package/src/cli/commands/init.ts +3414 -0
- package/src/cli/commands/provision.ts +193 -0
- package/src/cli/commands/scaffold.ts +1081 -0
- package/src/cli/index.ts +352 -0
- package/src/core/config.ts +380 -0
- package/src/core/mock/connector-mock-server.ts +555 -0
- package/src/core/mock/zod-mock-generator.ts +205 -0
- package/src/core/operations/auth-operations.ts +360 -0
- package/src/core/operations/create-model.ts +191 -0
- package/src/core/operations/file-session.ts +222 -0
- package/src/core/operations/provision-operations.ts +297 -0
- package/src/core/operations/runtime.ts +258 -0
- package/src/core/operations/scaffold-apply.ts +106 -0
- package/src/core/operations/scaffold-machine.ts +77 -0
- package/src/core/operations/scaffold-plan.ts +215 -0
- package/src/core/project/agent-instructions.ts +167 -0
- package/src/core/project/agent-templates/AGENTS.md +504 -0
- package/src/core/project/agent-templates/CLAUDE.md +31 -0
- package/src/core/project/agent-templates/azure-functions.instructions.md +22 -0
- package/src/core/project/agent-templates/bff-routes.instructions.md +18 -0
- package/src/core/project/agent-templates/copilot-instructions.md +27 -0
- package/src/core/project/agent-templates/shared-models.instructions.md +72 -0
- package/src/core/project/artifacts.ts +205 -0
- package/src/core/project/boundaries.ts +170 -0
- package/src/core/project/capabilities.ts +193 -0
- package/src/core/project/drift.ts +202 -0
- package/src/core/project/infra.ts +196 -0
- package/src/core/project/manifest.ts +402 -0
- package/src/core/project/state.ts +77 -0
- package/src/core/project/validation.ts +295 -0
- package/src/core/project/workflows.ts +295 -0
- package/src/core/scaffold/auth-generator.ts +1824 -0
- package/src/core/scaffold/connector-functions-generator.ts +1133 -0
- package/src/core/scaffold/functions-generator.ts +972 -0
- package/src/core/scaffold/model-parser.ts +781 -0
- package/src/core/scaffold/native-schema-generator.ts +904 -0
- package/src/core/scaffold/nextjs-generator.ts +382 -0
- package/src/core/scaffold/openapi-generator.ts +212 -0
- package/src/core/scaffold/ui-generator.ts +1100 -0
- package/src/core/verify/index.ts +468 -0
- package/src/database/base-model.ts +184 -0
- package/src/database/client.ts +140 -0
- package/src/database/repository.ts +104 -0
- package/src/database/runtime-check.ts +25 -0
- package/src/index.ts +27 -0
- package/src/machine/contracts.ts +33 -0
- package/src/machine/errors.ts +45 -0
- package/src/machine/index.ts +690 -0
- package/src/mcp/index.ts +423 -0
- package/src/types/index.ts +182 -0
- package/src/utils/package-manager.ts +251 -0
- package/src/utils/python-uv.ts +96 -0
- package/src/version.ts +13 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { execSync } from "child_process";
|
|
4
|
+
import { BackendLanguage } from "../types";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Supported package managers
|
|
8
|
+
*/
|
|
9
|
+
export type PackageManager = "npm" | "pnpm";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Package manager command mappings
|
|
13
|
+
*/
|
|
14
|
+
export interface PackageManagerCommands {
|
|
15
|
+
/** The binary name: "npm" or "pnpm" */
|
|
16
|
+
name: PackageManager;
|
|
17
|
+
/** Install all dependencies: "pnpm install" / "npm install" */
|
|
18
|
+
install: string;
|
|
19
|
+
/** Install with lockfile: "pnpm install --frozen-lockfile" / "npm ci" */
|
|
20
|
+
ci: string;
|
|
21
|
+
/** Add a dependency: "pnpm add" / "npm install" */
|
|
22
|
+
add: string;
|
|
23
|
+
/** Add a dev dependency: "pnpm add -D" / "npm install -D" */
|
|
24
|
+
addDev: string;
|
|
25
|
+
/** Add a global dependency: "pnpm add -g" / "npm install -g" */
|
|
26
|
+
addGlobal: string;
|
|
27
|
+
/** Execute a package binary: "pnpm exec" / "npx" */
|
|
28
|
+
exec: string;
|
|
29
|
+
/** Download & execute: "pnpm dlx" / "npx" */
|
|
30
|
+
dlx: string;
|
|
31
|
+
/** Run a script: "pnpm run" / "npm run" */
|
|
32
|
+
run: string;
|
|
33
|
+
/** Run a script with filter: "pnpm --filter <ws> run" / "npm run --workspace=<ws>" */
|
|
34
|
+
runFilter: (workspace: string) => string;
|
|
35
|
+
/** Start script: "pnpm start" / "npm start" */
|
|
36
|
+
start: string;
|
|
37
|
+
/** Install production only (in temp dir for CI): "pnpm install --prod" / "npm install --omit=dev" */
|
|
38
|
+
installProd: string;
|
|
39
|
+
/** create-next-app flag: "--use-pnpm" / "--use-npm" */
|
|
40
|
+
createNextAppFlag: string | null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get the full command mapping for the given package manager
|
|
45
|
+
*/
|
|
46
|
+
export function getCommands(pm: PackageManager): PackageManagerCommands {
|
|
47
|
+
if (pm === "pnpm") {
|
|
48
|
+
return {
|
|
49
|
+
name: "pnpm",
|
|
50
|
+
install: "pnpm install",
|
|
51
|
+
ci: "pnpm install --frozen-lockfile",
|
|
52
|
+
add: "pnpm add",
|
|
53
|
+
addDev: "pnpm add -D",
|
|
54
|
+
addGlobal: "pnpm add -g",
|
|
55
|
+
exec: "pnpm exec",
|
|
56
|
+
dlx: "pnpm dlx",
|
|
57
|
+
run: "pnpm run",
|
|
58
|
+
runFilter: (ws) => `pnpm --filter ${ws} run`,
|
|
59
|
+
start: "pnpm start",
|
|
60
|
+
installProd: "pnpm install --prod --no-frozen-lockfile",
|
|
61
|
+
createNextAppFlag: "--use-pnpm",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// npm
|
|
66
|
+
return {
|
|
67
|
+
name: "npm",
|
|
68
|
+
install: "npm install",
|
|
69
|
+
ci: "npm ci",
|
|
70
|
+
add: "npm install",
|
|
71
|
+
addDev: "npm install -D",
|
|
72
|
+
addGlobal: "npm install -g",
|
|
73
|
+
exec: "npx",
|
|
74
|
+
dlx: "npx",
|
|
75
|
+
run: "npm run",
|
|
76
|
+
runFilter: (ws) => `npm run --workspace=${ws}`,
|
|
77
|
+
start: "npm start",
|
|
78
|
+
installProd: "npm install --omit=dev",
|
|
79
|
+
createNextAppFlag: "--use-npm",
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Detect the preferred package manager for new project initialisation.
|
|
85
|
+
*
|
|
86
|
+
* Honor the invoking package manager before falling back to available binaries.
|
|
87
|
+
*/
|
|
88
|
+
export function detectFromUserAgent(pnpmIsInstalled: () => boolean = isPnpmInstalled): PackageManager {
|
|
89
|
+
const agent = process.env.npm_config_user_agent || "";
|
|
90
|
+
if (agent.startsWith("pnpm/")) return "pnpm";
|
|
91
|
+
if (agent.startsWith("npm/")) return "npm";
|
|
92
|
+
return pnpmIsInstalled() ? "pnpm" : "npm";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Check whether pnpm is available on the system PATH.
|
|
97
|
+
*/
|
|
98
|
+
function isPnpmInstalled(): boolean {
|
|
99
|
+
try {
|
|
100
|
+
execSync("pnpm --version", { stdio: "ignore" });
|
|
101
|
+
return true;
|
|
102
|
+
} catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Detect the package manager used in an existing project directory
|
|
109
|
+
* by checking for lockfiles.
|
|
110
|
+
*
|
|
111
|
+
* Priority: explicit project metadata > lockfiles > workspace config > invocation/binaries
|
|
112
|
+
*/
|
|
113
|
+
export function detectFromProject(projectDir?: string): PackageManager {
|
|
114
|
+
const dir = projectDir || process.cwd();
|
|
115
|
+
|
|
116
|
+
const manifestPath = path.join(dir, "package.json");
|
|
117
|
+
if (fs.existsSync(manifestPath)) {
|
|
118
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
119
|
+
const manager = manifest.devEngines?.packageManager?.name || manifest.packageManager?.split("@")[0];
|
|
120
|
+
if (manager === "npm" || manager === "pnpm") return manager;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (fs.existsSync(path.join(dir, "pnpm-lock.yaml"))) {
|
|
124
|
+
return "pnpm";
|
|
125
|
+
}
|
|
126
|
+
if (fs.existsSync(path.join(dir, "package-lock.json"))) {
|
|
127
|
+
return "npm";
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// No lockfile found — fall back to user agent detection
|
|
131
|
+
if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) return "pnpm";
|
|
132
|
+
return detectFromUserAgent();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Get spawn arguments (command + args array) for the package manager.
|
|
137
|
+
* Useful when calling spawn() directly.
|
|
138
|
+
*
|
|
139
|
+
* Examples:
|
|
140
|
+
* spawnArgs("pnpm", ["add", "next@latest"]) => { cmd: "pnpm", args: ["add", "next@latest"] }
|
|
141
|
+
* spawnArgs("npm", ["add", "next@latest"]) => { cmd: "npm", args: ["install", "next@latest"] }
|
|
142
|
+
*/
|
|
143
|
+
export function spawnArgs(
|
|
144
|
+
pm: PackageManager,
|
|
145
|
+
args: string[]
|
|
146
|
+
): { cmd: string; args: string[] } {
|
|
147
|
+
return { cmd: pm, args };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Workspace configuration helpers
|
|
152
|
+
*/
|
|
153
|
+
export function getWorkspaceConfig(pm: PackageManager, workspaces: string[]) {
|
|
154
|
+
if (pm === "pnpm") {
|
|
155
|
+
return {
|
|
156
|
+
/** pnpm uses pnpm-workspace.yaml */
|
|
157
|
+
type: "file" as const,
|
|
158
|
+
filename: "pnpm-workspace.yaml",
|
|
159
|
+
content: `packages:\n${workspaces.map((w) => ` - ${w}`).join("\n")}\nallowBuilds:\n protobufjs: false\n unrs-resolver: false\n`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// npm uses "workspaces" field in package.json
|
|
164
|
+
return {
|
|
165
|
+
type: "packageJson" as const,
|
|
166
|
+
field: "workspaces",
|
|
167
|
+
value: workspaces,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* CI/CD setup step for GitHub Actions
|
|
173
|
+
*/
|
|
174
|
+
export function getCiSetupStep(pm: PackageManager): string {
|
|
175
|
+
if (pm === "pnpm") {
|
|
176
|
+
return ` - name: Setup pnpm
|
|
177
|
+
uses: pnpm/action-setup@v4
|
|
178
|
+
with:
|
|
179
|
+
version: 11`;
|
|
180
|
+
}
|
|
181
|
+
// npm: no extra setup needed (comes with Node.js)
|
|
182
|
+
return "";
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function getCiInstallCommand(ciPm: PackageManager, projectPm: PackageManager = ciPm): string {
|
|
186
|
+
void projectPm; // Reserved for package-manager-specific CI bridging.
|
|
187
|
+
if (ciPm === "pnpm") {
|
|
188
|
+
return getCommands(ciPm).ci;
|
|
189
|
+
}
|
|
190
|
+
return getCommands(ciPm).ci;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export function getSwaAppBuildCommand(ciPm: PackageManager, projectPm: PackageManager = ciPm): string {
|
|
194
|
+
if (ciPm === "pnpm") {
|
|
195
|
+
return "pnpm install --frozen-lockfile && pnpm run build";
|
|
196
|
+
}
|
|
197
|
+
return `${getCiInstallCommand(ciPm, projectPm)} && npm run build`;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* CI/CD setup steps for Azure Pipelines
|
|
202
|
+
*/
|
|
203
|
+
export function getAzurePipelinesSetup(pm: PackageManager): string {
|
|
204
|
+
if (pm === "pnpm") {
|
|
205
|
+
return ` - script: |
|
|
206
|
+
corepack enable
|
|
207
|
+
corepack prepare pnpm@11 --activate
|
|
208
|
+
displayName: 'Setup pnpm'`;
|
|
209
|
+
}
|
|
210
|
+
// npm: no extra step needed
|
|
211
|
+
return "";
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Build script for generated package.json (depends on workspace command syntax)
|
|
216
|
+
*/
|
|
217
|
+
export function getBuildScript(pm: PackageManager): string {
|
|
218
|
+
const copyStandaloneAssets = `node -e "const fs=require('fs');fs.mkdirSync('.next/standalone/.next',{recursive:true});if(fs.existsSync('.next/static'))fs.cpSync('.next/static','.next/standalone/.next/static',{recursive:true});if(fs.existsSync('public'))fs.cpSync('public','.next/standalone/public',{recursive:true});"`;
|
|
219
|
+
|
|
220
|
+
if (pm === "pnpm") {
|
|
221
|
+
return `pnpm --filter shared run build && next build --webpack && ${copyStandaloneAssets}`;
|
|
222
|
+
}
|
|
223
|
+
return `npm run --workspace=shared build && next build --webpack && ${copyStandaloneAssets}`;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Functions prestart script
|
|
228
|
+
*/
|
|
229
|
+
export function getFunctionsPrestart(pm: PackageManager): string {
|
|
230
|
+
if (pm === "pnpm") {
|
|
231
|
+
return "pnpm run build";
|
|
232
|
+
}
|
|
233
|
+
return "npm run build";
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Functions:start script for root package.json
|
|
238
|
+
*/
|
|
239
|
+
export function getFunctionsStartScript(
|
|
240
|
+
pm: PackageManager,
|
|
241
|
+
backendLanguage: BackendLanguage = "typescript"
|
|
242
|
+
): string {
|
|
243
|
+
if (backendLanguage === "typescript") {
|
|
244
|
+
if (pm === "pnpm") {
|
|
245
|
+
return "cd functions && pnpm start";
|
|
246
|
+
}
|
|
247
|
+
return "cd functions && npm start";
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return "cd functions && func start";
|
|
251
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
|
|
3
|
+
export const SWALLOWKIT_PYTHON_VERSION = "3.11";
|
|
4
|
+
|
|
5
|
+
export interface ProjectLocalUvPaths {
|
|
6
|
+
stateDir: string;
|
|
7
|
+
cacheDir: string;
|
|
8
|
+
pythonInstallDir: string;
|
|
9
|
+
toolDir: string;
|
|
10
|
+
toolBinDir: string;
|
|
11
|
+
localUvInstallDir: string;
|
|
12
|
+
localUvExecutable: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getPythonProjectRoot(functionsDir: string): string {
|
|
16
|
+
return path.dirname(functionsDir);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getProjectLocalUvPaths(projectRoot: string): ProjectLocalUvPaths {
|
|
20
|
+
const stateDir = path.join(projectRoot, ".uv");
|
|
21
|
+
const localUvInstallDir = path.join(stateDir, "bin");
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
stateDir,
|
|
25
|
+
cacheDir: path.join(stateDir, "cache"),
|
|
26
|
+
pythonInstallDir: path.join(stateDir, "python"),
|
|
27
|
+
toolDir: path.join(stateDir, "tools"),
|
|
28
|
+
toolBinDir: path.join(stateDir, "tools", "bin"),
|
|
29
|
+
localUvInstallDir,
|
|
30
|
+
localUvExecutable: process.platform === "win32"
|
|
31
|
+
? path.join(localUvInstallDir, "uv.exe")
|
|
32
|
+
: path.join(localUvInstallDir, "uv"),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function buildProjectLocalUvEnv(
|
|
37
|
+
baseEnv: NodeJS.ProcessEnv,
|
|
38
|
+
projectRoot: string
|
|
39
|
+
): NodeJS.ProcessEnv {
|
|
40
|
+
const uvPaths = getProjectLocalUvPaths(projectRoot);
|
|
41
|
+
const env: NodeJS.ProcessEnv = {
|
|
42
|
+
...baseEnv,
|
|
43
|
+
UV_CACHE_DIR: uvPaths.cacheDir,
|
|
44
|
+
UV_PYTHON_INSTALL_DIR: uvPaths.pythonInstallDir,
|
|
45
|
+
UV_TOOL_DIR: uvPaths.toolDir,
|
|
46
|
+
UV_TOOL_BIN_DIR: uvPaths.toolBinDir,
|
|
47
|
+
UV_PYTHON_PREFERENCE: "only-managed",
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
if (process.platform === "win32") {
|
|
51
|
+
env.UV_PYTHON_NO_REGISTRY = "true";
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return env;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function buildProjectLocalUvInstallerEnv(
|
|
58
|
+
baseEnv: NodeJS.ProcessEnv,
|
|
59
|
+
projectRoot: string
|
|
60
|
+
): NodeJS.ProcessEnv {
|
|
61
|
+
const uvPaths = getProjectLocalUvPaths(projectRoot);
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
...buildProjectLocalUvEnv(baseEnv, projectRoot),
|
|
65
|
+
UV_UNMANAGED_INSTALL: uvPaths.localUvInstallDir,
|
|
66
|
+
UV_NO_MODIFY_PATH: "1",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function getProjectLocalUvInstallerCommand(): { command: string; args: string[] } {
|
|
71
|
+
if (process.platform === "win32") {
|
|
72
|
+
return {
|
|
73
|
+
command: "powershell",
|
|
74
|
+
args: [
|
|
75
|
+
"-NoProfile",
|
|
76
|
+
"-ExecutionPolicy",
|
|
77
|
+
"Bypass",
|
|
78
|
+
"-Command",
|
|
79
|
+
"$ProgressPreference = 'SilentlyContinue'; irm https://astral.sh/uv/install.ps1 | iex",
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
command: "sh",
|
|
86
|
+
args: ["-c", "curl -LsSf https://astral.sh/uv/install.sh | sh"],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function buildUvVenvArgs(venvDir: string, pythonVersion = SWALLOWKIT_PYTHON_VERSION): string[] {
|
|
91
|
+
return ["venv", venvDir, "--python", pythonVersion];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function buildUvPipInstallArgs(pythonExecutable: string, requirementsPath: string): string[] {
|
|
95
|
+
return ["pip", "install", "--python", pythonExecutable, "-r", requirementsPath];
|
|
96
|
+
}
|
package/src/version.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
|
|
4
|
+
export function getSwallowKitVersion(): string {
|
|
5
|
+
const packageJsonPath = path.resolve(__dirname, "..", "package.json");
|
|
6
|
+
|
|
7
|
+
try {
|
|
8
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")) as { version?: string };
|
|
9
|
+
return packageJson.version || "0.0.0";
|
|
10
|
+
} catch {
|
|
11
|
+
return process.env.npm_package_version || "0.0.0";
|
|
12
|
+
}
|
|
13
|
+
}
|