@channel.io/app-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +17 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +302 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +119 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +373 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dev.d.ts +3 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +175 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +189 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { createCommand } from "./commands/create.js";
|
|
4
|
+
import { addCommand } from "./commands/add.js";
|
|
5
|
+
import { devCommand } from "./commands/dev.js";
|
|
6
|
+
import { buildCommand } from "./commands/build.js";
|
|
7
|
+
import { generateCommand } from "./commands/generate.js";
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program.name("channel-app").description("CLI for Channel.io App SDK").version("0.0.1");
|
|
10
|
+
// Register commands
|
|
11
|
+
program.addCommand(createCommand);
|
|
12
|
+
program.addCommand(addCommand);
|
|
13
|
+
program.addCommand(devCommand);
|
|
14
|
+
program.addCommand(buildCommand);
|
|
15
|
+
program.addCommand(generateCommand);
|
|
16
|
+
program.parse();
|
|
17
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvF,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAEpC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4KpC,eAAO,MAAM,UAAU,SAcnB,CAAC"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import prompts from "prompts";
|
|
6
|
+
const EXTENSION_TEMPLATES = {
|
|
7
|
+
oauth: `import { createOAuthExtensionV1 } from "@channel.io/app-sdk-core";
|
|
8
|
+
|
|
9
|
+
export const oauthExtension = createOAuthExtensionV1({
|
|
10
|
+
getAuthConfig: async (ctx) => ({
|
|
11
|
+
authorizationUrl: "https://provider.com/oauth/authorize",
|
|
12
|
+
tokenUrl: "https://provider.com/oauth/token",
|
|
13
|
+
scopes: ["read", "write"],
|
|
14
|
+
clientId: process.env.OAUTH_CLIENT_ID ?? "",
|
|
15
|
+
}),
|
|
16
|
+
validateCredentials: async (ctx) => {
|
|
17
|
+
// TODO: Implement credential validation
|
|
18
|
+
return { valid: true };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
`,
|
|
22
|
+
apikey: `import { createApiKeyExtensionV1 } from "@channel.io/app-sdk-core";
|
|
23
|
+
|
|
24
|
+
export const apikeyExtension = createApiKeyExtensionV1({
|
|
25
|
+
getAuthConfig: async (ctx) => ({
|
|
26
|
+
fields: [
|
|
27
|
+
{
|
|
28
|
+
name: "apiKey",
|
|
29
|
+
label: "API Key",
|
|
30
|
+
type: "password",
|
|
31
|
+
required: true,
|
|
32
|
+
placeholder: "Enter your API key",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
instructions: "Enter your API key to connect.",
|
|
36
|
+
}),
|
|
37
|
+
validateCredentials: async (ctx, credentials) => {
|
|
38
|
+
// TODO: Validate the API key
|
|
39
|
+
return { valid: true };
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
`,
|
|
43
|
+
calendar: `import { createCalendarExtensionV1 } from "@channel.io/app-sdk-core";
|
|
44
|
+
|
|
45
|
+
export const calendarExtension = createCalendarExtensionV1({
|
|
46
|
+
listEventTypes: async (ctx, params) => {
|
|
47
|
+
// TODO: Fetch event types from your calendar provider
|
|
48
|
+
return {
|
|
49
|
+
eventTypes: [
|
|
50
|
+
{ id: "1", name: "30 Minute Meeting", duration: 30 },
|
|
51
|
+
{ id: "2", name: "60 Minute Meeting", duration: 60 },
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
getAvailability: async (ctx, params) => {
|
|
56
|
+
// TODO: Fetch available slots from your calendar provider
|
|
57
|
+
return { slots: [] };
|
|
58
|
+
},
|
|
59
|
+
createBooking: async (ctx, params) => {
|
|
60
|
+
// TODO: Create booking with your calendar provider
|
|
61
|
+
throw new Error("Not implemented");
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
`,
|
|
65
|
+
command: `import { createCommandExtensionV1 } from "@channel.io/app-sdk-core";
|
|
66
|
+
|
|
67
|
+
export const commandExtension = createCommandExtensionV1({
|
|
68
|
+
execute: async (ctx, params) => {
|
|
69
|
+
const [subcommand, ...args] = params.args;
|
|
70
|
+
|
|
71
|
+
switch (subcommand) {
|
|
72
|
+
case "help":
|
|
73
|
+
return {
|
|
74
|
+
action: "sendMessage",
|
|
75
|
+
text: "Available commands: help, search <query>",
|
|
76
|
+
};
|
|
77
|
+
case "search":
|
|
78
|
+
return {
|
|
79
|
+
action: "openWam",
|
|
80
|
+
wamName: "search-results",
|
|
81
|
+
wamParams: { query: args.join(" ") },
|
|
82
|
+
};
|
|
83
|
+
default:
|
|
84
|
+
return { action: "none" };
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
getSuggestions: async (ctx, params) => ({
|
|
88
|
+
suggestions: [
|
|
89
|
+
{ value: "help", label: "Help", description: "Show help message" },
|
|
90
|
+
{ value: "search", label: "Search", description: "Search for items" },
|
|
91
|
+
],
|
|
92
|
+
}),
|
|
93
|
+
});
|
|
94
|
+
`,
|
|
95
|
+
widget: `import { createWidgetExtensionV1 } from "@channel.io/app-sdk-core";
|
|
96
|
+
|
|
97
|
+
export const widgetExtension = createWidgetExtensionV1({
|
|
98
|
+
getConfig: async (ctx) => ({
|
|
99
|
+
name: "My Widget",
|
|
100
|
+
description: "A helpful widget",
|
|
101
|
+
scope: "desk", // or "front"
|
|
102
|
+
widgetType: "wam", // or "snippet"
|
|
103
|
+
nameDescI18nMap: {
|
|
104
|
+
ko: { name: "내 위젯", description: "도움이 되는 위젯" },
|
|
105
|
+
ja: { name: "マイウィジェット", description: "便利なウィジェット" },
|
|
106
|
+
},
|
|
107
|
+
}),
|
|
108
|
+
onAction: async (ctx, params) => {
|
|
109
|
+
// TODO: Handle widget action
|
|
110
|
+
return {
|
|
111
|
+
success: true,
|
|
112
|
+
message: "Widget action completed",
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
`,
|
|
117
|
+
customtab: `import { createCustomTabExtensionV1 } from "@channel.io/app-sdk-core";
|
|
118
|
+
|
|
119
|
+
export const customTabExtension = createCustomTabExtensionV1({
|
|
120
|
+
getConfig: async (ctx) => ({
|
|
121
|
+
name: "My Tab",
|
|
122
|
+
nameI18nMap: {
|
|
123
|
+
ko: { name: "내 탭" },
|
|
124
|
+
ja: { name: "マイタブ" },
|
|
125
|
+
},
|
|
126
|
+
icon: "info",
|
|
127
|
+
}),
|
|
128
|
+
getContent: async (ctx, params) => ({
|
|
129
|
+
wamName: "my-tab-content",
|
|
130
|
+
wamParams: {
|
|
131
|
+
userChatId: params.userChatId,
|
|
132
|
+
},
|
|
133
|
+
}),
|
|
134
|
+
});
|
|
135
|
+
`,
|
|
136
|
+
alftask: `import { createAlfTaskExtensionV1 } from "@channel.io/app-sdk-core";
|
|
137
|
+
|
|
138
|
+
export const alfTaskExtension = createAlfTaskExtensionV1({
|
|
139
|
+
getAlfTasks: async (ctx) => ({
|
|
140
|
+
predefinedTasks: [
|
|
141
|
+
{
|
|
142
|
+
version: "v1.0.0",
|
|
143
|
+
name: "Auto Reply",
|
|
144
|
+
trigger: "user_message",
|
|
145
|
+
memorySchema: [
|
|
146
|
+
{ name: "userMessage", type: "string" },
|
|
147
|
+
{ name: "reply", type: "string" },
|
|
148
|
+
],
|
|
149
|
+
nodes: [
|
|
150
|
+
{
|
|
151
|
+
id: "analyze",
|
|
152
|
+
type: "function",
|
|
153
|
+
config: { function: "analyzeMessage" },
|
|
154
|
+
next: "reply",
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: "reply",
|
|
158
|
+
type: "send_message",
|
|
159
|
+
config: { message: "{{memory.reply}}" },
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
startNodeId: "analyze",
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
}),
|
|
166
|
+
});
|
|
167
|
+
`,
|
|
168
|
+
};
|
|
169
|
+
const EXTENSION_TYPES = Object.keys(EXTENSION_TEMPLATES);
|
|
170
|
+
export const addCommand = new Command()
|
|
171
|
+
.command("add")
|
|
172
|
+
.description("Add extension or function to the project")
|
|
173
|
+
.argument("<type>", `Type to add: extension, function`)
|
|
174
|
+
.argument("[name]", "Name of the extension or function")
|
|
175
|
+
.action(async (type, name) => {
|
|
176
|
+
if (type === "extension") {
|
|
177
|
+
await addExtension(name);
|
|
178
|
+
}
|
|
179
|
+
else if (type === "function") {
|
|
180
|
+
await addFunction(name);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.log(pc.red(`Unknown type: ${type}. Use 'extension' or 'function'`));
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
async function addExtension(name) {
|
|
188
|
+
// Find extensions directory
|
|
189
|
+
const extensionsDir = findExtensionsDir();
|
|
190
|
+
if (!extensionsDir) {
|
|
191
|
+
console.log(pc.red("Could not find extensions directory. Make sure you're in a Channel.io app project."));
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
// Prompt for extension type if not provided
|
|
195
|
+
if (!name || !EXTENSION_TYPES.includes(name)) {
|
|
196
|
+
const response = await prompts({
|
|
197
|
+
type: "select",
|
|
198
|
+
name: "extensionType",
|
|
199
|
+
message: "Select extension type to add:",
|
|
200
|
+
choices: EXTENSION_TYPES.map((t) => ({ title: t, value: t })),
|
|
201
|
+
});
|
|
202
|
+
if (!response.extensionType) {
|
|
203
|
+
console.log(pc.yellow("Cancelled"));
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
name = response.extensionType;
|
|
207
|
+
}
|
|
208
|
+
if (!name) {
|
|
209
|
+
console.log(pc.red("Extension name is required"));
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
const template = EXTENSION_TEMPLATES[name];
|
|
213
|
+
if (!template) {
|
|
214
|
+
console.log(pc.red(`Unknown extension type: ${name}`));
|
|
215
|
+
console.log(pc.dim(`Available types: ${EXTENSION_TYPES.join(", ")}`));
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
const fileName = `${name}.extension.ts`;
|
|
219
|
+
const filePath = path.join(extensionsDir, fileName);
|
|
220
|
+
if (fs.existsSync(filePath)) {
|
|
221
|
+
const response = await prompts({
|
|
222
|
+
type: "confirm",
|
|
223
|
+
name: "overwrite",
|
|
224
|
+
message: `${fileName} already exists. Overwrite?`,
|
|
225
|
+
initial: false,
|
|
226
|
+
});
|
|
227
|
+
if (!response.overwrite) {
|
|
228
|
+
console.log(pc.yellow("Cancelled"));
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
fs.writeFileSync(filePath, template);
|
|
233
|
+
console.log(pc.green(`Created ${fileName}`));
|
|
234
|
+
console.log(pc.dim(`Don't forget to register the extension in your app module!`));
|
|
235
|
+
}
|
|
236
|
+
async function addFunction(name) {
|
|
237
|
+
// Find extensions directory
|
|
238
|
+
const extensionsDir = findExtensionsDir();
|
|
239
|
+
if (!extensionsDir) {
|
|
240
|
+
console.log(pc.red("Could not find extensions directory."));
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
// List existing extensions
|
|
244
|
+
const files = fs.readdirSync(extensionsDir).filter((f) => f.endsWith(".extension.ts"));
|
|
245
|
+
if (files.length === 0) {
|
|
246
|
+
console.log(pc.red("No extensions found. Add an extension first with: channel-app add extension"));
|
|
247
|
+
process.exit(1);
|
|
248
|
+
}
|
|
249
|
+
// Prompt for extension to add function to
|
|
250
|
+
const response = await prompts([
|
|
251
|
+
{
|
|
252
|
+
type: "select",
|
|
253
|
+
name: "extension",
|
|
254
|
+
message: "Select extension to add function to:",
|
|
255
|
+
choices: files.map((f) => ({
|
|
256
|
+
title: f.replace(".extension.ts", ""),
|
|
257
|
+
value: f,
|
|
258
|
+
})),
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
type: "text",
|
|
262
|
+
name: "functionName",
|
|
263
|
+
message: "Function name:",
|
|
264
|
+
initial: name,
|
|
265
|
+
validate: (v) => (v ? true : "Function name is required"),
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
type: "text",
|
|
269
|
+
name: "groupName",
|
|
270
|
+
message: "Function group name:",
|
|
271
|
+
initial: "default",
|
|
272
|
+
},
|
|
273
|
+
]);
|
|
274
|
+
if (!response.extension || !response.functionName) {
|
|
275
|
+
console.log(pc.yellow("Cancelled"));
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
console.log(pc.yellow("Function scaffolding is not fully implemented yet."));
|
|
279
|
+
console.log(pc.dim(`Please manually add the function '${response.functionName}' to group '${response.groupName}' in ${response.extension}`));
|
|
280
|
+
}
|
|
281
|
+
function findExtensionsDir() {
|
|
282
|
+
const possiblePaths = [
|
|
283
|
+
"src/extensions",
|
|
284
|
+
"apps/server/src/extensions",
|
|
285
|
+
"server/src/extensions",
|
|
286
|
+
"extensions",
|
|
287
|
+
];
|
|
288
|
+
for (const p of possiblePaths) {
|
|
289
|
+
const fullPath = path.join(process.cwd(), p);
|
|
290
|
+
if (fs.existsSync(fullPath)) {
|
|
291
|
+
return fullPath;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Try to create default path
|
|
295
|
+
const defaultPath = path.join(process.cwd(), "src/extensions");
|
|
296
|
+
if (fs.existsSync(path.dirname(defaultPath))) {
|
|
297
|
+
fs.mkdirSync(defaultPath, { recursive: true });
|
|
298
|
+
return defaultPath;
|
|
299
|
+
}
|
|
300
|
+
return null;
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,YAAY,SAqCrB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { execSync } from "node:child_process";
|
|
6
|
+
export const buildCommand = new Command()
|
|
7
|
+
.command("build")
|
|
8
|
+
.description("Build the app for production")
|
|
9
|
+
.option("-o, --output <dir>", "Output directory", "dist")
|
|
10
|
+
.action((options) => {
|
|
11
|
+
const projectType = detectProjectType();
|
|
12
|
+
console.log(pc.cyan("Building for production..."));
|
|
13
|
+
try {
|
|
14
|
+
// Build server if it exists
|
|
15
|
+
if (projectType.hasServer) {
|
|
16
|
+
console.log(pc.dim("Building server..."));
|
|
17
|
+
buildServer(projectType.serverPath, options.output);
|
|
18
|
+
console.log(pc.green("Server built successfully"));
|
|
19
|
+
}
|
|
20
|
+
// Build WAM if it exists
|
|
21
|
+
if (projectType.hasWam) {
|
|
22
|
+
console.log(pc.dim("Building WAM..."));
|
|
23
|
+
buildWam(projectType.wamPath, options.output);
|
|
24
|
+
console.log(pc.green("WAM built successfully"));
|
|
25
|
+
}
|
|
26
|
+
if (!projectType.hasServer && !projectType.hasWam) {
|
|
27
|
+
console.log(pc.yellow("No server or WAM found to build."));
|
|
28
|
+
console.log(pc.dim("Make sure you're in a Channel.io app project directory."));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
console.log(pc.green("\nBuild completed successfully!"));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.log(pc.red(`Build failed: ${error instanceof Error ? error.message : String(error)}`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
function detectProjectType() {
|
|
39
|
+
const cwd = process.cwd();
|
|
40
|
+
// Check for monorepo structure
|
|
41
|
+
const appsServerPath = path.join(cwd, "apps/server");
|
|
42
|
+
const appsWamPath = path.join(cwd, "apps/wam");
|
|
43
|
+
if (fs.existsSync(appsServerPath) && fs.existsSync(appsWamPath)) {
|
|
44
|
+
return {
|
|
45
|
+
hasServer: true,
|
|
46
|
+
serverPath: appsServerPath,
|
|
47
|
+
hasWam: true,
|
|
48
|
+
wamPath: appsWamPath,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// Check for standalone server/wam directories
|
|
52
|
+
const serverPath = path.join(cwd, "server");
|
|
53
|
+
const wamPath = path.join(cwd, "wam");
|
|
54
|
+
if (fs.existsSync(path.join(serverPath, "package.json")) &&
|
|
55
|
+
fs.existsSync(path.join(wamPath, "package.json"))) {
|
|
56
|
+
return {
|
|
57
|
+
hasServer: true,
|
|
58
|
+
serverPath: serverPath,
|
|
59
|
+
hasWam: true,
|
|
60
|
+
wamPath: wamPath,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Check for single project
|
|
64
|
+
const packageJsonPath = path.join(cwd, "package.json");
|
|
65
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
66
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
67
|
+
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
68
|
+
return {
|
|
69
|
+
hasServer: !!deps["@nestjs/core"] || !!deps["@channel.io/app-sdk-server"],
|
|
70
|
+
serverPath: cwd,
|
|
71
|
+
hasWam: !!deps.react || !!deps["@channel.io/app-sdk-wam"],
|
|
72
|
+
wamPath: cwd,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
hasServer: false,
|
|
77
|
+
serverPath: cwd,
|
|
78
|
+
hasWam: false,
|
|
79
|
+
wamPath: cwd,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function buildServer(serverPath, _outputDir) {
|
|
83
|
+
const packageJsonPath = path.join(serverPath, "package.json");
|
|
84
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
85
|
+
throw new Error(`No package.json found at ${serverPath}`);
|
|
86
|
+
}
|
|
87
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
88
|
+
const scripts = packageJson.scripts || {};
|
|
89
|
+
// Try to find the best build script
|
|
90
|
+
if (scripts.build) {
|
|
91
|
+
execSync("pnpm run build", { cwd: serverPath, stdio: "inherit" });
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Default to tsc for TypeScript projects
|
|
95
|
+
const tsconfigPath = path.join(serverPath, "tsconfig.json");
|
|
96
|
+
if (fs.existsSync(tsconfigPath)) {
|
|
97
|
+
execSync("pnpm tsc", { cwd: serverPath, stdio: "inherit" });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw new Error("No build script found and no tsconfig.json for TypeScript compilation");
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function buildWam(wamPath, _outputDir) {
|
|
105
|
+
const packageJsonPath = path.join(wamPath, "package.json");
|
|
106
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
107
|
+
throw new Error(`No package.json found at ${wamPath}`);
|
|
108
|
+
}
|
|
109
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
110
|
+
const scripts = packageJson.scripts || {};
|
|
111
|
+
// Try to find the best build script
|
|
112
|
+
if (scripts.build) {
|
|
113
|
+
execSync("pnpm run build", { cwd: wamPath, stdio: "inherit" });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new Error("No build script found in WAM package.json");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAqGtB,CAAC"}
|