@konomi-app/k2-vite 0.2.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/index.js ADDED
@@ -0,0 +1,541 @@
1
+ #!/usr/bin/env node
2
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
+ }) : x)(function(x) {
5
+ if (typeof require !== "undefined") return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+
9
+ // src/index.ts
10
+ import { program } from "commander";
11
+
12
+ // src/commands/build.ts
13
+ import { build as viteBuild } from "vite";
14
+ import fs from "fs-extra";
15
+ import path3 from "path";
16
+ import chalk from "chalk";
17
+
18
+ // src/lib/vite.ts
19
+ import path from "path";
20
+ var createViteConfig = (config = {}) => {
21
+ const plugins = [...config.plugins ?? []];
22
+ try {
23
+ const tsconfigPaths = __require("vite-tsconfig-paths");
24
+ plugins.push(tsconfigPaths.default ? tsconfigPaths.default() : tsconfigPaths());
25
+ } catch {
26
+ }
27
+ return {
28
+ ...config,
29
+ configFile: false,
30
+ build: {
31
+ ...config.build,
32
+ cssCodeSplit: true,
33
+ rollupOptions: {
34
+ ...config.build?.rollupOptions,
35
+ onwarn: (warning, warn) => {
36
+ if (["MODULE_LEVEL_DIRECTIVE"].includes(warning.code ?? "")) {
37
+ return;
38
+ }
39
+ warn(warning);
40
+ }
41
+ }
42
+ },
43
+ plugins,
44
+ resolve: {
45
+ ...config.resolve,
46
+ alias: {
47
+ "@": path.resolve(process.cwd(), "src"),
48
+ ...config.resolve?.alias
49
+ }
50
+ }
51
+ };
52
+ };
53
+
54
+ // src/lib/constants.ts
55
+ import path2 from "path";
56
+ var WORKSPACE_DIRECTORY = ".k2";
57
+ var DEVELOPMENT_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "dev");
58
+ var PRODUCTION_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "prod");
59
+ var PLUGIN_WORKSPACE_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "plugin");
60
+ var PLUGIN_DEVELOPMENT_DIRECTORY = path2.join(PLUGIN_WORKSPACE_DIRECTORY, "dev");
61
+ var PLUGIN_PRODUCTION_DIRECTORY = path2.join(PLUGIN_WORKSPACE_DIRECTORY, "prod");
62
+ var DEFAULT_PORT = 32767;
63
+ var CERT_KEY_FILENAME = "localhost-key.pem";
64
+ var CERT_FILENAME = "localhost-cert.pem";
65
+
66
+ // src/commands/build.ts
67
+ function getEntryPoints(inputDir) {
68
+ const entries = {};
69
+ if (!fs.existsSync(inputDir)) {
70
+ throw new Error(`Input directory not found: ${inputDir}`);
71
+ }
72
+ const dirs = fs.readdirSync(inputDir, { withFileTypes: true });
73
+ for (const dirent of dirs) {
74
+ if (!dirent.isDirectory()) continue;
75
+ const dirName = dirent.name;
76
+ const dirPath = path3.join(inputDir, dirName);
77
+ for (const filename of ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"]) {
78
+ const entryPath = path3.join(dirPath, filename);
79
+ if (fs.existsSync(entryPath)) {
80
+ entries[dirName] = entryPath;
81
+ break;
82
+ }
83
+ }
84
+ }
85
+ return entries;
86
+ }
87
+ async function build(options = {}) {
88
+ const { input = "src", outDir = PRODUCTION_DIRECTORY, viteConfig = {} } = options;
89
+ console.log(chalk.blue("\u{1F528} Building for production..."));
90
+ const inputDir = path3.resolve(input);
91
+ const outputDir = path3.resolve(outDir);
92
+ const entries = getEntryPoints(inputDir);
93
+ if (Object.keys(entries).length === 0) {
94
+ throw new Error(`No entry points found in ${inputDir}`);
95
+ }
96
+ console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
97
+ const config = createViteConfig({
98
+ ...viteConfig,
99
+ mode: "production",
100
+ build: {
101
+ ...viteConfig.build,
102
+ rollupOptions: {
103
+ ...viteConfig.build?.rollupOptions,
104
+ input: entries,
105
+ output: {
106
+ entryFileNames: "[name].js",
107
+ chunkFileNames: "chunks/[name]-[hash].js",
108
+ assetFileNames: "[name].[ext]",
109
+ ...viteConfig.build?.rollupOptions?.output
110
+ }
111
+ },
112
+ outDir: outputDir,
113
+ emptyOutDir: true
114
+ }
115
+ });
116
+ await viteBuild(config);
117
+ console.log(chalk.green(`\u2728 Build complete! Output: ${outputDir}`));
118
+ }
119
+
120
+ // src/commands/dev.ts
121
+ import { build as viteBuild2, createServer } from "vite";
122
+ import fs3 from "fs-extra";
123
+ import path5 from "path";
124
+ import chalk2 from "chalk";
125
+
126
+ // src/lib/cert.ts
127
+ import { exec } from "child_process";
128
+ import { promisify } from "util";
129
+ import fs2 from "fs-extra";
130
+ import path4 from "path";
131
+ var execAsync = promisify(exec);
132
+ async function generateCert(outDir) {
133
+ await fs2.ensureDir(outDir);
134
+ const { stdout } = await execAsync("mkcert localhost 127.0.0.1 ::1");
135
+ const files = [
136
+ { input: "localhost+2.pem", output: CERT_FILENAME },
137
+ { input: "localhost+2-key.pem", output: CERT_KEY_FILENAME }
138
+ ];
139
+ for (const { input, output } of files) {
140
+ if (fs2.existsSync(input)) {
141
+ await fs2.move(input, path4.join(outDir, output), { overwrite: true });
142
+ }
143
+ }
144
+ return { stdout };
145
+ }
146
+ function hasCertificates(certDir) {
147
+ return fs2.existsSync(path4.join(certDir, CERT_KEY_FILENAME)) && fs2.existsSync(path4.join(certDir, CERT_FILENAME));
148
+ }
149
+ function loadCertificates(certDir) {
150
+ return {
151
+ key: fs2.readFileSync(path4.join(certDir, CERT_KEY_FILENAME)),
152
+ cert: fs2.readFileSync(path4.join(certDir, CERT_FILENAME))
153
+ };
154
+ }
155
+
156
+ // src/commands/dev.ts
157
+ function getEntryPoints2(inputDir) {
158
+ const entries = {};
159
+ if (!fs3.existsSync(inputDir)) {
160
+ throw new Error(`Input directory not found: ${inputDir}`);
161
+ }
162
+ const dirs = fs3.readdirSync(inputDir, { withFileTypes: true });
163
+ for (const dirent of dirs) {
164
+ if (!dirent.isDirectory()) continue;
165
+ const dirName = dirent.name;
166
+ const dirPath = path5.join(inputDir, dirName);
167
+ for (const filename of ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"]) {
168
+ const entryPath = path5.join(dirPath, filename);
169
+ if (fs3.existsSync(entryPath)) {
170
+ entries[dirName] = entryPath;
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ return entries;
176
+ }
177
+ async function dev(options = {}) {
178
+ const {
179
+ input = "src",
180
+ outDir = DEVELOPMENT_DIRECTORY,
181
+ certDir = WORKSPACE_DIRECTORY,
182
+ port = DEFAULT_PORT,
183
+ viteConfig = {}
184
+ } = options;
185
+ console.log(chalk2.blue("\u{1F680} Starting development server..."));
186
+ const inputDir = path5.resolve(input);
187
+ const outputDir = path5.resolve(outDir);
188
+ const certDirPath = path5.resolve(certDir);
189
+ if (!hasCertificates(certDirPath)) {
190
+ console.log(chalk2.yellow("\u{1F4DC} SSL certificates not found. Generating..."));
191
+ try {
192
+ await generateCert(certDirPath);
193
+ console.log(chalk2.green("\u2705 SSL certificates generated successfully"));
194
+ } catch (error) {
195
+ console.log(
196
+ chalk2.red("\u274C Failed to generate SSL certificates. Make sure mkcert is installed.")
197
+ );
198
+ console.log(chalk2.gray(" Install mkcert: https://github.com/FiloSottile/mkcert"));
199
+ throw error;
200
+ }
201
+ }
202
+ const entries = getEntryPoints2(inputDir);
203
+ if (Object.keys(entries).length === 0) {
204
+ throw new Error(`No entry points found in ${inputDir}`);
205
+ }
206
+ console.log(chalk2.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
207
+ await fs3.ensureDir(outputDir);
208
+ const { key, cert } = loadCertificates(certDirPath);
209
+ const config = createViteConfig({
210
+ ...viteConfig,
211
+ mode: "development",
212
+ build: {
213
+ ...viteConfig.build,
214
+ rollupOptions: {
215
+ ...viteConfig.build?.rollupOptions,
216
+ input: entries,
217
+ output: {
218
+ entryFileNames: "[name].js",
219
+ chunkFileNames: "chunks/[name].js",
220
+ assetFileNames: "[name].[ext]",
221
+ ...viteConfig.build?.rollupOptions?.output
222
+ }
223
+ },
224
+ outDir: outputDir,
225
+ sourcemap: "inline",
226
+ watch: {}
227
+ },
228
+ server: {
229
+ ...viteConfig.server,
230
+ port,
231
+ https: { key, cert }
232
+ }
233
+ });
234
+ console.log(chalk2.gray(" Building..."));
235
+ await viteBuild2(config);
236
+ const server = await createServer({
237
+ ...config,
238
+ root: outputDir,
239
+ server: {
240
+ port,
241
+ https: { key, cert }
242
+ }
243
+ });
244
+ await server.listen();
245
+ console.log(chalk2.green(`
246
+ \u2728 Development server ready!`));
247
+ console.log(chalk2.cyan(` Local: https://localhost:${port}`));
248
+ console.log(chalk2.gray(` Output: ${outputDir}`));
249
+ console.log(chalk2.gray("\n Watching for changes...\n"));
250
+ const chokidar = await import("chokidar");
251
+ const watcher = chokidar.watch([`${input}/**/*.{ts,tsx,js,jsx,css,scss}`], {
252
+ ignored: /node_modules/,
253
+ persistent: true
254
+ });
255
+ const rebuild = async () => {
256
+ console.log(chalk2.gray(" Rebuilding..."));
257
+ await viteBuild2(config);
258
+ };
259
+ watcher.on("change", rebuild);
260
+ watcher.on("add", rebuild);
261
+ watcher.on("unlink", rebuild);
262
+ }
263
+
264
+ // src/commands/plugin-build.ts
265
+ import { build as viteBuild3 } from "vite";
266
+ import fs4 from "fs-extra";
267
+ import path6 from "path";
268
+ import chalk3 from "chalk";
269
+ var ENTRY_FILE_NAMES = ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"];
270
+ function findEntryPoint(basePath) {
271
+ for (const filename of ENTRY_FILE_NAMES) {
272
+ const entryPath = path6.join(basePath, filename);
273
+ if (fs4.existsSync(entryPath)) {
274
+ return entryPath;
275
+ }
276
+ }
277
+ if (fs4.existsSync(basePath) && fs4.statSync(basePath).isFile()) {
278
+ return basePath;
279
+ }
280
+ return null;
281
+ }
282
+ function getPluginEntryPoints(options) {
283
+ const entries = {};
284
+ const configPath = findEntryPoint(options.configEntry);
285
+ if (configPath) {
286
+ entries["config"] = configPath;
287
+ } else {
288
+ console.log(chalk3.yellow(` \u26A0 Config entry not found: ${options.configEntry}`));
289
+ }
290
+ const desktopPath = findEntryPoint(options.desktopEntry);
291
+ if (desktopPath) {
292
+ entries["desktop"] = desktopPath;
293
+ } else {
294
+ console.log(chalk3.yellow(` \u26A0 Desktop entry not found: ${options.desktopEntry}`));
295
+ }
296
+ return entries;
297
+ }
298
+ async function pluginBuild(options = {}) {
299
+ const {
300
+ configEntry = "src/config",
301
+ desktopEntry = "src/desktop",
302
+ outDir = PLUGIN_PRODUCTION_DIRECTORY,
303
+ viteConfig = {}
304
+ } = options;
305
+ console.log(chalk3.blue("\u{1F528} Building kintone plugin for production..."));
306
+ const outputDir = path6.resolve(outDir);
307
+ const entries = getPluginEntryPoints({
308
+ configEntry: path6.resolve(configEntry),
309
+ desktopEntry: path6.resolve(desktopEntry)
310
+ });
311
+ if (Object.keys(entries).length === 0) {
312
+ throw new Error("No entry points found for plugin. Check configEntry and desktopEntry paths.");
313
+ }
314
+ console.log(chalk3.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
315
+ const config = createViteConfig({
316
+ ...viteConfig,
317
+ mode: "production",
318
+ build: {
319
+ ...viteConfig.build,
320
+ rollupOptions: {
321
+ ...viteConfig.build?.rollupOptions,
322
+ input: entries,
323
+ output: {
324
+ entryFileNames: "[name].js",
325
+ chunkFileNames: "chunks/[name]-[hash].js",
326
+ assetFileNames: "[name].[ext]",
327
+ ...viteConfig.build?.rollupOptions?.output
328
+ }
329
+ },
330
+ outDir: outputDir,
331
+ emptyOutDir: true
332
+ }
333
+ });
334
+ await viteBuild3(config);
335
+ console.log(chalk3.green(`\u2728 Plugin build complete! Output: ${outputDir}`));
336
+ console.log(chalk3.gray(` - config.js${entries["config"] ? "" : " (skipped)"}`));
337
+ console.log(chalk3.gray(` - desktop.js${entries["desktop"] ? "" : " (skipped)"}`));
338
+ }
339
+
340
+ // src/commands/plugin-dev.ts
341
+ import { build as viteBuild4, createServer as createServer2 } from "vite";
342
+ import fs5 from "fs-extra";
343
+ import path7 from "path";
344
+ import chalk4 from "chalk";
345
+ var ENTRY_FILE_NAMES2 = ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"];
346
+ function findEntryPoint2(basePath) {
347
+ for (const filename of ENTRY_FILE_NAMES2) {
348
+ const entryPath = path7.join(basePath, filename);
349
+ if (fs5.existsSync(entryPath)) {
350
+ return entryPath;
351
+ }
352
+ }
353
+ if (fs5.existsSync(basePath) && fs5.statSync(basePath).isFile()) {
354
+ return basePath;
355
+ }
356
+ return null;
357
+ }
358
+ function getPluginEntryPoints2(options) {
359
+ const entries = {};
360
+ const configPath = findEntryPoint2(options.configEntry);
361
+ if (configPath) {
362
+ entries["config"] = configPath;
363
+ } else {
364
+ console.log(chalk4.yellow(` \u26A0 Config entry not found: ${options.configEntry}`));
365
+ }
366
+ const desktopPath = findEntryPoint2(options.desktopEntry);
367
+ if (desktopPath) {
368
+ entries["desktop"] = desktopPath;
369
+ } else {
370
+ console.log(chalk4.yellow(` \u26A0 Desktop entry not found: ${options.desktopEntry}`));
371
+ }
372
+ return entries;
373
+ }
374
+ async function pluginDev(options = {}) {
375
+ const {
376
+ configEntry = "src/config",
377
+ desktopEntry = "src/desktop",
378
+ outDir = PLUGIN_DEVELOPMENT_DIRECTORY,
379
+ certDir = WORKSPACE_DIRECTORY,
380
+ port = DEFAULT_PORT,
381
+ viteConfig = {}
382
+ } = options;
383
+ console.log(chalk4.blue("\u{1F680} Starting kintone plugin development server..."));
384
+ const outputDir = path7.resolve(outDir);
385
+ const certDirPath = path7.resolve(certDir);
386
+ if (!hasCertificates(certDirPath)) {
387
+ console.log(chalk4.yellow("\u{1F4DC} SSL certificates not found. Generating..."));
388
+ try {
389
+ await generateCert(certDirPath);
390
+ console.log(chalk4.green("\u2705 SSL certificates generated successfully"));
391
+ } catch (error) {
392
+ console.log(
393
+ chalk4.red("\u274C Failed to generate SSL certificates. Make sure mkcert is installed.")
394
+ );
395
+ console.log(chalk4.gray(" Install mkcert: https://github.com/FiloSottile/mkcert"));
396
+ throw error;
397
+ }
398
+ }
399
+ const entries = getPluginEntryPoints2({
400
+ configEntry: path7.resolve(configEntry),
401
+ desktopEntry: path7.resolve(desktopEntry)
402
+ });
403
+ if (Object.keys(entries).length === 0) {
404
+ throw new Error("No entry points found for plugin. Check configEntry and desktopEntry paths.");
405
+ }
406
+ console.log(chalk4.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
407
+ await fs5.ensureDir(outputDir);
408
+ const { key, cert } = loadCertificates(certDirPath);
409
+ const config = createViteConfig({
410
+ ...viteConfig,
411
+ mode: "development",
412
+ build: {
413
+ ...viteConfig.build,
414
+ rollupOptions: {
415
+ ...viteConfig.build?.rollupOptions,
416
+ input: entries,
417
+ output: {
418
+ entryFileNames: "[name].js",
419
+ chunkFileNames: "chunks/[name].js",
420
+ assetFileNames: "[name].[ext]",
421
+ ...viteConfig.build?.rollupOptions?.output
422
+ }
423
+ },
424
+ outDir: outputDir,
425
+ sourcemap: "inline",
426
+ watch: {}
427
+ },
428
+ server: {
429
+ ...viteConfig.server,
430
+ port,
431
+ https: { key, cert }
432
+ }
433
+ });
434
+ console.log(chalk4.gray(" Building..."));
435
+ await viteBuild4(config);
436
+ const server = await createServer2({
437
+ ...config,
438
+ root: outputDir,
439
+ server: {
440
+ port,
441
+ https: { key, cert }
442
+ }
443
+ });
444
+ await server.listen();
445
+ console.log(chalk4.green(`
446
+ \u2728 Plugin development server ready!`));
447
+ console.log(chalk4.cyan(` Local: https://localhost:${port}`));
448
+ console.log(chalk4.gray(` Output: ${outputDir}`));
449
+ console.log(chalk4.gray(` Files: config.js, desktop.js`));
450
+ console.log(chalk4.gray("\n Watching for changes...\n"));
451
+ const chokidar = await import("chokidar");
452
+ const watchPaths = [
453
+ `${path7.dirname(configEntry)}/**/*.{ts,tsx,js,jsx,css,scss}`,
454
+ `${path7.dirname(desktopEntry)}/**/*.{ts,tsx,js,jsx,css,scss}`
455
+ ];
456
+ const watcher = chokidar.watch(watchPaths, {
457
+ ignored: /node_modules/,
458
+ persistent: true
459
+ });
460
+ const rebuild = async () => {
461
+ console.log(chalk4.gray(" Rebuilding..."));
462
+ await viteBuild4(config);
463
+ };
464
+ watcher.on("change", rebuild);
465
+ watcher.on("add", rebuild);
466
+ watcher.on("unlink", rebuild);
467
+ }
468
+
469
+ // src/index.ts
470
+ program.name("k2-vite").version("0.1.0").description("\u{1F373} k2-vite - Minimal kintone development environment with Vite");
471
+ program.command("build").description("Build the project for production").option("-i, --input <dir>", "Input directory", "src").option("-o, --outdir <dir>", "Output directory", PRODUCTION_DIRECTORY).action(async (options) => {
472
+ try {
473
+ await build({
474
+ input: options.input,
475
+ outDir: options.outdir
476
+ });
477
+ } catch (error) {
478
+ console.error(error);
479
+ process.exit(1);
480
+ }
481
+ });
482
+ program.command("dev").description("Start development server with HMR").option("-i, --input <dir>", "Input directory", "src").option("-o, --outdir <dir>", "Output directory", DEVELOPMENT_DIRECTORY).option("-c, --certdir <dir>", "SSL certificate directory", WORKSPACE_DIRECTORY).option("-p, --port <number>", "Port number", String(DEFAULT_PORT)).action(async (options) => {
483
+ try {
484
+ await dev({
485
+ input: options.input,
486
+ outDir: options.outdir,
487
+ certDir: options.certdir,
488
+ port: parseInt(options.port, 10)
489
+ });
490
+ } catch (error) {
491
+ console.error(error);
492
+ process.exit(1);
493
+ }
494
+ });
495
+ program.command("plugin:build").description("Build kintone plugin for production").option("--config <path>", "Config entry path", "src/config").option("--desktop <path>", "Desktop entry path", "src/desktop").option("-o, --outdir <dir>", "Output directory", PLUGIN_PRODUCTION_DIRECTORY).action(async (options) => {
496
+ try {
497
+ await pluginBuild({
498
+ configEntry: options.config,
499
+ desktopEntry: options.desktop,
500
+ outDir: options.outdir
501
+ });
502
+ } catch (error) {
503
+ console.error(error);
504
+ process.exit(1);
505
+ }
506
+ });
507
+ program.command("plugin:dev").description("Start kintone plugin development server").option("--config <path>", "Config entry path", "src/config").option("--desktop <path>", "Desktop entry path", "src/desktop").option("-o, --outdir <dir>", "Output directory", PLUGIN_DEVELOPMENT_DIRECTORY).option("-c, --certdir <dir>", "SSL certificate directory", WORKSPACE_DIRECTORY).option("-p, --port <number>", "Port number", String(DEFAULT_PORT)).action(async (options) => {
508
+ try {
509
+ await pluginDev({
510
+ configEntry: options.config,
511
+ desktopEntry: options.desktop,
512
+ outDir: options.outdir,
513
+ certDir: options.certdir,
514
+ port: parseInt(options.port, 10)
515
+ });
516
+ } catch (error) {
517
+ console.error(error);
518
+ process.exit(1);
519
+ }
520
+ });
521
+ program.parse(process.argv);
522
+ export {
523
+ CERT_FILENAME,
524
+ CERT_KEY_FILENAME,
525
+ DEFAULT_PORT,
526
+ DEVELOPMENT_DIRECTORY,
527
+ PLUGIN_DEVELOPMENT_DIRECTORY,
528
+ PLUGIN_PRODUCTION_DIRECTORY,
529
+ PLUGIN_WORKSPACE_DIRECTORY,
530
+ PRODUCTION_DIRECTORY,
531
+ WORKSPACE_DIRECTORY,
532
+ build,
533
+ createViteConfig,
534
+ dev,
535
+ generateCert,
536
+ hasCertificates,
537
+ loadCertificates,
538
+ pluginBuild,
539
+ pluginDev
540
+ };
541
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/build.ts","../src/lib/vite.ts","../src/lib/constants.ts","../src/commands/dev.ts","../src/lib/cert.ts","../src/commands/plugin-build.ts","../src/commands/plugin-dev.ts"],"sourcesContent":["#!/usr/bin/env node\r\nimport { program } from 'commander';\r\nimport { build } from './commands/build.js';\r\nimport { dev } from './commands/dev.js';\r\nimport { pluginBuild } from './commands/plugin-build.js';\r\nimport { pluginDev } from './commands/plugin-dev.js';\r\nimport {\r\n PRODUCTION_DIRECTORY,\r\n DEVELOPMENT_DIRECTORY,\r\n PLUGIN_PRODUCTION_DIRECTORY,\r\n PLUGIN_DEVELOPMENT_DIRECTORY,\r\n WORKSPACE_DIRECTORY,\r\n DEFAULT_PORT,\r\n} from './lib/constants.js';\r\n\r\n// CLI定義\r\nprogram\r\n .name('k2-vite')\r\n .version('0.1.0')\r\n .description('🍳 k2-vite - Minimal kintone development environment with Vite');\r\n\r\n// build コマンド\r\nprogram\r\n .command('build')\r\n .description('Build the project for production')\r\n .option('-i, --input <dir>', 'Input directory', 'src')\r\n .option('-o, --outdir <dir>', 'Output directory', PRODUCTION_DIRECTORY)\r\n .action(async (options) => {\r\n try {\r\n await build({\r\n input: options.input,\r\n outDir: options.outdir,\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// dev コマンド\r\nprogram\r\n .command('dev')\r\n .description('Start development server with HMR')\r\n .option('-i, --input <dir>', 'Input directory', 'src')\r\n .option('-o, --outdir <dir>', 'Output directory', DEVELOPMENT_DIRECTORY)\r\n .option('-c, --certdir <dir>', 'SSL certificate directory', WORKSPACE_DIRECTORY)\r\n .option('-p, --port <number>', 'Port number', String(DEFAULT_PORT))\r\n .action(async (options) => {\r\n try {\r\n await dev({\r\n input: options.input,\r\n outDir: options.outdir,\r\n certDir: options.certdir,\r\n port: parseInt(options.port, 10),\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// plugin:build コマンド\r\nprogram\r\n .command('plugin:build')\r\n .description('Build kintone plugin for production')\r\n .option('--config <path>', 'Config entry path', 'src/config')\r\n .option('--desktop <path>', 'Desktop entry path', 'src/desktop')\r\n .option('-o, --outdir <dir>', 'Output directory', PLUGIN_PRODUCTION_DIRECTORY)\r\n .action(async (options) => {\r\n try {\r\n await pluginBuild({\r\n configEntry: options.config,\r\n desktopEntry: options.desktop,\r\n outDir: options.outdir,\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n// plugin:dev コマンド\r\nprogram\r\n .command('plugin:dev')\r\n .description('Start kintone plugin development server')\r\n .option('--config <path>', 'Config entry path', 'src/config')\r\n .option('--desktop <path>', 'Desktop entry path', 'src/desktop')\r\n .option('-o, --outdir <dir>', 'Output directory', PLUGIN_DEVELOPMENT_DIRECTORY)\r\n .option('-c, --certdir <dir>', 'SSL certificate directory', WORKSPACE_DIRECTORY)\r\n .option('-p, --port <number>', 'Port number', String(DEFAULT_PORT))\r\n .action(async (options) => {\r\n try {\r\n await pluginDev({\r\n configEntry: options.config,\r\n desktopEntry: options.desktop,\r\n outDir: options.outdir,\r\n certDir: options.certdir,\r\n port: parseInt(options.port, 10),\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n process.exit(1);\r\n }\r\n });\r\n\r\nprogram.parse(process.argv);\r\n\r\n// JavaScript API としてもエクスポート\r\nexport { build } from './commands/build.js';\r\nexport { dev } from './commands/dev.js';\r\nexport { pluginBuild } from './commands/plugin-build.js';\r\nexport { pluginDev } from './commands/plugin-dev.js';\r\nexport { createViteConfig } from './lib/vite.js';\r\nexport { generateCert, hasCertificates, loadCertificates } from './lib/cert.js';\r\nexport * from './lib/constants.js';\r\nexport type { BuildOptions } from './commands/build.js';\r\nexport type { DevOptions } from './commands/dev.js';\r\nexport type { PluginBuildOptions } from './commands/plugin-build.js';\r\nexport type { PluginDevOptions } from './commands/plugin-dev.js';\r\n","import { build as viteBuild, type InlineConfig } from 'vite';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { createViteConfig } from '../lib/vite.js';\nimport { PRODUCTION_DIRECTORY } from '../lib/constants.js';\n\nexport interface BuildOptions {\n /** 入力ディレクトリ(デフォルト: src) */\n input?: string;\n /** 出力ディレクトリ(デフォルト: .k2/prod) */\n outDir?: string;\n /** 追加のVite設定 */\n viteConfig?: Partial<InlineConfig>;\n}\n\n/**\n * エントリーポイントを取得する\n * src/{appName}/index.ts から {appName}.js を出力するためのマッピング\n */\nfunction getEntryPoints(inputDir: string): Record<string, string> {\n const entries: Record<string, string> = {};\n\n if (!fs.existsSync(inputDir)) {\n throw new Error(`Input directory not found: ${inputDir}`);\n }\n\n const dirs = fs.readdirSync(inputDir, { withFileTypes: true });\n\n for (const dirent of dirs) {\n if (!dirent.isDirectory()) continue;\n\n const dirName = dirent.name;\n const dirPath = path.join(inputDir, dirName);\n\n // index.ts, index.js, index.mjs のいずれかを探す\n for (const filename of ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs']) {\n const entryPath = path.join(dirPath, filename);\n if (fs.existsSync(entryPath)) {\n entries[dirName] = entryPath;\n break;\n }\n }\n }\n\n return entries;\n}\n\n/**\n * プロジェクトをビルドする\n */\nexport async function build(options: BuildOptions = {}): Promise<void> {\n const { input = 'src', outDir = PRODUCTION_DIRECTORY, viteConfig = {} } = options;\n\n console.log(chalk.blue('🔨 Building for production...'));\n\n const inputDir = path.resolve(input);\n const outputDir = path.resolve(outDir);\n\n const entries = getEntryPoints(inputDir);\n\n if (Object.keys(entries).length === 0) {\n throw new Error(`No entry points found in ${inputDir}`);\n }\n\n console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(', ')}`));\n\n const config = createViteConfig({\n ...viteConfig,\n mode: 'production',\n build: {\n ...viteConfig.build,\n rollupOptions: {\n ...viteConfig.build?.rollupOptions,\n input: entries,\n output: {\n entryFileNames: '[name].js',\n chunkFileNames: 'chunks/[name]-[hash].js',\n assetFileNames: '[name].[ext]',\n ...viteConfig.build?.rollupOptions?.output,\n },\n },\n outDir: outputDir,\n emptyOutDir: true,\n },\n });\n\n await viteBuild(config);\n\n console.log(chalk.green(`✨ Build complete! Output: ${outputDir}`));\n}\n\nexport default build;\n","import type { InlineConfig } from 'vite';\nimport path from 'path';\n\n/**\n * Vite設定を生成する\n */\nexport const createViteConfig = (config: Partial<InlineConfig> = {}): InlineConfig => {\n const plugins: InlineConfig['plugins'] = [...(config.plugins ?? [])];\n\n // vite-tsconfig-pathsがインストールされている場合は自動で追加\n try {\n const tsconfigPaths = require('vite-tsconfig-paths');\n plugins.push(tsconfigPaths.default ? tsconfigPaths.default() : tsconfigPaths());\n } catch {\n // vite-tsconfig-paths is optional\n }\n\n return {\n ...config,\n configFile: false,\n build: {\n ...config.build,\n cssCodeSplit: true,\n rollupOptions: {\n ...config.build?.rollupOptions,\n onwarn: (warning, warn) => {\n // \"use client\"などのディレクティブ警告を無視\n if (['MODULE_LEVEL_DIRECTIVE'].includes(warning.code ?? '')) {\n return;\n }\n warn(warning);\n },\n },\n },\n plugins,\n resolve: {\n ...config.resolve,\n alias: {\n '@': path.resolve(process.cwd(), 'src'),\n ...config.resolve?.alias,\n },\n },\n };\n};\n\nexport type { InlineConfig };\n","import path from 'path';\n\n/** k2-vite の作業ディレクトリ */\nexport const WORKSPACE_DIRECTORY = '.k2';\n\n/** 開発時の出力ディレクトリ */\nexport const DEVELOPMENT_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'dev');\n\n/** 本番ビルドの出力ディレクトリ */\nexport const PRODUCTION_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'prod');\n\n/** プラグイン用の作業ディレクトリ */\nexport const PLUGIN_WORKSPACE_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'plugin');\n\n/** プラグイン開発時の出力ディレクトリ */\nexport const PLUGIN_DEVELOPMENT_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'dev');\n\n/** プラグイン本番ビルドの出力ディレクトリ */\nexport const PLUGIN_PRODUCTION_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'prod');\n\n/** ローカルサーバーのデフォルトポート番号 */\nexport const DEFAULT_PORT = 32767;\n\n/** SSL証明書のファイル名 */\nexport const CERT_KEY_FILENAME = 'localhost-key.pem';\nexport const CERT_FILENAME = 'localhost-cert.pem';\n","import { build as viteBuild, createServer, type InlineConfig } from 'vite';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { createViteConfig } from '../lib/vite.js';\nimport { loadCertificates, hasCertificates, generateCert } from '../lib/cert.js';\nimport { DEVELOPMENT_DIRECTORY, WORKSPACE_DIRECTORY, DEFAULT_PORT } from '../lib/constants.js';\n\nexport interface DevOptions {\n /** 入力ディレクトリ(デフォルト: src) */\n input?: string;\n /** 出力ディレクトリ(デフォルト: .k2/dev) */\n outDir?: string;\n /** 証明書ディレクトリ(デフォルト: .k2) */\n certDir?: string;\n /** ポート番号(デフォルト: 32767) */\n port?: number;\n /** 追加のVite設定 */\n viteConfig?: Partial<InlineConfig>;\n}\n\n/**\n * エントリーポイントを取得する\n */\nfunction getEntryPoints(inputDir: string): Record<string, string> {\n const entries: Record<string, string> = {};\n\n if (!fs.existsSync(inputDir)) {\n throw new Error(`Input directory not found: ${inputDir}`);\n }\n\n const dirs = fs.readdirSync(inputDir, { withFileTypes: true });\n\n for (const dirent of dirs) {\n if (!dirent.isDirectory()) continue;\n\n const dirName = dirent.name;\n const dirPath = path.join(inputDir, dirName);\n\n for (const filename of ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs']) {\n const entryPath = path.join(dirPath, filename);\n if (fs.existsSync(entryPath)) {\n entries[dirName] = entryPath;\n break;\n }\n }\n }\n\n return entries;\n}\n\n/**\n * 開発サーバーを起動する\n */\nexport async function dev(options: DevOptions = {}): Promise<void> {\n const {\n input = 'src',\n outDir = DEVELOPMENT_DIRECTORY,\n certDir = WORKSPACE_DIRECTORY,\n port = DEFAULT_PORT,\n viteConfig = {},\n } = options;\n\n console.log(chalk.blue('🚀 Starting development server...'));\n\n const inputDir = path.resolve(input);\n const outputDir = path.resolve(outDir);\n const certDirPath = path.resolve(certDir);\n\n // SSL証明書の確認\n if (!hasCertificates(certDirPath)) {\n console.log(chalk.yellow('📜 SSL certificates not found. Generating...'));\n try {\n await generateCert(certDirPath);\n console.log(chalk.green('✅ SSL certificates generated successfully'));\n } catch (error) {\n console.log(\n chalk.red('❌ Failed to generate SSL certificates. Make sure mkcert is installed.')\n );\n console.log(chalk.gray(' Install mkcert: https://github.com/FiloSottile/mkcert'));\n throw error;\n }\n }\n\n const entries = getEntryPoints(inputDir);\n\n if (Object.keys(entries).length === 0) {\n throw new Error(`No entry points found in ${inputDir}`);\n }\n\n console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(', ')}`));\n\n await fs.ensureDir(outputDir);\n\n const { key, cert } = loadCertificates(certDirPath);\n\n const config = createViteConfig({\n ...viteConfig,\n mode: 'development',\n build: {\n ...viteConfig.build,\n rollupOptions: {\n ...viteConfig.build?.rollupOptions,\n input: entries,\n output: {\n entryFileNames: '[name].js',\n chunkFileNames: 'chunks/[name].js',\n assetFileNames: '[name].[ext]',\n ...viteConfig.build?.rollupOptions?.output,\n },\n },\n outDir: outputDir,\n sourcemap: 'inline',\n watch: {},\n },\n server: {\n ...viteConfig.server,\n port,\n https: { key, cert },\n },\n });\n\n // 初回ビルド\n console.log(chalk.gray(' Building...'));\n await viteBuild(config);\n\n // 開発サーバー起動\n const server = await createServer({\n ...config,\n root: outputDir,\n server: {\n port,\n https: { key, cert },\n },\n });\n\n await server.listen();\n\n console.log(chalk.green(`\\n✨ Development server ready!`));\n console.log(chalk.cyan(` Local: https://localhost:${port}`));\n console.log(chalk.gray(` Output: ${outputDir}`));\n console.log(chalk.gray('\\n Watching for changes...\\n'));\n\n // ファイル監視してビルド\n const chokidar = await import('chokidar');\n const watcher = chokidar.watch([`${input}/**/*.{ts,tsx,js,jsx,css,scss}`], {\n ignored: /node_modules/,\n persistent: true,\n });\n\n const rebuild = async () => {\n console.log(chalk.gray(' Rebuilding...'));\n await viteBuild(config);\n };\n\n watcher.on('change', rebuild);\n watcher.on('add', rebuild);\n watcher.on('unlink', rebuild);\n}\n\nexport default dev;\n","import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport { CERT_KEY_FILENAME, CERT_FILENAME } from './constants.js';\n\nconst execAsync = promisify(exec);\n\n/**\n * mkcertを使用してSSL証明書を生成する\n * @param outDir 証明書の出力先ディレクトリ\n */\nexport async function generateCert(outDir: string): Promise<{ stdout: string }> {\n await fs.ensureDir(outDir);\n\n const { stdout } = await execAsync('mkcert localhost 127.0.0.1 ::1');\n\n const files = [\n { input: 'localhost+2.pem', output: CERT_FILENAME },\n { input: 'localhost+2-key.pem', output: CERT_KEY_FILENAME },\n ];\n\n for (const { input, output } of files) {\n if (fs.existsSync(input)) {\n await fs.move(input, path.join(outDir, output), { overwrite: true });\n }\n }\n\n return { stdout };\n}\n\n/**\n * SSL証明書が存在するか確認する\n * @param certDir 証明書のディレクトリ\n */\nexport function hasCertificates(certDir: string): boolean {\n return (\n fs.existsSync(path.join(certDir, CERT_KEY_FILENAME)) &&\n fs.existsSync(path.join(certDir, CERT_FILENAME))\n );\n}\n\n/**\n * SSL証明書を読み込む\n * @param certDir 証明書のディレクトリ\n */\nexport function loadCertificates(certDir: string): { key: Buffer; cert: Buffer } {\n return {\n key: fs.readFileSync(path.join(certDir, CERT_KEY_FILENAME)),\n cert: fs.readFileSync(path.join(certDir, CERT_FILENAME)),\n };\n}\n","import { build as viteBuild, type InlineConfig } from 'vite';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { createViteConfig } from '../lib/vite.js';\nimport { PLUGIN_PRODUCTION_DIRECTORY } from '../lib/constants.js';\n\nexport interface PluginBuildOptions {\n /** 設定画面のエントリーポイント(デフォルト: src/config/index.ts) */\n configEntry?: string;\n /** PC用画面のエントリーポイント(デフォルト: src/desktop/index.ts) */\n desktopEntry?: string;\n /** 出力ディレクトリ(デフォルト: .k2/plugin/prod) */\n outDir?: string;\n /** 追加のVite設定 */\n viteConfig?: Partial<InlineConfig>;\n}\n\n/** プラグイン用のエントリーポイントファイル名候補 */\nconst ENTRY_FILE_NAMES = ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs'];\n\n/**\n * エントリーポイントを探す\n */\nfunction findEntryPoint(basePath: string): string | null {\n for (const filename of ENTRY_FILE_NAMES) {\n const entryPath = path.join(basePath, filename);\n if (fs.existsSync(entryPath)) {\n return entryPath;\n }\n }\n // ディレクトリではなく直接ファイルが指定された場合\n if (fs.existsSync(basePath) && fs.statSync(basePath).isFile()) {\n return basePath;\n }\n return null;\n}\n\n/**\n * プラグイン用エントリーポイントを取得する\n * config.js と desktop.js を出力するためのマッピング\n */\nfunction getPluginEntryPoints(options: {\n configEntry: string;\n desktopEntry: string;\n}): Record<string, string> {\n const entries: Record<string, string> = {};\n\n const configPath = findEntryPoint(options.configEntry);\n if (configPath) {\n entries['config'] = configPath;\n } else {\n console.log(chalk.yellow(` ⚠ Config entry not found: ${options.configEntry}`));\n }\n\n const desktopPath = findEntryPoint(options.desktopEntry);\n if (desktopPath) {\n entries['desktop'] = desktopPath;\n } else {\n console.log(chalk.yellow(` ⚠ Desktop entry not found: ${options.desktopEntry}`));\n }\n\n return entries;\n}\n\n/**\n * kintoneプラグインをビルドする\n */\nexport async function pluginBuild(options: PluginBuildOptions = {}): Promise<void> {\n const {\n configEntry = 'src/config',\n desktopEntry = 'src/desktop',\n outDir = PLUGIN_PRODUCTION_DIRECTORY,\n viteConfig = {},\n } = options;\n\n console.log(chalk.blue('🔨 Building kintone plugin for production...'));\n\n const outputDir = path.resolve(outDir);\n\n const entries = getPluginEntryPoints({\n configEntry: path.resolve(configEntry),\n desktopEntry: path.resolve(desktopEntry),\n });\n\n if (Object.keys(entries).length === 0) {\n throw new Error('No entry points found for plugin. Check configEntry and desktopEntry paths.');\n }\n\n console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(', ')}`));\n\n const config = createViteConfig({\n ...viteConfig,\n mode: 'production',\n build: {\n ...viteConfig.build,\n rollupOptions: {\n ...viteConfig.build?.rollupOptions,\n input: entries,\n output: {\n entryFileNames: '[name].js',\n chunkFileNames: 'chunks/[name]-[hash].js',\n assetFileNames: '[name].[ext]',\n ...viteConfig.build?.rollupOptions?.output,\n },\n },\n outDir: outputDir,\n emptyOutDir: true,\n },\n });\n\n await viteBuild(config);\n\n console.log(chalk.green(`✨ Plugin build complete! Output: ${outputDir}`));\n console.log(chalk.gray(` - config.js${entries['config'] ? '' : ' (skipped)'}`));\n console.log(chalk.gray(` - desktop.js${entries['desktop'] ? '' : ' (skipped)'}`));\n}\n\nexport default pluginBuild;\n","import { build as viteBuild, createServer, type InlineConfig } from 'vite';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { createViteConfig } from '../lib/vite.js';\nimport { loadCertificates, hasCertificates, generateCert } from '../lib/cert.js';\nimport {\n PLUGIN_DEVELOPMENT_DIRECTORY,\n WORKSPACE_DIRECTORY,\n DEFAULT_PORT,\n} from '../lib/constants.js';\n\nexport interface PluginDevOptions {\n /** 設定画面のエントリーポイント(デフォルト: src/config/index.ts) */\n configEntry?: string;\n /** PC用画面のエントリーポイント(デフォルト: src/desktop/index.ts) */\n desktopEntry?: string;\n /** 出力ディレクトリ(デフォルト: .k2/plugin/dev) */\n outDir?: string;\n /** 証明書ディレクトリ(デフォルト: .k2) */\n certDir?: string;\n /** ポート番号(デフォルト: 32767) */\n port?: number;\n /** 追加のVite設定 */\n viteConfig?: Partial<InlineConfig>;\n}\n\n/** プラグイン用のエントリーポイントファイル名候補 */\nconst ENTRY_FILE_NAMES = ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs'];\n\n/**\n * エントリーポイントを探す\n */\nfunction findEntryPoint(basePath: string): string | null {\n for (const filename of ENTRY_FILE_NAMES) {\n const entryPath = path.join(basePath, filename);\n if (fs.existsSync(entryPath)) {\n return entryPath;\n }\n }\n if (fs.existsSync(basePath) && fs.statSync(basePath).isFile()) {\n return basePath;\n }\n return null;\n}\n\n/**\n * プラグイン用エントリーポイントを取得する\n */\nfunction getPluginEntryPoints(options: {\n configEntry: string;\n desktopEntry: string;\n}): Record<string, string> {\n const entries: Record<string, string> = {};\n\n const configPath = findEntryPoint(options.configEntry);\n if (configPath) {\n entries['config'] = configPath;\n } else {\n console.log(chalk.yellow(` ⚠ Config entry not found: ${options.configEntry}`));\n }\n\n const desktopPath = findEntryPoint(options.desktopEntry);\n if (desktopPath) {\n entries['desktop'] = desktopPath;\n } else {\n console.log(chalk.yellow(` ⚠ Desktop entry not found: ${options.desktopEntry}`));\n }\n\n return entries;\n}\n\n/**\n * kintoneプラグイン開発サーバーを起動する\n */\nexport async function pluginDev(options: PluginDevOptions = {}): Promise<void> {\n const {\n configEntry = 'src/config',\n desktopEntry = 'src/desktop',\n outDir = PLUGIN_DEVELOPMENT_DIRECTORY,\n certDir = WORKSPACE_DIRECTORY,\n port = DEFAULT_PORT,\n viteConfig = {},\n } = options;\n\n console.log(chalk.blue('🚀 Starting kintone plugin development server...'));\n\n const outputDir = path.resolve(outDir);\n const certDirPath = path.resolve(certDir);\n\n // SSL証明書の確認\n if (!hasCertificates(certDirPath)) {\n console.log(chalk.yellow('📜 SSL certificates not found. Generating...'));\n try {\n await generateCert(certDirPath);\n console.log(chalk.green('✅ SSL certificates generated successfully'));\n } catch (error) {\n console.log(\n chalk.red('❌ Failed to generate SSL certificates. Make sure mkcert is installed.')\n );\n console.log(chalk.gray(' Install mkcert: https://github.com/FiloSottile/mkcert'));\n throw error;\n }\n }\n\n const entries = getPluginEntryPoints({\n configEntry: path.resolve(configEntry),\n desktopEntry: path.resolve(desktopEntry),\n });\n\n if (Object.keys(entries).length === 0) {\n throw new Error('No entry points found for plugin. Check configEntry and desktopEntry paths.');\n }\n\n console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(', ')}`));\n\n await fs.ensureDir(outputDir);\n\n const { key, cert } = loadCertificates(certDirPath);\n\n const config = createViteConfig({\n ...viteConfig,\n mode: 'development',\n build: {\n ...viteConfig.build,\n rollupOptions: {\n ...viteConfig.build?.rollupOptions,\n input: entries,\n output: {\n entryFileNames: '[name].js',\n chunkFileNames: 'chunks/[name].js',\n assetFileNames: '[name].[ext]',\n ...viteConfig.build?.rollupOptions?.output,\n },\n },\n outDir: outputDir,\n sourcemap: 'inline',\n watch: {},\n },\n server: {\n ...viteConfig.server,\n port,\n https: { key, cert },\n },\n });\n\n // 初回ビルド\n console.log(chalk.gray(' Building...'));\n await viteBuild(config);\n\n // 開発サーバー起動\n const server = await createServer({\n ...config,\n root: outputDir,\n server: {\n port,\n https: { key, cert },\n },\n });\n\n await server.listen();\n\n console.log(chalk.green(`\\n✨ Plugin development server ready!`));\n console.log(chalk.cyan(` Local: https://localhost:${port}`));\n console.log(chalk.gray(` Output: ${outputDir}`));\n console.log(chalk.gray(` Files: config.js, desktop.js`));\n console.log(chalk.gray('\\n Watching for changes...\\n'));\n\n // ファイル監視してビルド\n const chokidar = await import('chokidar');\n const watchPaths = [\n `${path.dirname(configEntry)}/**/*.{ts,tsx,js,jsx,css,scss}`,\n `${path.dirname(desktopEntry)}/**/*.{ts,tsx,js,jsx,css,scss}`,\n ];\n\n const watcher = chokidar.watch(watchPaths, {\n ignored: /node_modules/,\n persistent: true,\n });\n\n const rebuild = async () => {\n console.log(chalk.gray(' Rebuilding...'));\n await viteBuild(config);\n };\n\n watcher.on('change', rebuild);\n watcher.on('add', rebuild);\n watcher.on('unlink', rebuild);\n}\n\nexport default pluginDev;\n"],"mappings":"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","names":["path","path","path","viteBuild","fs","path","chalk","fs","path","fs","path","getEntryPoints","fs","path","chalk","viteBuild","viteBuild","fs","path","chalk","path","fs","chalk","viteBuild","viteBuild","createServer","fs","path","chalk","ENTRY_FILE_NAMES","findEntryPoint","path","fs","getPluginEntryPoints","chalk","viteBuild","createServer"]}