@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 +146 -0
- package/dist/commands/build.d.ts +16 -0
- package/dist/commands/build.js +117 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/dev.d.ts +20 -0
- package/dist/commands/dev.js +206 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/plugin-build.d.ts +18 -0
- package/dist/commands/plugin-build.js +135 -0
- package/dist/commands/plugin-build.js.map +1 -0
- package/dist/commands/plugin-dev.d.ts +22 -0
- package/dist/commands/plugin-dev.js +223 -0
- package/dist/commands/plugin-dev.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +541 -0
- package/dist/index.js.map +1 -0
- package/package.json +70 -0
- package/types.d.ts +68 -0
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":"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","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 };
|