@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.
@@ -0,0 +1,135 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ // src/commands/plugin-build.ts
9
+ import { build as viteBuild } from "vite";
10
+ import fs from "fs-extra";
11
+ import path3 from "path";
12
+ import chalk from "chalk";
13
+
14
+ // src/lib/vite.ts
15
+ import path from "path";
16
+ var createViteConfig = (config = {}) => {
17
+ const plugins = [...config.plugins ?? []];
18
+ try {
19
+ const tsconfigPaths = __require("vite-tsconfig-paths");
20
+ plugins.push(tsconfigPaths.default ? tsconfigPaths.default() : tsconfigPaths());
21
+ } catch {
22
+ }
23
+ return {
24
+ ...config,
25
+ configFile: false,
26
+ build: {
27
+ ...config.build,
28
+ cssCodeSplit: true,
29
+ rollupOptions: {
30
+ ...config.build?.rollupOptions,
31
+ onwarn: (warning, warn) => {
32
+ if (["MODULE_LEVEL_DIRECTIVE"].includes(warning.code ?? "")) {
33
+ return;
34
+ }
35
+ warn(warning);
36
+ }
37
+ }
38
+ },
39
+ plugins,
40
+ resolve: {
41
+ ...config.resolve,
42
+ alias: {
43
+ "@": path.resolve(process.cwd(), "src"),
44
+ ...config.resolve?.alias
45
+ }
46
+ }
47
+ };
48
+ };
49
+
50
+ // src/lib/constants.ts
51
+ import path2 from "path";
52
+ var WORKSPACE_DIRECTORY = ".k2";
53
+ var DEVELOPMENT_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "dev");
54
+ var PRODUCTION_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "prod");
55
+ var PLUGIN_WORKSPACE_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "plugin");
56
+ var PLUGIN_DEVELOPMENT_DIRECTORY = path2.join(PLUGIN_WORKSPACE_DIRECTORY, "dev");
57
+ var PLUGIN_PRODUCTION_DIRECTORY = path2.join(PLUGIN_WORKSPACE_DIRECTORY, "prod");
58
+
59
+ // src/commands/plugin-build.ts
60
+ var ENTRY_FILE_NAMES = ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"];
61
+ function findEntryPoint(basePath) {
62
+ for (const filename of ENTRY_FILE_NAMES) {
63
+ const entryPath = path3.join(basePath, filename);
64
+ if (fs.existsSync(entryPath)) {
65
+ return entryPath;
66
+ }
67
+ }
68
+ if (fs.existsSync(basePath) && fs.statSync(basePath).isFile()) {
69
+ return basePath;
70
+ }
71
+ return null;
72
+ }
73
+ function getPluginEntryPoints(options) {
74
+ const entries = {};
75
+ const configPath = findEntryPoint(options.configEntry);
76
+ if (configPath) {
77
+ entries["config"] = configPath;
78
+ } else {
79
+ console.log(chalk.yellow(` \u26A0 Config entry not found: ${options.configEntry}`));
80
+ }
81
+ const desktopPath = findEntryPoint(options.desktopEntry);
82
+ if (desktopPath) {
83
+ entries["desktop"] = desktopPath;
84
+ } else {
85
+ console.log(chalk.yellow(` \u26A0 Desktop entry not found: ${options.desktopEntry}`));
86
+ }
87
+ return entries;
88
+ }
89
+ async function pluginBuild(options = {}) {
90
+ const {
91
+ configEntry = "src/config",
92
+ desktopEntry = "src/desktop",
93
+ outDir = PLUGIN_PRODUCTION_DIRECTORY,
94
+ viteConfig = {}
95
+ } = options;
96
+ console.log(chalk.blue("\u{1F528} Building kintone plugin for production..."));
97
+ const outputDir = path3.resolve(outDir);
98
+ const entries = getPluginEntryPoints({
99
+ configEntry: path3.resolve(configEntry),
100
+ desktopEntry: path3.resolve(desktopEntry)
101
+ });
102
+ if (Object.keys(entries).length === 0) {
103
+ throw new Error("No entry points found for plugin. Check configEntry and desktopEntry paths.");
104
+ }
105
+ console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
106
+ const config = createViteConfig({
107
+ ...viteConfig,
108
+ mode: "production",
109
+ build: {
110
+ ...viteConfig.build,
111
+ rollupOptions: {
112
+ ...viteConfig.build?.rollupOptions,
113
+ input: entries,
114
+ output: {
115
+ entryFileNames: "[name].js",
116
+ chunkFileNames: "chunks/[name]-[hash].js",
117
+ assetFileNames: "[name].[ext]",
118
+ ...viteConfig.build?.rollupOptions?.output
119
+ }
120
+ },
121
+ outDir: outputDir,
122
+ emptyOutDir: true
123
+ }
124
+ });
125
+ await viteBuild(config);
126
+ console.log(chalk.green(`\u2728 Plugin build complete! Output: ${outputDir}`));
127
+ console.log(chalk.gray(` - config.js${entries["config"] ? "" : " (skipped)"}`));
128
+ console.log(chalk.gray(` - desktop.js${entries["desktop"] ? "" : " (skipped)"}`));
129
+ }
130
+ var plugin_build_default = pluginBuild;
131
+ export {
132
+ plugin_build_default as default,
133
+ pluginBuild
134
+ };
135
+ //# sourceMappingURL=plugin-build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/plugin-build.ts","../../src/lib/vite.ts","../../src/lib/constants.ts"],"sourcesContent":["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 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"],"mappings":";;;;;;;;AAAA,SAAS,SAAS,iBAAoC;AACtD,OAAO,QAAQ;AACf,OAAOA,WAAU;AACjB,OAAO,WAAW;;;ACFlB,OAAO,UAAU;AAKV,IAAM,mBAAmB,CAAC,SAAgC,CAAC,MAAoB;AACpF,QAAM,UAAmC,CAAC,GAAI,OAAO,WAAW,CAAC,CAAE;AAGnE,MAAI;AACF,UAAM,gBAAgB,UAAQ,qBAAqB;AACnD,YAAQ,KAAK,cAAc,UAAU,cAAc,QAAQ,IAAI,cAAc,CAAC;AAAA,EAChF,QAAQ;AAAA,EAER;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,OAAO;AAAA,MACL,GAAG,OAAO;AAAA,MACV,cAAc;AAAA,MACd,eAAe;AAAA,QACb,GAAG,OAAO,OAAO;AAAA,QACjB,QAAQ,CAAC,SAAS,SAAS;AAEzB,cAAI,CAAC,wBAAwB,EAAE,SAAS,QAAQ,QAAQ,EAAE,GAAG;AAC3D;AAAA,UACF;AACA,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACL,KAAK,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAAA,QACtC,GAAG,OAAO,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;;;AC3CA,OAAOC,WAAU;AAGV,IAAM,sBAAsB;AAG5B,IAAM,wBAAwBA,MAAK,KAAK,qBAAqB,KAAK;AAGlE,IAAM,uBAAuBA,MAAK,KAAK,qBAAqB,MAAM;AAGlE,IAAM,6BAA6BA,MAAK,KAAK,qBAAqB,QAAQ;AAG1E,IAAM,+BAA+BA,MAAK,KAAK,4BAA4B,KAAK;AAGhF,IAAM,8BAA8BA,MAAK,KAAK,4BAA4B,MAAM;;;AFCvF,IAAM,mBAAmB,CAAC,YAAY,aAAa,YAAY,aAAa,WAAW;AAKvF,SAAS,eAAe,UAAiC;AACvD,aAAW,YAAY,kBAAkB;AACvC,UAAM,YAAYC,MAAK,KAAK,UAAU,QAAQ;AAC9C,QAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,GAAG,WAAW,QAAQ,KAAK,GAAG,SAAS,QAAQ,EAAE,OAAO,GAAG;AAC7D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAMA,SAAS,qBAAqB,SAGH;AACzB,QAAM,UAAkC,CAAC;AAEzC,QAAM,aAAa,eAAe,QAAQ,WAAW;AACrD,MAAI,YAAY;AACd,YAAQ,QAAQ,IAAI;AAAA,EACtB,OAAO;AACL,YAAQ,IAAI,MAAM,OAAO,oCAA+B,QAAQ,WAAW,EAAE,CAAC;AAAA,EAChF;AAEA,QAAM,cAAc,eAAe,QAAQ,YAAY;AACvD,MAAI,aAAa;AACf,YAAQ,SAAS,IAAI;AAAA,EACvB,OAAO;AACL,YAAQ,IAAI,MAAM,OAAO,qCAAgC,QAAQ,YAAY,EAAE,CAAC;AAAA,EAClF;AAEA,SAAO;AACT;AAKA,eAAsB,YAAY,UAA8B,CAAC,GAAkB;AACjF,QAAM;AAAA,IACJ,cAAc;AAAA,IACd,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa,CAAC;AAAA,EAChB,IAAI;AAEJ,UAAQ,IAAI,MAAM,KAAK,qDAA8C,CAAC;AAEtE,QAAM,YAAYA,MAAK,QAAQ,MAAM;AAErC,QAAM,UAAU,qBAAqB;AAAA,IACnC,aAAaA,MAAK,QAAQ,WAAW;AAAA,IACrC,cAAcA,MAAK,QAAQ,YAAY;AAAA,EACzC,CAAC;AAED,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,UAAM,IAAI,MAAM,6EAA6E;AAAA,EAC/F;AAEA,UAAQ,IAAI,MAAM,KAAK,mBAAmB,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAE5E,QAAM,SAAS,iBAAiB;AAAA,IAC9B,GAAG;AAAA,IACH,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG,WAAW;AAAA,MACd,eAAe;AAAA,QACb,GAAG,WAAW,OAAO;AAAA,QACrB,OAAO;AAAA,QACP,QAAQ;AAAA,UACN,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,GAAG,WAAW,OAAO,eAAe;AAAA,QACtC;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,MACR,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM;AAEtB,UAAQ,IAAI,MAAM,MAAM,yCAAoC,SAAS,EAAE,CAAC;AACxE,UAAQ,IAAI,MAAM,KAAK,iBAAiB,QAAQ,QAAQ,IAAI,KAAK,YAAY,EAAE,CAAC;AAChF,UAAQ,IAAI,MAAM,KAAK,kBAAkB,QAAQ,SAAS,IAAI,KAAK,YAAY,EAAE,CAAC;AACpF;AAEA,IAAO,uBAAQ;","names":["path","path","path"]}
@@ -0,0 +1,22 @@
1
+ import { InlineConfig } from 'vite';
2
+
3
+ interface PluginDevOptions {
4
+ /** 設定画面のエントリーポイント(デフォルト: src/config/index.ts) */
5
+ configEntry?: string;
6
+ /** PC用画面のエントリーポイント(デフォルト: src/desktop/index.ts) */
7
+ desktopEntry?: string;
8
+ /** 出力ディレクトリ(デフォルト: .k2/plugin/dev) */
9
+ outDir?: string;
10
+ /** 証明書ディレクトリ(デフォルト: .k2) */
11
+ certDir?: string;
12
+ /** ポート番号(デフォルト: 32767) */
13
+ port?: number;
14
+ /** 追加のVite設定 */
15
+ viteConfig?: Partial<InlineConfig>;
16
+ }
17
+ /**
18
+ * kintoneプラグイン開発サーバーを起動する
19
+ */
20
+ declare function pluginDev(options?: PluginDevOptions): Promise<void>;
21
+
22
+ export { type PluginDevOptions, pluginDev as default, pluginDev };
@@ -0,0 +1,223 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ // src/commands/plugin-dev.ts
9
+ import { build as viteBuild, createServer } from "vite";
10
+ import fs2 from "fs-extra";
11
+ import path4 from "path";
12
+ import chalk from "chalk";
13
+
14
+ // src/lib/vite.ts
15
+ import path from "path";
16
+ var createViteConfig = (config = {}) => {
17
+ const plugins = [...config.plugins ?? []];
18
+ try {
19
+ const tsconfigPaths = __require("vite-tsconfig-paths");
20
+ plugins.push(tsconfigPaths.default ? tsconfigPaths.default() : tsconfigPaths());
21
+ } catch {
22
+ }
23
+ return {
24
+ ...config,
25
+ configFile: false,
26
+ build: {
27
+ ...config.build,
28
+ cssCodeSplit: true,
29
+ rollupOptions: {
30
+ ...config.build?.rollupOptions,
31
+ onwarn: (warning, warn) => {
32
+ if (["MODULE_LEVEL_DIRECTIVE"].includes(warning.code ?? "")) {
33
+ return;
34
+ }
35
+ warn(warning);
36
+ }
37
+ }
38
+ },
39
+ plugins,
40
+ resolve: {
41
+ ...config.resolve,
42
+ alias: {
43
+ "@": path.resolve(process.cwd(), "src"),
44
+ ...config.resolve?.alias
45
+ }
46
+ }
47
+ };
48
+ };
49
+
50
+ // src/lib/cert.ts
51
+ import { exec } from "child_process";
52
+ import { promisify } from "util";
53
+ import fs from "fs-extra";
54
+ import path3 from "path";
55
+
56
+ // src/lib/constants.ts
57
+ import path2 from "path";
58
+ var WORKSPACE_DIRECTORY = ".k2";
59
+ var DEVELOPMENT_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "dev");
60
+ var PRODUCTION_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "prod");
61
+ var PLUGIN_WORKSPACE_DIRECTORY = path2.join(WORKSPACE_DIRECTORY, "plugin");
62
+ var PLUGIN_DEVELOPMENT_DIRECTORY = path2.join(PLUGIN_WORKSPACE_DIRECTORY, "dev");
63
+ var PLUGIN_PRODUCTION_DIRECTORY = path2.join(PLUGIN_WORKSPACE_DIRECTORY, "prod");
64
+ var DEFAULT_PORT = 32767;
65
+ var CERT_KEY_FILENAME = "localhost-key.pem";
66
+ var CERT_FILENAME = "localhost-cert.pem";
67
+
68
+ // src/lib/cert.ts
69
+ var execAsync = promisify(exec);
70
+ async function generateCert(outDir) {
71
+ await fs.ensureDir(outDir);
72
+ const { stdout } = await execAsync("mkcert localhost 127.0.0.1 ::1");
73
+ const files = [
74
+ { input: "localhost+2.pem", output: CERT_FILENAME },
75
+ { input: "localhost+2-key.pem", output: CERT_KEY_FILENAME }
76
+ ];
77
+ for (const { input, output } of files) {
78
+ if (fs.existsSync(input)) {
79
+ await fs.move(input, path3.join(outDir, output), { overwrite: true });
80
+ }
81
+ }
82
+ return { stdout };
83
+ }
84
+ function hasCertificates(certDir) {
85
+ return fs.existsSync(path3.join(certDir, CERT_KEY_FILENAME)) && fs.existsSync(path3.join(certDir, CERT_FILENAME));
86
+ }
87
+ function loadCertificates(certDir) {
88
+ return {
89
+ key: fs.readFileSync(path3.join(certDir, CERT_KEY_FILENAME)),
90
+ cert: fs.readFileSync(path3.join(certDir, CERT_FILENAME))
91
+ };
92
+ }
93
+
94
+ // src/commands/plugin-dev.ts
95
+ var ENTRY_FILE_NAMES = ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"];
96
+ function findEntryPoint(basePath) {
97
+ for (const filename of ENTRY_FILE_NAMES) {
98
+ const entryPath = path4.join(basePath, filename);
99
+ if (fs2.existsSync(entryPath)) {
100
+ return entryPath;
101
+ }
102
+ }
103
+ if (fs2.existsSync(basePath) && fs2.statSync(basePath).isFile()) {
104
+ return basePath;
105
+ }
106
+ return null;
107
+ }
108
+ function getPluginEntryPoints(options) {
109
+ const entries = {};
110
+ const configPath = findEntryPoint(options.configEntry);
111
+ if (configPath) {
112
+ entries["config"] = configPath;
113
+ } else {
114
+ console.log(chalk.yellow(` \u26A0 Config entry not found: ${options.configEntry}`));
115
+ }
116
+ const desktopPath = findEntryPoint(options.desktopEntry);
117
+ if (desktopPath) {
118
+ entries["desktop"] = desktopPath;
119
+ } else {
120
+ console.log(chalk.yellow(` \u26A0 Desktop entry not found: ${options.desktopEntry}`));
121
+ }
122
+ return entries;
123
+ }
124
+ async function pluginDev(options = {}) {
125
+ const {
126
+ configEntry = "src/config",
127
+ desktopEntry = "src/desktop",
128
+ outDir = PLUGIN_DEVELOPMENT_DIRECTORY,
129
+ certDir = WORKSPACE_DIRECTORY,
130
+ port = DEFAULT_PORT,
131
+ viteConfig = {}
132
+ } = options;
133
+ console.log(chalk.blue("\u{1F680} Starting kintone plugin development server..."));
134
+ const outputDir = path4.resolve(outDir);
135
+ const certDirPath = path4.resolve(certDir);
136
+ if (!hasCertificates(certDirPath)) {
137
+ console.log(chalk.yellow("\u{1F4DC} SSL certificates not found. Generating..."));
138
+ try {
139
+ await generateCert(certDirPath);
140
+ console.log(chalk.green("\u2705 SSL certificates generated successfully"));
141
+ } catch (error) {
142
+ console.log(
143
+ chalk.red("\u274C Failed to generate SSL certificates. Make sure mkcert is installed.")
144
+ );
145
+ console.log(chalk.gray(" Install mkcert: https://github.com/FiloSottile/mkcert"));
146
+ throw error;
147
+ }
148
+ }
149
+ const entries = getPluginEntryPoints({
150
+ configEntry: path4.resolve(configEntry),
151
+ desktopEntry: path4.resolve(desktopEntry)
152
+ });
153
+ if (Object.keys(entries).length === 0) {
154
+ throw new Error("No entry points found for plugin. Check configEntry and desktopEntry paths.");
155
+ }
156
+ console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
157
+ await fs2.ensureDir(outputDir);
158
+ const { key, cert } = loadCertificates(certDirPath);
159
+ const config = createViteConfig({
160
+ ...viteConfig,
161
+ mode: "development",
162
+ build: {
163
+ ...viteConfig.build,
164
+ rollupOptions: {
165
+ ...viteConfig.build?.rollupOptions,
166
+ input: entries,
167
+ output: {
168
+ entryFileNames: "[name].js",
169
+ chunkFileNames: "chunks/[name].js",
170
+ assetFileNames: "[name].[ext]",
171
+ ...viteConfig.build?.rollupOptions?.output
172
+ }
173
+ },
174
+ outDir: outputDir,
175
+ sourcemap: "inline",
176
+ watch: {}
177
+ },
178
+ server: {
179
+ ...viteConfig.server,
180
+ port,
181
+ https: { key, cert }
182
+ }
183
+ });
184
+ console.log(chalk.gray(" Building..."));
185
+ await viteBuild(config);
186
+ const server = await createServer({
187
+ ...config,
188
+ root: outputDir,
189
+ server: {
190
+ port,
191
+ https: { key, cert }
192
+ }
193
+ });
194
+ await server.listen();
195
+ console.log(chalk.green(`
196
+ \u2728 Plugin development server ready!`));
197
+ console.log(chalk.cyan(` Local: https://localhost:${port}`));
198
+ console.log(chalk.gray(` Output: ${outputDir}`));
199
+ console.log(chalk.gray(` Files: config.js, desktop.js`));
200
+ console.log(chalk.gray("\n Watching for changes...\n"));
201
+ const chokidar = await import("chokidar");
202
+ const watchPaths = [
203
+ `${path4.dirname(configEntry)}/**/*.{ts,tsx,js,jsx,css,scss}`,
204
+ `${path4.dirname(desktopEntry)}/**/*.{ts,tsx,js,jsx,css,scss}`
205
+ ];
206
+ const watcher = chokidar.watch(watchPaths, {
207
+ ignored: /node_modules/,
208
+ persistent: true
209
+ });
210
+ const rebuild = async () => {
211
+ console.log(chalk.gray(" Rebuilding..."));
212
+ await viteBuild(config);
213
+ };
214
+ watcher.on("change", rebuild);
215
+ watcher.on("add", rebuild);
216
+ watcher.on("unlink", rebuild);
217
+ }
218
+ var plugin_dev_default = pluginDev;
219
+ export {
220
+ plugin_dev_default as default,
221
+ pluginDev
222
+ };
223
+ //# sourceMappingURL=plugin-dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/plugin-dev.ts","../../src/lib/vite.ts","../../src/lib/cert.ts","../../src/lib/constants.ts"],"sourcesContent":["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","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 { 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 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"],"mappings":";;;;;;;;AAAA,SAAS,SAAS,WAAW,oBAAuC;AACpE,OAAOA,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAO,WAAW;;;ACFlB,OAAO,UAAU;AAKV,IAAM,mBAAmB,CAAC,SAAgC,CAAC,MAAoB;AACpF,QAAM,UAAmC,CAAC,GAAI,OAAO,WAAW,CAAC,CAAE;AAGnE,MAAI;AACF,UAAM,gBAAgB,UAAQ,qBAAqB;AACnD,YAAQ,KAAK,cAAc,UAAU,cAAc,QAAQ,IAAI,cAAc,CAAC;AAAA,EAChF,QAAQ;AAAA,EAER;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,YAAY;AAAA,IACZ,OAAO;AAAA,MACL,GAAG,OAAO;AAAA,MACV,cAAc;AAAA,MACd,eAAe;AAAA,QACb,GAAG,OAAO,OAAO;AAAA,QACjB,QAAQ,CAAC,SAAS,SAAS;AAEzB,cAAI,CAAC,wBAAwB,EAAE,SAAS,QAAQ,QAAQ,EAAE,GAAG;AAC3D;AAAA,UACF;AACA,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACL,KAAK,KAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAAA,QACtC,GAAG,OAAO,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;;;AC3CA,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,OAAO,QAAQ;AACf,OAAOC,WAAU;;;ACHjB,OAAOC,WAAU;AAGV,IAAM,sBAAsB;AAG5B,IAAM,wBAAwBA,MAAK,KAAK,qBAAqB,KAAK;AAGlE,IAAM,uBAAuBA,MAAK,KAAK,qBAAqB,MAAM;AAGlE,IAAM,6BAA6BA,MAAK,KAAK,qBAAqB,QAAQ;AAG1E,IAAM,+BAA+BA,MAAK,KAAK,4BAA4B,KAAK;AAGhF,IAAM,8BAA8BA,MAAK,KAAK,4BAA4B,MAAM;AAGhF,IAAM,eAAe;AAGrB,IAAM,oBAAoB;AAC1B,IAAM,gBAAgB;;;ADnB7B,IAAM,YAAY,UAAU,IAAI;AAMhC,eAAsB,aAAa,QAA6C;AAC9E,QAAM,GAAG,UAAU,MAAM;AAEzB,QAAM,EAAE,OAAO,IAAI,MAAM,UAAU,gCAAgC;AAEnE,QAAM,QAAQ;AAAA,IACZ,EAAE,OAAO,mBAAmB,QAAQ,cAAc;AAAA,IAClD,EAAE,OAAO,uBAAuB,QAAQ,kBAAkB;AAAA,EAC5D;AAEA,aAAW,EAAE,OAAO,OAAO,KAAK,OAAO;AACrC,QAAI,GAAG,WAAW,KAAK,GAAG;AACxB,YAAM,GAAG,KAAK,OAAOC,MAAK,KAAK,QAAQ,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACrE;AAAA,EACF;AAEA,SAAO,EAAE,OAAO;AAClB;AAMO,SAAS,gBAAgB,SAA0B;AACxD,SACE,GAAG,WAAWA,MAAK,KAAK,SAAS,iBAAiB,CAAC,KACnD,GAAG,WAAWA,MAAK,KAAK,SAAS,aAAa,CAAC;AAEnD;AAMO,SAAS,iBAAiB,SAAgD;AAC/E,SAAO;AAAA,IACL,KAAK,GAAG,aAAaA,MAAK,KAAK,SAAS,iBAAiB,CAAC;AAAA,IAC1D,MAAM,GAAG,aAAaA,MAAK,KAAK,SAAS,aAAa,CAAC;AAAA,EACzD;AACF;;;AFvBA,IAAM,mBAAmB,CAAC,YAAY,aAAa,YAAY,aAAa,WAAW;AAKvF,SAAS,eAAe,UAAiC;AACvD,aAAW,YAAY,kBAAkB;AACvC,UAAM,YAAYC,MAAK,KAAK,UAAU,QAAQ;AAC9C,QAAIC,IAAG,WAAW,SAAS,GAAG;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAIA,IAAG,WAAW,QAAQ,KAAKA,IAAG,SAAS,QAAQ,EAAE,OAAO,GAAG;AAC7D,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAKA,SAAS,qBAAqB,SAGH;AACzB,QAAM,UAAkC,CAAC;AAEzC,QAAM,aAAa,eAAe,QAAQ,WAAW;AACrD,MAAI,YAAY;AACd,YAAQ,QAAQ,IAAI;AAAA,EACtB,OAAO;AACL,YAAQ,IAAI,MAAM,OAAO,oCAA+B,QAAQ,WAAW,EAAE,CAAC;AAAA,EAChF;AAEA,QAAM,cAAc,eAAe,QAAQ,YAAY;AACvD,MAAI,aAAa;AACf,YAAQ,SAAS,IAAI;AAAA,EACvB,OAAO;AACL,YAAQ,IAAI,MAAM,OAAO,qCAAgC,QAAQ,YAAY,EAAE,CAAC;AAAA,EAClF;AAEA,SAAO;AACT;AAKA,eAAsB,UAAU,UAA4B,CAAC,GAAkB;AAC7E,QAAM;AAAA,IACJ,cAAc;AAAA,IACd,eAAe;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa,CAAC;AAAA,EAChB,IAAI;AAEJ,UAAQ,IAAI,MAAM,KAAK,yDAAkD,CAAC;AAE1E,QAAM,YAAYD,MAAK,QAAQ,MAAM;AACrC,QAAM,cAAcA,MAAK,QAAQ,OAAO;AAGxC,MAAI,CAAC,gBAAgB,WAAW,GAAG;AACjC,YAAQ,IAAI,MAAM,OAAO,qDAA8C,CAAC;AACxE,QAAI;AACF,YAAM,aAAa,WAAW;AAC9B,cAAQ,IAAI,MAAM,MAAM,gDAA2C,CAAC;AAAA,IACtE,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,MAAM,IAAI,4EAAuE;AAAA,MACnF;AACA,cAAQ,IAAI,MAAM,KAAK,0DAA0D,CAAC;AAClF,YAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,UAAU,qBAAqB;AAAA,IACnC,aAAaA,MAAK,QAAQ,WAAW;AAAA,IACrC,cAAcA,MAAK,QAAQ,YAAY;AAAA,EACzC,CAAC;AAED,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,UAAM,IAAI,MAAM,6EAA6E;AAAA,EAC/F;AAEA,UAAQ,IAAI,MAAM,KAAK,mBAAmB,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAE5E,QAAMC,IAAG,UAAU,SAAS;AAE5B,QAAM,EAAE,KAAK,KAAK,IAAI,iBAAiB,WAAW;AAElD,QAAM,SAAS,iBAAiB;AAAA,IAC9B,GAAG;AAAA,IACH,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG,WAAW;AAAA,MACd,eAAe;AAAA,QACb,GAAG,WAAW,OAAO;AAAA,QACrB,OAAO;AAAA,QACP,QAAQ;AAAA,UACN,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,UAChB,GAAG,WAAW,OAAO,eAAe;AAAA,QACtC;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,OAAO,CAAC;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,GAAG,WAAW;AAAA,MACd;AAAA,MACA,OAAO,EAAE,KAAK,KAAK;AAAA,IACrB;AAAA,EACF,CAAC;AAGD,UAAQ,IAAI,MAAM,KAAK,eAAe,CAAC;AACvC,QAAM,UAAU,MAAM;AAGtB,QAAM,SAAS,MAAM,aAAa;AAAA,IAChC,GAAG;AAAA,IACH,MAAM;AAAA,IACN,QAAQ;AAAA,MACN;AAAA,MACA,OAAO,EAAE,KAAK,KAAK;AAAA,IACrB;AAAA,EACF,CAAC;AAED,QAAM,OAAO,OAAO;AAEpB,UAAQ,IAAI,MAAM,MAAM;AAAA,wCAAsC,CAAC;AAC/D,UAAQ,IAAI,MAAM,KAAK,+BAA+B,IAAI,EAAE,CAAC;AAC7D,UAAQ,IAAI,MAAM,KAAK,cAAc,SAAS,EAAE,CAAC;AACjD,UAAQ,IAAI,MAAM,KAAK,iCAAiC,CAAC;AACzD,UAAQ,IAAI,MAAM,KAAK,gCAAgC,CAAC;AAGxD,QAAM,WAAW,MAAM,OAAO,UAAU;AACxC,QAAM,aAAa;AAAA,IACjB,GAAGD,MAAK,QAAQ,WAAW,CAAC;AAAA,IAC5B,GAAGA,MAAK,QAAQ,YAAY,CAAC;AAAA,EAC/B;AAEA,QAAM,UAAU,SAAS,MAAM,YAAY;AAAA,IACzC,SAAS;AAAA,IACT,YAAY;AAAA,EACd,CAAC;AAED,QAAM,UAAU,YAAY;AAC1B,YAAQ,IAAI,MAAM,KAAK,iBAAiB,CAAC;AACzC,UAAM,UAAU,MAAM;AAAA,EACxB;AAEA,UAAQ,GAAG,UAAU,OAAO;AAC5B,UAAQ,GAAG,OAAO,OAAO;AACzB,UAAQ,GAAG,UAAU,OAAO;AAC9B;AAEA,IAAO,qBAAQ;","names":["fs","path","path","path","path","path","fs"]}
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ export { BuildOptions, default as build } from './commands/build.js';
3
+ export { DevOptions, default as dev } from './commands/dev.js';
4
+ export { PluginBuildOptions, default as pluginBuild } from './commands/plugin-build.js';
5
+ export { PluginDevOptions, default as pluginDev } from './commands/plugin-dev.js';
6
+ import { InlineConfig } from 'vite';
7
+
8
+ /**
9
+ * Vite設定を生成する
10
+ */
11
+ declare const createViteConfig: (config?: Partial<InlineConfig>) => InlineConfig;
12
+
13
+ /**
14
+ * mkcertを使用してSSL証明書を生成する
15
+ * @param outDir 証明書の出力先ディレクトリ
16
+ */
17
+ declare function generateCert(outDir: string): Promise<{
18
+ stdout: string;
19
+ }>;
20
+ /**
21
+ * SSL証明書が存在するか確認する
22
+ * @param certDir 証明書のディレクトリ
23
+ */
24
+ declare function hasCertificates(certDir: string): boolean;
25
+ /**
26
+ * SSL証明書を読み込む
27
+ * @param certDir 証明書のディレクトリ
28
+ */
29
+ declare function loadCertificates(certDir: string): {
30
+ key: Buffer;
31
+ cert: Buffer;
32
+ };
33
+
34
+ /** k2-vite の作業ディレクトリ */
35
+ declare const WORKSPACE_DIRECTORY = ".k2";
36
+ /** 開発時の出力ディレクトリ */
37
+ declare const DEVELOPMENT_DIRECTORY: string;
38
+ /** 本番ビルドの出力ディレクトリ */
39
+ declare const PRODUCTION_DIRECTORY: string;
40
+ /** プラグイン用の作業ディレクトリ */
41
+ declare const PLUGIN_WORKSPACE_DIRECTORY: string;
42
+ /** プラグイン開発時の出力ディレクトリ */
43
+ declare const PLUGIN_DEVELOPMENT_DIRECTORY: string;
44
+ /** プラグイン本番ビルドの出力ディレクトリ */
45
+ declare const PLUGIN_PRODUCTION_DIRECTORY: string;
46
+ /** ローカルサーバーのデフォルトポート番号 */
47
+ declare const DEFAULT_PORT = 32767;
48
+ /** SSL証明書のファイル名 */
49
+ declare const CERT_KEY_FILENAME = "localhost-key.pem";
50
+ declare const CERT_FILENAME = "localhost-cert.pem";
51
+
52
+ export { CERT_FILENAME, CERT_KEY_FILENAME, DEFAULT_PORT, DEVELOPMENT_DIRECTORY, PLUGIN_DEVELOPMENT_DIRECTORY, PLUGIN_PRODUCTION_DIRECTORY, PLUGIN_WORKSPACE_DIRECTORY, PRODUCTION_DIRECTORY, WORKSPACE_DIRECTORY, createViteConfig, generateCert, hasCertificates, loadCertificates };