@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/README.md ADDED
@@ -0,0 +1,146 @@
1
+ # @konomi-app/k2-vite
2
+
3
+ 🍳 Minimal kintone development environment with Vite
4
+
5
+ ## Features
6
+
7
+ - ⚡ **Vite-powered** - Fast development and build
8
+ - 🔒 **SSL-ready** - Automatic HTTPS for local development
9
+ - 📦 **Simple output** - `src/{appName}/index.ts` → `{appName}.js` + `{appName}.css`
10
+ - 🛠️ **CLI & API** - Use from command line or JavaScript
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install @konomi-app/k2-vite vite chokidar
16
+ # or
17
+ pnpm add @konomi-app/k2-vite vite chokidar
18
+ ```
19
+
20
+ ### Prerequisites
21
+
22
+ For SSL certificate generation, install [mkcert](https://github.com/FiloSottile/mkcert):
23
+
24
+ ```bash
25
+ # Windows (with Chocolatey)
26
+ choco install mkcert
27
+
28
+ # macOS (with Homebrew)
29
+ brew install mkcert
30
+
31
+ # Then install the local CA
32
+ mkcert -install
33
+ ```
34
+
35
+ ## Project Structure
36
+
37
+ ```
38
+ your-project/
39
+ ├── src/
40
+ │ ├── app-1/
41
+ │ │ └── index.ts # Entry point for app-1
42
+ │ ├── app-2/
43
+ │ │ └── index.tsx # Entry point for app-2
44
+ │ └── shared/
45
+ │ └── utils.ts # Shared utilities
46
+ └── package.json
47
+ ```
48
+
49
+ Output:
50
+
51
+ ```
52
+ .k2/prod/
53
+ ├── app-1.js
54
+ ├── app-1.css
55
+ ├── app-2.js
56
+ └── app-2.css
57
+ ```
58
+
59
+ ## CLI Usage
60
+
61
+ ### Build for Production
62
+
63
+ ```bash
64
+ npx k2-vite build
65
+
66
+ # With options
67
+ npx k2-vite build --input src --outdir dist
68
+ ```
69
+
70
+ ### Development Server
71
+
72
+ ```bash
73
+ npx k2-vite dev
74
+
75
+ # With options
76
+ npx k2-vite dev --port 3000 --input src
77
+ ```
78
+
79
+ Options:
80
+
81
+ - `-i, --input <dir>` - Input directory (default: `src`)
82
+ - `-o, --outdir <dir>` - Output directory (default: `.k2/prod` for build, `.k2/dev` for dev)
83
+ - `-c, --certdir <dir>` - SSL certificate directory (default: `.k2`)
84
+ - `-p, --port <number>` - Dev server port (default: `32767`)
85
+
86
+ ## JavaScript API
87
+
88
+ ```typescript
89
+ import { build, dev, createViteConfig } from '@konomi-app/k2-vite';
90
+
91
+ // Build for production
92
+ await build({
93
+ input: 'src',
94
+ outDir: 'dist',
95
+ });
96
+
97
+ // Start development server
98
+ await dev({
99
+ input: 'src',
100
+ port: 3000,
101
+ });
102
+
103
+ // Custom Vite configuration
104
+ await build({
105
+ input: 'src',
106
+ viteConfig: {
107
+ plugins: [
108
+ /* your plugins */
109
+ ],
110
+ define: {
111
+ 'process.env.NODE_ENV': '"production"',
112
+ },
113
+ },
114
+ });
115
+ ```
116
+
117
+ ## Configuration
118
+
119
+ ### With vite-tsconfig-paths (Optional)
120
+
121
+ If you want to use TypeScript path aliases:
122
+
123
+ ```bash
124
+ npm install vite-tsconfig-paths
125
+ ```
126
+
127
+ The plugin will be automatically detected and used.
128
+
129
+ ### Custom Vite Config
130
+
131
+ You can pass additional Vite configuration:
132
+
133
+ ```typescript
134
+ import { build } from '@konomi-app/k2-vite';
135
+ import react from '@vitejs/plugin-react';
136
+
137
+ await build({
138
+ viteConfig: {
139
+ plugins: [react()],
140
+ },
141
+ });
142
+ ```
143
+
144
+ ## License
145
+
146
+ ISC
@@ -0,0 +1,16 @@
1
+ import { InlineConfig } from 'vite';
2
+
3
+ interface BuildOptions {
4
+ /** 入力ディレクトリ(デフォルト: src) */
5
+ input?: string;
6
+ /** 出力ディレクトリ(デフォルト: .k2/prod) */
7
+ outDir?: string;
8
+ /** 追加のVite設定 */
9
+ viteConfig?: Partial<InlineConfig>;
10
+ }
11
+ /**
12
+ * プロジェクトをビルドする
13
+ */
14
+ declare function build(options?: BuildOptions): Promise<void>;
15
+
16
+ export { type BuildOptions, build, build as default };
@@ -0,0 +1,117 @@
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/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/build.ts
60
+ function getEntryPoints(inputDir) {
61
+ const entries = {};
62
+ if (!fs.existsSync(inputDir)) {
63
+ throw new Error(`Input directory not found: ${inputDir}`);
64
+ }
65
+ const dirs = fs.readdirSync(inputDir, { withFileTypes: true });
66
+ for (const dirent of dirs) {
67
+ if (!dirent.isDirectory()) continue;
68
+ const dirName = dirent.name;
69
+ const dirPath = path3.join(inputDir, dirName);
70
+ for (const filename of ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"]) {
71
+ const entryPath = path3.join(dirPath, filename);
72
+ if (fs.existsSync(entryPath)) {
73
+ entries[dirName] = entryPath;
74
+ break;
75
+ }
76
+ }
77
+ }
78
+ return entries;
79
+ }
80
+ async function build(options = {}) {
81
+ const { input = "src", outDir = PRODUCTION_DIRECTORY, viteConfig = {} } = options;
82
+ console.log(chalk.blue("\u{1F528} Building for production..."));
83
+ const inputDir = path3.resolve(input);
84
+ const outputDir = path3.resolve(outDir);
85
+ const entries = getEntryPoints(inputDir);
86
+ if (Object.keys(entries).length === 0) {
87
+ throw new Error(`No entry points found in ${inputDir}`);
88
+ }
89
+ console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
90
+ const config = createViteConfig({
91
+ ...viteConfig,
92
+ mode: "production",
93
+ build: {
94
+ ...viteConfig.build,
95
+ rollupOptions: {
96
+ ...viteConfig.build?.rollupOptions,
97
+ input: entries,
98
+ output: {
99
+ entryFileNames: "[name].js",
100
+ chunkFileNames: "chunks/[name]-[hash].js",
101
+ assetFileNames: "[name].[ext]",
102
+ ...viteConfig.build?.rollupOptions?.output
103
+ }
104
+ },
105
+ outDir: outputDir,
106
+ emptyOutDir: true
107
+ }
108
+ });
109
+ await viteBuild(config);
110
+ console.log(chalk.green(`\u2728 Build complete! Output: ${outputDir}`));
111
+ }
112
+ var build_default = build;
113
+ export {
114
+ build,
115
+ build_default as default
116
+ };
117
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/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 { 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"],"mappings":"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","names":["path","path","path"]}
@@ -0,0 +1,20 @@
1
+ import { InlineConfig } from 'vite';
2
+
3
+ interface DevOptions {
4
+ /** 入力ディレクトリ(デフォルト: src) */
5
+ input?: string;
6
+ /** 出力ディレクトリ(デフォルト: .k2/dev) */
7
+ outDir?: string;
8
+ /** 証明書ディレクトリ(デフォルト: .k2) */
9
+ certDir?: string;
10
+ /** ポート番号(デフォルト: 32767) */
11
+ port?: number;
12
+ /** 追加のVite設定 */
13
+ viteConfig?: Partial<InlineConfig>;
14
+ }
15
+ /**
16
+ * 開発サーバーを起動する
17
+ */
18
+ declare function dev(options?: DevOptions): Promise<void>;
19
+
20
+ export { type DevOptions, dev as default, dev };
@@ -0,0 +1,206 @@
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/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/dev.ts
95
+ function getEntryPoints(inputDir) {
96
+ const entries = {};
97
+ if (!fs2.existsSync(inputDir)) {
98
+ throw new Error(`Input directory not found: ${inputDir}`);
99
+ }
100
+ const dirs = fs2.readdirSync(inputDir, { withFileTypes: true });
101
+ for (const dirent of dirs) {
102
+ if (!dirent.isDirectory()) continue;
103
+ const dirName = dirent.name;
104
+ const dirPath = path4.join(inputDir, dirName);
105
+ for (const filename of ["index.ts", "index.tsx", "index.js", "index.jsx", "index.mjs"]) {
106
+ const entryPath = path4.join(dirPath, filename);
107
+ if (fs2.existsSync(entryPath)) {
108
+ entries[dirName] = entryPath;
109
+ break;
110
+ }
111
+ }
112
+ }
113
+ return entries;
114
+ }
115
+ async function dev(options = {}) {
116
+ const {
117
+ input = "src",
118
+ outDir = DEVELOPMENT_DIRECTORY,
119
+ certDir = WORKSPACE_DIRECTORY,
120
+ port = DEFAULT_PORT,
121
+ viteConfig = {}
122
+ } = options;
123
+ console.log(chalk.blue("\u{1F680} Starting development server..."));
124
+ const inputDir = path4.resolve(input);
125
+ const outputDir = path4.resolve(outDir);
126
+ const certDirPath = path4.resolve(certDir);
127
+ if (!hasCertificates(certDirPath)) {
128
+ console.log(chalk.yellow("\u{1F4DC} SSL certificates not found. Generating..."));
129
+ try {
130
+ await generateCert(certDirPath);
131
+ console.log(chalk.green("\u2705 SSL certificates generated successfully"));
132
+ } catch (error) {
133
+ console.log(
134
+ chalk.red("\u274C Failed to generate SSL certificates. Make sure mkcert is installed.")
135
+ );
136
+ console.log(chalk.gray(" Install mkcert: https://github.com/FiloSottile/mkcert"));
137
+ throw error;
138
+ }
139
+ }
140
+ const entries = getEntryPoints(inputDir);
141
+ if (Object.keys(entries).length === 0) {
142
+ throw new Error(`No entry points found in ${inputDir}`);
143
+ }
144
+ console.log(chalk.gray(` Entry points: ${Object.keys(entries).join(", ")}`));
145
+ await fs2.ensureDir(outputDir);
146
+ const { key, cert } = loadCertificates(certDirPath);
147
+ const config = createViteConfig({
148
+ ...viteConfig,
149
+ mode: "development",
150
+ build: {
151
+ ...viteConfig.build,
152
+ rollupOptions: {
153
+ ...viteConfig.build?.rollupOptions,
154
+ input: entries,
155
+ output: {
156
+ entryFileNames: "[name].js",
157
+ chunkFileNames: "chunks/[name].js",
158
+ assetFileNames: "[name].[ext]",
159
+ ...viteConfig.build?.rollupOptions?.output
160
+ }
161
+ },
162
+ outDir: outputDir,
163
+ sourcemap: "inline",
164
+ watch: {}
165
+ },
166
+ server: {
167
+ ...viteConfig.server,
168
+ port,
169
+ https: { key, cert }
170
+ }
171
+ });
172
+ console.log(chalk.gray(" Building..."));
173
+ await viteBuild(config);
174
+ const server = await createServer({
175
+ ...config,
176
+ root: outputDir,
177
+ server: {
178
+ port,
179
+ https: { key, cert }
180
+ }
181
+ });
182
+ await server.listen();
183
+ console.log(chalk.green(`
184
+ \u2728 Development server ready!`));
185
+ console.log(chalk.cyan(` Local: https://localhost:${port}`));
186
+ console.log(chalk.gray(` Output: ${outputDir}`));
187
+ console.log(chalk.gray("\n Watching for changes...\n"));
188
+ const chokidar = await import("chokidar");
189
+ const watcher = chokidar.watch([`${input}/**/*.{ts,tsx,js,jsx,css,scss}`], {
190
+ ignored: /node_modules/,
191
+ persistent: true
192
+ });
193
+ const rebuild = async () => {
194
+ console.log(chalk.gray(" Rebuilding..."));
195
+ await viteBuild(config);
196
+ };
197
+ watcher.on("change", rebuild);
198
+ watcher.on("add", rebuild);
199
+ watcher.on("unlink", rebuild);
200
+ }
201
+ var dev_default = dev;
202
+ export {
203
+ dev_default as default,
204
+ dev
205
+ };
206
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/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 { 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 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;;;AF3BA,SAAS,eAAe,UAA0C;AAChE,QAAM,UAAkC,CAAC;AAEzC,MAAI,CAACC,IAAG,WAAW,QAAQ,GAAG;AAC5B,UAAM,IAAI,MAAM,8BAA8B,QAAQ,EAAE;AAAA,EAC1D;AAEA,QAAM,OAAOA,IAAG,YAAY,UAAU,EAAE,eAAe,KAAK,CAAC;AAE7D,aAAW,UAAU,MAAM;AACzB,QAAI,CAAC,OAAO,YAAY,EAAG;AAE3B,UAAM,UAAU,OAAO;AACvB,UAAM,UAAUC,MAAK,KAAK,UAAU,OAAO;AAE3C,eAAW,YAAY,CAAC,YAAY,aAAa,YAAY,aAAa,WAAW,GAAG;AACtF,YAAM,YAAYA,MAAK,KAAK,SAAS,QAAQ;AAC7C,UAAID,IAAG,WAAW,SAAS,GAAG;AAC5B,gBAAQ,OAAO,IAAI;AACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,eAAsB,IAAI,UAAsB,CAAC,GAAkB;AACjE,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa,CAAC;AAAA,EAChB,IAAI;AAEJ,UAAQ,IAAI,MAAM,KAAK,0CAAmC,CAAC;AAE3D,QAAM,WAAWC,MAAK,QAAQ,KAAK;AACnC,QAAM,YAAYA,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,eAAe,QAAQ;AAEvC,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,UAAM,IAAI,MAAM,4BAA4B,QAAQ,EAAE;AAAA,EACxD;AAEA,UAAQ,IAAI,MAAM,KAAK,mBAAmB,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAE5E,QAAMD,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,iCAA+B,CAAC;AACxD,UAAQ,IAAI,MAAM,KAAK,+BAA+B,IAAI,EAAE,CAAC;AAC7D,UAAQ,IAAI,MAAM,KAAK,cAAc,SAAS,EAAE,CAAC;AACjD,UAAQ,IAAI,MAAM,KAAK,gCAAgC,CAAC;AAGxD,QAAM,WAAW,MAAM,OAAO,UAAU;AACxC,QAAM,UAAU,SAAS,MAAM,CAAC,GAAG,KAAK,gCAAgC,GAAG;AAAA,IACzE,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,cAAQ;","names":["fs","path","path","path","path","fs","path"]}
@@ -0,0 +1,18 @@
1
+ import { InlineConfig } from 'vite';
2
+
3
+ interface PluginBuildOptions {
4
+ /** 設定画面のエントリーポイント(デフォルト: src/config/index.ts) */
5
+ configEntry?: string;
6
+ /** PC用画面のエントリーポイント(デフォルト: src/desktop/index.ts) */
7
+ desktopEntry?: string;
8
+ /** 出力ディレクトリ(デフォルト: .k2/plugin/prod) */
9
+ outDir?: string;
10
+ /** 追加のVite設定 */
11
+ viteConfig?: Partial<InlineConfig>;
12
+ }
13
+ /**
14
+ * kintoneプラグインをビルドする
15
+ */
16
+ declare function pluginBuild(options?: PluginBuildOptions): Promise<void>;
17
+
18
+ export { type PluginBuildOptions, pluginBuild as default, pluginBuild };