swallowkit 1.0.0-beta.2 → 1.0.0-beta.20
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/LICENSE +21 -21
- package/README.ja.md +312 -215
- package/README.md +369 -216
- package/dist/__tests__/fixtures.d.ts +22 -0
- package/dist/__tests__/fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures.js +146 -0
- package/dist/__tests__/fixtures.js.map +1 -0
- package/dist/cli/commands/add-auth.d.ts +10 -0
- package/dist/cli/commands/add-auth.d.ts.map +1 -0
- package/dist/cli/commands/add-auth.js +444 -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 +163 -0
- package/dist/cli/commands/add-connector.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 +21 -82
- package/dist/cli/commands/create-model.js.map +1 -1
- package/dist/cli/commands/dev-seeds.d.ts +35 -0
- package/dist/cli/commands/dev-seeds.d.ts.map +1 -0
- package/dist/cli/commands/dev-seeds.js +292 -0
- package/dist/cli/commands/dev-seeds.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +19 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +476 -117
- 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 +13 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +2627 -1708
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/scaffold.d.ts +3 -0
- package/dist/cli/commands/scaffold.d.ts.map +1 -1
- package/dist/cli/commands/scaffold.js +617 -129
- package/dist/cli/commands/scaffold.js.map +1 -1
- package/dist/cli/index.d.ts +4 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +162 -42
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config.d.ts +8 -2
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +90 -4
- 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/create-model.d.ts +15 -0
- package/dist/core/operations/create-model.d.ts.map +1 -0
- package/dist/core/operations/create-model.js +171 -0
- package/dist/core/operations/create-model.js.map +1 -0
- package/dist/core/operations/runtime.d.ts +32 -0
- package/dist/core/operations/runtime.d.ts.map +1 -0
- package/dist/core/operations/runtime.js +225 -0
- package/dist/core/operations/runtime.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 +63 -0
- package/dist/core/operations/scaffold-machine.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/validation.d.ts +20 -0
- package/dist/core/project/validation.d.ts.map +1 -0
- package/dist/core/project/validation.js +204 -0
- package/dist/core/project/validation.js.map +1 -0
- package/dist/core/scaffold/auth-generator.d.ts +38 -0
- package/dist/core/scaffold/auth-generator.d.ts.map +1 -0
- package/dist/core/scaffold/auth-generator.js +1244 -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 +1027 -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 +920 -213
- package/dist/core/scaffold/functions-generator.js.map +1 -1
- package/dist/core/scaffold/model-parser.d.ts +20 -1
- package/dist/core/scaffold/model-parser.d.ts.map +1 -1
- package/dist/core/scaffold/model-parser.js +329 -135
- package/dist/core/scaffold/model-parser.js.map +1 -1
- 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 +314 -182
- 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 +10 -4
- package/dist/core/scaffold/ui-generator.d.ts.map +1 -1
- package/dist/core/scaffold/ui-generator.js +768 -663
- package/dist/core/scaffold/ui-generator.js.map +1 -1
- 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 +16 -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 +11 -0
- package/dist/machine/errors.d.ts.map +1 -0
- package/dist/machine/errors.js +34 -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 +156 -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 +184 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/types/index.d.ts +65 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/package-manager.d.ts +109 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +215 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/package.json +85 -73
- package/src/__tests__/__snapshots__/functions-generator.test.ts.snap +1139 -0
- package/src/__tests__/__snapshots__/nextjs-generator.test.ts.snap +194 -0
- package/src/__tests__/__snapshots__/ui-generator.test.ts.snap +532 -0
- package/src/__tests__/auth.test.ts +654 -0
- package/src/__tests__/config.test.ts +263 -0
- package/src/__tests__/connector-functions-generator.test.ts +288 -0
- package/src/__tests__/connector-mock-server.test.ts +439 -0
- package/src/__tests__/connector-model-bff.test.ts +162 -0
- package/src/__tests__/dev-seeds.test.ts +112 -0
- package/src/__tests__/dev.test.ts +148 -0
- package/src/__tests__/fixtures.ts +144 -0
- package/src/__tests__/functions-generator.test.ts +237 -0
- package/src/__tests__/init.test.ts +80 -0
- package/src/__tests__/machine.test.ts +212 -0
- package/src/__tests__/mcp.test.ts +56 -0
- package/src/__tests__/model-parser.test.ts +72 -0
- package/src/__tests__/nextjs-generator.test.ts +97 -0
- package/src/__tests__/openapi-generator.test.ts +43 -0
- package/src/__tests__/package-manager.test.ts +189 -0
- package/src/__tests__/scaffold.test.ts +39 -0
- package/src/__tests__/string-utils.test.ts +75 -0
- package/src/__tests__/ui-generator.test.ts +144 -0
- package/src/__tests__/zod-mock-generator.test.ts +132 -0
- package/src/cli/commands/add-auth.ts +500 -0
- package/src/cli/commands/add-connector.ts +158 -0
- package/src/cli/commands/create-model.ts +62 -0
- package/src/cli/commands/dev-seeds.ts +358 -0
- package/src/cli/commands/dev.ts +962 -0
- package/src/cli/commands/index.ts +9 -0
- package/src/cli/commands/init.ts +3371 -0
- package/src/cli/commands/provision.ts +193 -0
- package/src/cli/commands/scaffold.ts +1211 -0
- package/src/cli/index.ts +191 -0
- package/src/core/config.ts +308 -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/create-model.ts +174 -0
- package/src/core/operations/runtime.ts +235 -0
- package/src/core/operations/scaffold-machine.ts +91 -0
- package/src/core/project/manifest.ts +402 -0
- package/src/core/project/validation.ts +221 -0
- package/src/core/scaffold/auth-generator.ts +1284 -0
- package/src/core/scaffold/connector-functions-generator.ts +1128 -0
- package/src/core/scaffold/functions-generator.ts +970 -0
- package/src/core/scaffold/model-parser.ts +841 -0
- package/src/core/scaffold/nextjs-generator.ts +370 -0
- package/src/core/scaffold/openapi-generator.ts +212 -0
- package/src/core/scaffold/ui-generator.ts +1061 -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 +17 -0
- package/src/machine/errors.ts +34 -0
- package/src/machine/index.ts +173 -0
- package/src/mcp/index.ts +185 -0
- package/src/types/index.ts +134 -0
- package/src/utils/package-manager.ts +229 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.buildSwallowKitToolDefinitions = buildSwallowKitToolDefinitions;
|
|
38
|
+
exports.createSwallowKitMcpServer = createSwallowKitMcpServer;
|
|
39
|
+
exports.runMcpServer = runMcpServer;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const mcp_1 = require("@modelcontextprotocol/sdk/server/mcp");
|
|
42
|
+
const stdio_1 = require("@modelcontextprotocol/sdk/server/stdio");
|
|
43
|
+
const z = __importStar(require("zod/v4"));
|
|
44
|
+
function resolveMachineCliEntrypoint() {
|
|
45
|
+
return path.resolve(__dirname, "..", "cli", "index.js");
|
|
46
|
+
}
|
|
47
|
+
async function defaultMachineCliRunner(args) {
|
|
48
|
+
const { execa } = await Promise.resolve().then(() => __importStar(require("execa")));
|
|
49
|
+
const result = await execa(process.execPath, [resolveMachineCliEntrypoint(), "machine", ...args], {
|
|
50
|
+
reject: false,
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
stdout: result.stdout,
|
|
54
|
+
stderr: result.stderr,
|
|
55
|
+
exitCode: result.exitCode ?? 0,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function executeMachineCommand(args, runMachineCli) {
|
|
59
|
+
const result = await runMachineCli(args);
|
|
60
|
+
let parsed;
|
|
61
|
+
try {
|
|
62
|
+
parsed = JSON.parse(result.stdout);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
throw new Error(result.stderr || result.stdout || "Machine CLI returned invalid JSON.");
|
|
66
|
+
}
|
|
67
|
+
if (!parsed.ok) {
|
|
68
|
+
throw new Error(parsed.error.message);
|
|
69
|
+
}
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
function jsonTextContent(value) {
|
|
73
|
+
return {
|
|
74
|
+
content: [
|
|
75
|
+
{
|
|
76
|
+
type: "text",
|
|
77
|
+
text: JSON.stringify(value, null, 2),
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function buildSwallowKitToolDefinitions(runMachineCli = defaultMachineCliRunner) {
|
|
83
|
+
return [
|
|
84
|
+
{
|
|
85
|
+
name: "swallowkit_inspect_project",
|
|
86
|
+
description: "Return framework-owned SwallowKit project metadata.",
|
|
87
|
+
inputSchema: z.object({}),
|
|
88
|
+
handler: async () => {
|
|
89
|
+
const response = await executeMachineCommand(["inspect", "project"], runMachineCli);
|
|
90
|
+
return jsonTextContent(response.data);
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "swallowkit_inspect_entities",
|
|
95
|
+
description: "Return SwallowKit entities, schema metadata, and connector/auth annotations.",
|
|
96
|
+
inputSchema: z.object({}),
|
|
97
|
+
handler: async () => {
|
|
98
|
+
const response = await executeMachineCommand(["inspect", "entities"], runMachineCli);
|
|
99
|
+
return jsonTextContent(response.data);
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "swallowkit_inspect_routes",
|
|
104
|
+
description: "Return BFF and Functions route metadata understood by SwallowKit.",
|
|
105
|
+
inputSchema: z.object({}),
|
|
106
|
+
handler: async () => {
|
|
107
|
+
const response = await executeMachineCommand(["inspect", "routes"], runMachineCli);
|
|
108
|
+
return jsonTextContent(response.data);
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: "swallowkit_validate_project",
|
|
113
|
+
description: "Validate project metadata, generated artifacts, and framework conventions.",
|
|
114
|
+
inputSchema: z.object({}),
|
|
115
|
+
handler: async () => {
|
|
116
|
+
const response = await executeMachineCommand(["validate", "project"], runMachineCli);
|
|
117
|
+
return jsonTextContent(response.data);
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: "swallowkit_generate_model",
|
|
122
|
+
description: "Generate SwallowKit model templates through the official generator.",
|
|
123
|
+
inputSchema: z.object({
|
|
124
|
+
names: z.array(z.string()).min(1),
|
|
125
|
+
modelsDir: z.string().optional(),
|
|
126
|
+
connector: z.string().optional(),
|
|
127
|
+
overwrite: z.enum(["always", "never"]).optional(),
|
|
128
|
+
}),
|
|
129
|
+
handler: async ({ names, modelsDir, connector, overwrite }) => {
|
|
130
|
+
const response = await executeMachineCommand(["generate", "model", ...names, ...(modelsDir ? ["--models-dir", modelsDir] : []), ...(connector ? ["--connector", connector] : []), "--overwrite", overwrite || "never"], runMachineCli);
|
|
131
|
+
return jsonTextContent(response.data);
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "swallowkit_scaffold_model",
|
|
136
|
+
description: "Generate SwallowKit scaffold artifacts through the official generator.",
|
|
137
|
+
inputSchema: z.object({
|
|
138
|
+
model: z.string(),
|
|
139
|
+
functionsDir: z.string().optional(),
|
|
140
|
+
apiDir: z.string().optional(),
|
|
141
|
+
apiOnly: z.boolean().optional(),
|
|
142
|
+
}),
|
|
143
|
+
handler: async ({ model, functionsDir, apiDir, apiOnly }) => {
|
|
144
|
+
const args = ["generate", "scaffold", model];
|
|
145
|
+
if (functionsDir) {
|
|
146
|
+
args.push("--functions-dir", functionsDir);
|
|
147
|
+
}
|
|
148
|
+
if (apiDir) {
|
|
149
|
+
args.push("--api-dir", apiDir);
|
|
150
|
+
}
|
|
151
|
+
if (apiOnly) {
|
|
152
|
+
args.push("--api-only");
|
|
153
|
+
}
|
|
154
|
+
const response = await executeMachineCommand(args, runMachineCli);
|
|
155
|
+
return jsonTextContent(response.data);
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
];
|
|
159
|
+
}
|
|
160
|
+
function createSwallowKitMcpServer(runMachineCli = defaultMachineCliRunner) {
|
|
161
|
+
const server = new mcp_1.McpServer({
|
|
162
|
+
name: "swallowkit-mcp",
|
|
163
|
+
version: process.env.npm_package_version || "0.0.0",
|
|
164
|
+
});
|
|
165
|
+
for (const tool of buildSwallowKitToolDefinitions(runMachineCli)) {
|
|
166
|
+
server.registerTool(tool.name, {
|
|
167
|
+
description: tool.description,
|
|
168
|
+
inputSchema: tool.inputSchema,
|
|
169
|
+
}, tool.handler);
|
|
170
|
+
}
|
|
171
|
+
return server;
|
|
172
|
+
}
|
|
173
|
+
async function runMcpServer() {
|
|
174
|
+
const server = createSwallowKitMcpServer();
|
|
175
|
+
const transport = new stdio_1.StdioServerTransport();
|
|
176
|
+
await server.connect(transport);
|
|
177
|
+
}
|
|
178
|
+
if (require.main === module) {
|
|
179
|
+
void runMcpServer().catch((error) => {
|
|
180
|
+
console.error(error);
|
|
181
|
+
process.exitCode = 1;
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* SwallowKit の基本型定義
|
|
3
3
|
*/
|
|
4
4
|
export type ServerFnMode = "auto" | "force-server" | "force-client";
|
|
5
|
+
export type BackendLanguage = "typescript" | "csharp" | "python";
|
|
5
6
|
export interface UseServerFnOptions {
|
|
6
7
|
mode?: ServerFnMode;
|
|
7
8
|
refetchOnMount?: boolean;
|
|
@@ -16,11 +17,73 @@ export interface UseServerFnResult<TResult> {
|
|
|
16
17
|
error: any;
|
|
17
18
|
refetch: () => void;
|
|
18
19
|
}
|
|
20
|
+
export type ConnectorOperation = "getAll" | "getById" | "create" | "update" | "delete";
|
|
21
|
+
export interface RdbConnectorConfig {
|
|
22
|
+
type: "rdb";
|
|
23
|
+
provider: "mysql" | "postgres" | "sqlserver";
|
|
24
|
+
connectionEnvVar: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ApiConnectorAuth {
|
|
27
|
+
type: "apiKey" | "bearer" | "oauth2";
|
|
28
|
+
envVar: string;
|
|
29
|
+
placement?: "query" | "header";
|
|
30
|
+
paramName?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ApiConnectorConfig {
|
|
33
|
+
type: "api";
|
|
34
|
+
baseUrlEnvVar: string;
|
|
35
|
+
auth?: ApiConnectorAuth;
|
|
36
|
+
}
|
|
37
|
+
export type ConnectorDefinition = RdbConnectorConfig | ApiConnectorConfig;
|
|
38
|
+
export interface RdbModelConnectorConfig {
|
|
39
|
+
connector: string;
|
|
40
|
+
operations: readonly ConnectorOperation[];
|
|
41
|
+
table: string;
|
|
42
|
+
idColumn?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ApiModelConnectorConfig {
|
|
45
|
+
connector: string;
|
|
46
|
+
operations: readonly ConnectorOperation[];
|
|
47
|
+
endpoints?: Partial<Record<ConnectorOperation, string>>;
|
|
48
|
+
}
|
|
49
|
+
export type ModelConnectorConfig = RdbModelConnectorConfig | ApiModelConnectorConfig;
|
|
50
|
+
export type AuthProvider = "custom-jwt" | "swa" | "swa-custom" | "none";
|
|
51
|
+
export interface CustomJwtConfig {
|
|
52
|
+
userConnector: string;
|
|
53
|
+
userTable: string;
|
|
54
|
+
loginIdColumn: string;
|
|
55
|
+
passwordHashColumn: string;
|
|
56
|
+
rolesColumn: string;
|
|
57
|
+
jwtSecretEnv?: string;
|
|
58
|
+
tokenExpiry?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface SwaAuthConfig {
|
|
61
|
+
allowedProviders?: string[];
|
|
62
|
+
roleSource?: "swa-roles" | "connector";
|
|
63
|
+
roleConnector?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface AuthorizationConfig {
|
|
66
|
+
defaultPolicy?: "authenticated" | "anonymous";
|
|
67
|
+
}
|
|
68
|
+
export interface AuthConfig {
|
|
69
|
+
provider: AuthProvider;
|
|
70
|
+
customJwt?: CustomJwtConfig;
|
|
71
|
+
swa?: SwaAuthConfig;
|
|
72
|
+
authorization?: AuthorizationConfig;
|
|
73
|
+
}
|
|
74
|
+
export interface ModelAuthPolicy {
|
|
75
|
+
roles?: string[];
|
|
76
|
+
read?: string[];
|
|
77
|
+
write?: string[];
|
|
78
|
+
}
|
|
19
79
|
export interface SwallowKitConfig {
|
|
20
80
|
database?: {
|
|
21
81
|
connectionString?: string;
|
|
22
82
|
databaseName?: string;
|
|
23
83
|
};
|
|
84
|
+
backend?: {
|
|
85
|
+
language?: BackendLanguage;
|
|
86
|
+
};
|
|
24
87
|
api?: {
|
|
25
88
|
endpoint?: string;
|
|
26
89
|
cors?: {
|
|
@@ -28,5 +91,7 @@ export interface SwallowKitConfig {
|
|
|
28
91
|
credentials?: boolean;
|
|
29
92
|
};
|
|
30
93
|
};
|
|
94
|
+
connectors?: Record<string, ConnectorDefinition>;
|
|
95
|
+
auth?: AuthConfig;
|
|
31
96
|
}
|
|
32
97
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { BackendLanguage } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Supported package managers
|
|
4
|
+
*/
|
|
5
|
+
export type PackageManager = "npm" | "pnpm";
|
|
6
|
+
/**
|
|
7
|
+
* Package manager command mappings
|
|
8
|
+
*/
|
|
9
|
+
export interface PackageManagerCommands {
|
|
10
|
+
/** The binary name: "npm" or "pnpm" */
|
|
11
|
+
name: PackageManager;
|
|
12
|
+
/** Install all dependencies: "pnpm install" / "npm install" */
|
|
13
|
+
install: string;
|
|
14
|
+
/** Install with lockfile: "pnpm install --frozen-lockfile" / "npm ci" */
|
|
15
|
+
ci: string;
|
|
16
|
+
/** Add a dependency: "pnpm add" / "npm install" */
|
|
17
|
+
add: string;
|
|
18
|
+
/** Add a dev dependency: "pnpm add -D" / "npm install -D" */
|
|
19
|
+
addDev: string;
|
|
20
|
+
/** Add a global dependency: "pnpm add -g" / "npm install -g" */
|
|
21
|
+
addGlobal: string;
|
|
22
|
+
/** Execute a package binary: "pnpm exec" / "npx" */
|
|
23
|
+
exec: string;
|
|
24
|
+
/** Download & execute: "pnpm dlx" / "npx" */
|
|
25
|
+
dlx: string;
|
|
26
|
+
/** Run a script: "pnpm run" / "npm run" */
|
|
27
|
+
run: string;
|
|
28
|
+
/** Run a script with filter: "pnpm run --filter <ws>" / "npm run --workspace=<ws>" */
|
|
29
|
+
runFilter: (workspace: string) => string;
|
|
30
|
+
/** Start script: "pnpm start" / "npm start" */
|
|
31
|
+
start: string;
|
|
32
|
+
/** Install production only (in temp dir for CI): "pnpm install --prod" / "npm install --omit=dev" */
|
|
33
|
+
installProd: string;
|
|
34
|
+
/** create-next-app flag: "--use-pnpm" / (none for npm) */
|
|
35
|
+
createNextAppFlag: string | null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the full command mapping for the given package manager
|
|
39
|
+
*/
|
|
40
|
+
export declare function getCommands(pm: PackageManager): PackageManagerCommands;
|
|
41
|
+
/**
|
|
42
|
+
* Detect the preferred package manager for new project initialisation.
|
|
43
|
+
*
|
|
44
|
+
* Strategy (pnpm-preferred):
|
|
45
|
+
* 1. If pnpm is installed on the system → always use pnpm
|
|
46
|
+
* (even when invoked via `npx`, since `npx` is often used out of habit)
|
|
47
|
+
* 2. Otherwise → npm
|
|
48
|
+
*
|
|
49
|
+
* This is intentionally independent of `npm_config_user_agent` so that
|
|
50
|
+
* `npx swallowkit init` still creates a pnpm project when pnpm is available.
|
|
51
|
+
*/
|
|
52
|
+
export declare function detectFromUserAgent(): PackageManager;
|
|
53
|
+
/**
|
|
54
|
+
* Detect the package manager used in an existing project directory
|
|
55
|
+
* by checking for lockfiles.
|
|
56
|
+
*
|
|
57
|
+
* Priority: pnpm-lock.yaml > package-lock.json > fallback to detectFromUserAgent()
|
|
58
|
+
*/
|
|
59
|
+
export declare function detectFromProject(projectDir?: string): PackageManager;
|
|
60
|
+
/**
|
|
61
|
+
* Get spawn arguments (command + args array) for the package manager.
|
|
62
|
+
* Useful when calling spawn() directly.
|
|
63
|
+
*
|
|
64
|
+
* Examples:
|
|
65
|
+
* spawnArgs("pnpm", ["add", "next@latest"]) => { cmd: "pnpm", args: ["add", "next@latest"] }
|
|
66
|
+
* spawnArgs("npm", ["add", "next@latest"]) => { cmd: "npm", args: ["install", "next@latest"] }
|
|
67
|
+
*/
|
|
68
|
+
export declare function spawnArgs(pm: PackageManager, args: string[]): {
|
|
69
|
+
cmd: string;
|
|
70
|
+
args: string[];
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Workspace configuration helpers
|
|
74
|
+
*/
|
|
75
|
+
export declare function getWorkspaceConfig(pm: PackageManager, workspaces: string[]): {
|
|
76
|
+
/** pnpm uses pnpm-workspace.yaml */
|
|
77
|
+
type: "file";
|
|
78
|
+
filename: string;
|
|
79
|
+
content: string;
|
|
80
|
+
field?: undefined;
|
|
81
|
+
value?: undefined;
|
|
82
|
+
} | {
|
|
83
|
+
type: "packageJson";
|
|
84
|
+
field: string;
|
|
85
|
+
value: string[];
|
|
86
|
+
filename?: undefined;
|
|
87
|
+
content?: undefined;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* CI/CD setup step for GitHub Actions
|
|
91
|
+
*/
|
|
92
|
+
export declare function getCiSetupStep(pm: PackageManager): string;
|
|
93
|
+
/**
|
|
94
|
+
* CI/CD setup steps for Azure Pipelines
|
|
95
|
+
*/
|
|
96
|
+
export declare function getAzurePipelinesSetup(pm: PackageManager): string;
|
|
97
|
+
/**
|
|
98
|
+
* Build script for generated package.json (depends on workspace command syntax)
|
|
99
|
+
*/
|
|
100
|
+
export declare function getBuildScript(pm: PackageManager): string;
|
|
101
|
+
/**
|
|
102
|
+
* Functions prestart script
|
|
103
|
+
*/
|
|
104
|
+
export declare function getFunctionsPrestart(pm: PackageManager): string;
|
|
105
|
+
/**
|
|
106
|
+
* Functions:start script for root package.json
|
|
107
|
+
*/
|
|
108
|
+
export declare function getFunctionsStartScript(pm: PackageManager, backendLanguage?: BackendLanguage): string;
|
|
109
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,sFAAsF;IACtF,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,qGAAqG;IACrG,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,cAAc,GAAG,sBAAsB,CAmCtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,CAEpD;AAcD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAYrE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,MAAM,EAAE,GACb;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAEjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE;IAGrE,oCAAoC;;;;;;;;;;;;EAazC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAOzD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CASjE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAOzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAK/D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,cAAc,EAClB,eAAe,GAAE,eAA8B,GAC9C,MAAM,CASR"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getCommands = getCommands;
|
|
37
|
+
exports.detectFromUserAgent = detectFromUserAgent;
|
|
38
|
+
exports.detectFromProject = detectFromProject;
|
|
39
|
+
exports.spawnArgs = spawnArgs;
|
|
40
|
+
exports.getWorkspaceConfig = getWorkspaceConfig;
|
|
41
|
+
exports.getCiSetupStep = getCiSetupStep;
|
|
42
|
+
exports.getAzurePipelinesSetup = getAzurePipelinesSetup;
|
|
43
|
+
exports.getBuildScript = getBuildScript;
|
|
44
|
+
exports.getFunctionsPrestart = getFunctionsPrestart;
|
|
45
|
+
exports.getFunctionsStartScript = getFunctionsStartScript;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const child_process_1 = require("child_process");
|
|
49
|
+
/**
|
|
50
|
+
* Get the full command mapping for the given package manager
|
|
51
|
+
*/
|
|
52
|
+
function getCommands(pm) {
|
|
53
|
+
if (pm === "pnpm") {
|
|
54
|
+
return {
|
|
55
|
+
name: "pnpm",
|
|
56
|
+
install: "pnpm install",
|
|
57
|
+
ci: "pnpm install --frozen-lockfile",
|
|
58
|
+
add: "pnpm add",
|
|
59
|
+
addDev: "pnpm add -D",
|
|
60
|
+
addGlobal: "pnpm add -g",
|
|
61
|
+
exec: "pnpm exec",
|
|
62
|
+
dlx: "pnpm dlx",
|
|
63
|
+
run: "pnpm run",
|
|
64
|
+
runFilter: (ws) => `pnpm run --filter ${ws}`,
|
|
65
|
+
start: "pnpm start",
|
|
66
|
+
installProd: "pnpm install --prod",
|
|
67
|
+
createNextAppFlag: "--use-pnpm",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// npm
|
|
71
|
+
return {
|
|
72
|
+
name: "npm",
|
|
73
|
+
install: "npm install",
|
|
74
|
+
ci: "npm ci",
|
|
75
|
+
add: "npm install",
|
|
76
|
+
addDev: "npm install -D",
|
|
77
|
+
addGlobal: "npm install -g",
|
|
78
|
+
exec: "npx",
|
|
79
|
+
dlx: "npx",
|
|
80
|
+
run: "npm run",
|
|
81
|
+
runFilter: (ws) => `npm run --workspace=${ws}`,
|
|
82
|
+
start: "npm start",
|
|
83
|
+
installProd: "npm install --omit=dev",
|
|
84
|
+
createNextAppFlag: null,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Detect the preferred package manager for new project initialisation.
|
|
89
|
+
*
|
|
90
|
+
* Strategy (pnpm-preferred):
|
|
91
|
+
* 1. If pnpm is installed on the system → always use pnpm
|
|
92
|
+
* (even when invoked via `npx`, since `npx` is often used out of habit)
|
|
93
|
+
* 2. Otherwise → npm
|
|
94
|
+
*
|
|
95
|
+
* This is intentionally independent of `npm_config_user_agent` so that
|
|
96
|
+
* `npx swallowkit init` still creates a pnpm project when pnpm is available.
|
|
97
|
+
*/
|
|
98
|
+
function detectFromUserAgent() {
|
|
99
|
+
return isPnpmInstalled() ? "pnpm" : "npm";
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check whether pnpm is available on the system PATH.
|
|
103
|
+
*/
|
|
104
|
+
function isPnpmInstalled() {
|
|
105
|
+
try {
|
|
106
|
+
(0, child_process_1.execSync)("pnpm --version", { stdio: "ignore" });
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Detect the package manager used in an existing project directory
|
|
115
|
+
* by checking for lockfiles.
|
|
116
|
+
*
|
|
117
|
+
* Priority: pnpm-lock.yaml > package-lock.json > fallback to detectFromUserAgent()
|
|
118
|
+
*/
|
|
119
|
+
function detectFromProject(projectDir) {
|
|
120
|
+
const dir = projectDir || process.cwd();
|
|
121
|
+
if (fs.existsSync(path.join(dir, "pnpm-lock.yaml"))) {
|
|
122
|
+
return "pnpm";
|
|
123
|
+
}
|
|
124
|
+
if (fs.existsSync(path.join(dir, "package-lock.json"))) {
|
|
125
|
+
return "npm";
|
|
126
|
+
}
|
|
127
|
+
// No lockfile found — fall back to user agent detection
|
|
128
|
+
return detectFromUserAgent();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get spawn arguments (command + args array) for the package manager.
|
|
132
|
+
* Useful when calling spawn() directly.
|
|
133
|
+
*
|
|
134
|
+
* Examples:
|
|
135
|
+
* spawnArgs("pnpm", ["add", "next@latest"]) => { cmd: "pnpm", args: ["add", "next@latest"] }
|
|
136
|
+
* spawnArgs("npm", ["add", "next@latest"]) => { cmd: "npm", args: ["install", "next@latest"] }
|
|
137
|
+
*/
|
|
138
|
+
function spawnArgs(pm, args) {
|
|
139
|
+
return { cmd: pm, args };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Workspace configuration helpers
|
|
143
|
+
*/
|
|
144
|
+
function getWorkspaceConfig(pm, workspaces) {
|
|
145
|
+
if (pm === "pnpm") {
|
|
146
|
+
return {
|
|
147
|
+
/** pnpm uses pnpm-workspace.yaml */
|
|
148
|
+
type: "file",
|
|
149
|
+
filename: "pnpm-workspace.yaml",
|
|
150
|
+
content: `packages:\n${workspaces.map((w) => ` - ${w}`).join("\n")}\n`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// npm uses "workspaces" field in package.json
|
|
154
|
+
return {
|
|
155
|
+
type: "packageJson",
|
|
156
|
+
field: "workspaces",
|
|
157
|
+
value: workspaces,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* CI/CD setup step for GitHub Actions
|
|
162
|
+
*/
|
|
163
|
+
function getCiSetupStep(pm) {
|
|
164
|
+
if (pm === "pnpm") {
|
|
165
|
+
return ` - name: Setup pnpm
|
|
166
|
+
uses: pnpm/action-setup@v4`;
|
|
167
|
+
}
|
|
168
|
+
// npm: no extra setup needed (comes with Node.js)
|
|
169
|
+
return "";
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* CI/CD setup steps for Azure Pipelines
|
|
173
|
+
*/
|
|
174
|
+
function getAzurePipelinesSetup(pm) {
|
|
175
|
+
if (pm === "pnpm") {
|
|
176
|
+
return ` - script: |
|
|
177
|
+
corepack enable
|
|
178
|
+
corepack prepare pnpm@latest --activate
|
|
179
|
+
displayName: 'Setup pnpm'`;
|
|
180
|
+
}
|
|
181
|
+
// npm: no extra step needed
|
|
182
|
+
return "";
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Build script for generated package.json (depends on workspace command syntax)
|
|
186
|
+
*/
|
|
187
|
+
function getBuildScript(pm) {
|
|
188
|
+
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});"`;
|
|
189
|
+
if (pm === "pnpm") {
|
|
190
|
+
return `pnpm run --filter shared build && next build --webpack && ${copyStandaloneAssets}`;
|
|
191
|
+
}
|
|
192
|
+
return `npm run --workspace=shared build && next build --webpack && ${copyStandaloneAssets}`;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Functions prestart script
|
|
196
|
+
*/
|
|
197
|
+
function getFunctionsPrestart(pm) {
|
|
198
|
+
if (pm === "pnpm") {
|
|
199
|
+
return "pnpm run build";
|
|
200
|
+
}
|
|
201
|
+
return "npm run build";
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Functions:start script for root package.json
|
|
205
|
+
*/
|
|
206
|
+
function getFunctionsStartScript(pm, backendLanguage = "typescript") {
|
|
207
|
+
if (backendLanguage === "typescript") {
|
|
208
|
+
if (pm === "pnpm") {
|
|
209
|
+
return "cd functions && pnpm start";
|
|
210
|
+
}
|
|
211
|
+
return "cd functions && npm start";
|
|
212
|
+
}
|
|
213
|
+
return "cd functions && func start";
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
|