@ishibashi0112/webview2-bridge-gen 0.2.0 → 0.3.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 +12 -0
- package/dist/cli.js +62 -6
- package/dist/cli.js.map +1 -1
- package/dist/generate.d.ts +1 -0
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +1 -0
- package/dist/generate.js.map +1 -1
- package/dist/init.d.ts +32 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +93 -0
- package/dist/init.js.map +1 -0
- package/package.json +6 -3
- package/template/README.md +10 -0
- package/template/myapp/README.md +91 -0
- package/template/myapp/_gitignore +6 -0
- package/template/myapp/contract/contract.schema.json +66 -0
- package/template/myapp/contract/contract.ts +8 -0
- package/template/myapp/dotnet/Directory.Build.props +10 -0
- package/template/myapp/dotnet/MyApp.Contract/Generated/Dispatcher.Generated.vb +30 -0
- package/template/myapp/dotnet/MyApp.Contract/Generated/Dto.vb +39 -0
- package/template/myapp/dotnet/MyApp.Contract/Generated/Events.vb +32 -0
- package/template/myapp/dotnet/MyApp.Contract/Generated/Interfaces.vb +20 -0
- package/template/myapp/dotnet/MyApp.Contract/MyApp.Contract.vbproj +9 -0
- package/template/myapp/dotnet/MyApp.Contract/Runtime/Dispatcher.vb +151 -0
- package/template/myapp/dotnet/MyApp.Contract/Runtime/IBridgeEmitter.vb +22 -0
- package/template/myapp/dotnet/MyApp.Contract/Runtime/JsonRpc.vb +130 -0
- package/template/myapp/dotnet/MyApp.Host/Bridge/WebViewBridge.vb +106 -0
- package/template/myapp/dotnet/MyApp.Host/MainForm.vb +90 -0
- package/template/myapp/dotnet/MyApp.Host/MyApp.Host.vbproj +28 -0
- package/template/myapp/dotnet/MyApp.Host/Program.vb +12 -0
- package/template/myapp/dotnet/MyApp.Impl/CustomersApi.vb +38 -0
- package/template/myapp/dotnet/MyApp.Impl/MyApp.Impl.vbproj +9 -0
- package/template/myapp/dotnet/MyApp.sln +34 -0
- package/template/myapp/package.json +16 -0
- package/template/myapp/pnpm-workspace.yaml +6 -0
- package/template/myapp/web/index.html +13 -0
- package/template/myapp/web/package.json +23 -0
- package/template/myapp/web/src/bridge.ts +29 -0
- package/template/myapp/web/src/generated/contract-types.ts +33 -0
- package/template/myapp/web/src/main.tsx +37 -0
- package/template/myapp/web/src/vite-env.d.ts +6 -0
- package/template/myapp/web/tsconfig.json +8 -0
- package/template/myapp/web/vite.config.ts +17 -0
- package/template/myapp/webview2-bridge.gen.json +11 -0
package/README.md
CHANGED
|
@@ -20,6 +20,18 @@ pnpm add -D @ishibashi0112/webview2-bridge-gen zod
|
|
|
20
20
|
|
|
21
21
|
Requires Node.js 20.19+ and zod 4.
|
|
22
22
|
|
|
23
|
+
## Start a new app
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
pnpm dlx @ishibashi0112/webview2-bridge-gen init my-app --name MyInventory
|
|
27
|
+
cd my-app && pnpm install && pnpm gen:check
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`init` writes a complete skeleton (31 files): the zod contract, a Vite + React app with a mock transport,
|
|
31
|
+
and three VB.NET projects (`<Name>.Contract` netstandard2.0, `<Name>.Impl` net48, `<Name>.Host` WinForms net48)
|
|
32
|
+
including the generated code and the bundled VB runtime. `--name` becomes the VB namespace / project names
|
|
33
|
+
(PascalCase; defaults to the directory name). The generated README walks through the dev loop and the Windows checks.
|
|
34
|
+
|
|
23
35
|
## Define the contract
|
|
24
36
|
|
|
25
37
|
```ts
|
package/dist/cli.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFile } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { generate } from "./generate.js";
|
|
5
|
-
import { GenerateError } from "./schema.js";
|
|
6
4
|
const DEFAULT_CONFIG = "webview2-bridge.gen.json";
|
|
7
5
|
function usage() {
|
|
8
|
-
console.error(`Usage:
|
|
6
|
+
console.error(`Usage:
|
|
7
|
+
webview2-bridge-gen [--config <file>] [--cwd <dir>] [--check]
|
|
8
|
+
webview2-bridge-gen init <dir> [--name <AppName>] [--force]
|
|
9
9
|
|
|
10
|
+
generate(既定):
|
|
10
11
|
--config 設定ファイル(既定: ./${DEFAULT_CONFIG})
|
|
11
12
|
--cwd 設定ファイル内の相対パスの基準(既定: 設定ファイルのあるディレクトリ)
|
|
12
|
-
--check 書き込まず、生成物が最新かだけを確認する(差分があれば exit 1
|
|
13
|
+
--check 書き込まず、生成物が最新かだけを確認する(差分があれば exit 1)
|
|
14
|
+
|
|
15
|
+
init: 新規アプリの骨組み(contract / web / dotnet の 3 プロジェクト)を <dir> に書き出す
|
|
16
|
+
--name アプリ名(PascalCase。VB の名前空間・プロジェクト名になる。既定: <dir> の名前から生成)
|
|
17
|
+
--force <dir> にファイルがあっても書き込む`);
|
|
13
18
|
process.exit(2);
|
|
14
19
|
}
|
|
15
|
-
async function
|
|
20
|
+
async function runGenerate(argv) {
|
|
16
21
|
let configPath = DEFAULT_CONFIG;
|
|
17
22
|
let cwd;
|
|
18
23
|
let check = false;
|
|
@@ -31,6 +36,8 @@ async function main(argv) {
|
|
|
31
36
|
usage();
|
|
32
37
|
}
|
|
33
38
|
}
|
|
39
|
+
// generate は tsx / zod を読み込むので、init だけのときは読み込まない
|
|
40
|
+
const { generate } = await import("./generate.js");
|
|
34
41
|
const absConfig = path.resolve(configPath);
|
|
35
42
|
const config = JSON.parse(await readFile(absConfig, "utf8"));
|
|
36
43
|
const base = cwd ? path.resolve(cwd) : path.dirname(absConfig);
|
|
@@ -48,7 +55,56 @@ async function main(argv) {
|
|
|
48
55
|
console.log(result.files.map((f) => `wrote ${rel(f)}`).join("\n"));
|
|
49
56
|
return 0;
|
|
50
57
|
}
|
|
51
|
-
|
|
58
|
+
async function runInit(argv) {
|
|
59
|
+
let dir;
|
|
60
|
+
let name;
|
|
61
|
+
let force = false;
|
|
62
|
+
for (let i = 0; i < argv.length; i++) {
|
|
63
|
+
const a = argv[i];
|
|
64
|
+
if (a === "--name")
|
|
65
|
+
name = argv[++i] ?? usage();
|
|
66
|
+
else if (a === "--force")
|
|
67
|
+
force = true;
|
|
68
|
+
else if (a === "-h" || a === "--help")
|
|
69
|
+
usage();
|
|
70
|
+
else if (a.startsWith("-")) {
|
|
71
|
+
console.error(`Unknown argument: ${a}`);
|
|
72
|
+
usage();
|
|
73
|
+
}
|
|
74
|
+
else if (dir === undefined)
|
|
75
|
+
dir = a;
|
|
76
|
+
else {
|
|
77
|
+
console.error(`Unexpected argument: ${a}`);
|
|
78
|
+
usage();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (dir === undefined)
|
|
82
|
+
usage();
|
|
83
|
+
const { scaffold, defaultAppName } = await import("./init.js");
|
|
84
|
+
const targetDir = path.resolve(dir);
|
|
85
|
+
const appName = name ?? defaultAppName(path.basename(targetDir));
|
|
86
|
+
const result = await scaffold({ targetDir, name: appName, force });
|
|
87
|
+
console.log(result.files.map((f) => `wrote ${f}`).join("\n"));
|
|
88
|
+
console.log(`
|
|
89
|
+
Created ${appName} in ${targetDir} (${result.files.length} files).
|
|
90
|
+
|
|
91
|
+
Next:
|
|
92
|
+
cd ${dir}
|
|
93
|
+
pnpm install # esbuild の postinstall 許可は pnpm-workspace.yaml に設定済み
|
|
94
|
+
pnpm gen:check # 生成物が同梱版と一致することを確認(契約を変えたら pnpm gen)
|
|
95
|
+
pnpm dev # http://localhost:5173 をブラウザで開く(MemoryTransport のモック)
|
|
96
|
+
# Windows: set WEBVIEW2_BRIDGE_DEV_URL=http://localhost:5173 && dotnet run --project dotnet/${appName}.Host
|
|
97
|
+
|
|
98
|
+
See README.md in the new directory for the full walkthrough.`);
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
async function main(argv) {
|
|
102
|
+
if (argv[0] === "init")
|
|
103
|
+
return runInit(argv.slice(1));
|
|
104
|
+
return runGenerate(argv);
|
|
105
|
+
}
|
|
106
|
+
main(process.argv.slice(2)).then((code) => process.exit(code), async (err) => {
|
|
107
|
+
const { GenerateError } = await import("./schema.js");
|
|
52
108
|
if (err instanceof GenerateError) {
|
|
53
109
|
console.error(`webview2-bridge-gen: ${err.message}`);
|
|
54
110
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/generate.d.ts
CHANGED
|
@@ -44,4 +44,5 @@ export declare function generate(config: GenerateConfig, opts: {
|
|
|
44
44
|
check?: boolean;
|
|
45
45
|
}): Promise<GenerateResult>;
|
|
46
46
|
export { emitVbRuntime, genPackageVersion, VB_RUNTIME_FILES, type VbRuntimeKind } from "./vb-runtime.js";
|
|
47
|
+
export { scaffold, defaultAppName, validateAppName, bundledTemplateDir, TEMPLATE_NAME, type ScaffoldOptions, type ScaffoldResult } from "./init.js";
|
|
47
48
|
//# sourceMappingURL=generate.d.ts.map
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAIjE,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;IACxC,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,GAAG;QACxC;;;;WAIG;QACH,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B;;;WAGG;QACH,QAAQ,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,yCAAyC;AACzC,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAqDtH;AAwCD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAIjE,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC;IACxC,EAAE,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,GAAG;QACxC;;;;WAIG;QACH,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B;;;WAGG;QACH,QAAQ,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,wCAAwC;IACxC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,yCAAyC;AACzC,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAqDtH;AAwCD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/generate.js
CHANGED
|
@@ -100,4 +100,5 @@ async function removeStaleGenerated(dir, ext, keep) {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
export { emitVbRuntime, genPackageVersion, VB_RUNTIME_FILES } from "./vb-runtime.js";
|
|
103
|
+
export { scaffold, defaultAppName, validateAppName, bundledTemplateDir, TEMPLATE_NAME } from "./init.js";
|
|
103
104
|
//# sourceMappingURL=generate.js.map
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** テンプレート内のプレースホルダ */
|
|
2
|
+
export declare const TEMPLATE_NAME = "MyApp";
|
|
3
|
+
export interface ScaffoldOptions {
|
|
4
|
+
/** 書き出し先ディレクトリ(無ければ作る。既にファイルがあれば force なしではエラー) */
|
|
5
|
+
targetDir: string;
|
|
6
|
+
/** アプリ名(PascalCase 推奨。VB の名前空間になるので識別子として妥当なこと) */
|
|
7
|
+
name: string;
|
|
8
|
+
/** 既存ファイルがあっても上書きする */
|
|
9
|
+
force?: boolean;
|
|
10
|
+
/** テンプレートの場所(既定: パッケージ同梱の template/myapp/) */
|
|
11
|
+
templateDir?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ScaffoldResult {
|
|
14
|
+
/** 書き出したファイル(targetDir からの相対パス、"/" 区切り) */
|
|
15
|
+
files: string[];
|
|
16
|
+
/** 置換後のアプリ名 */
|
|
17
|
+
name: string;
|
|
18
|
+
}
|
|
19
|
+
/** アプリ名として使えるか(VB の名前空間の 1 セグメントになる) */
|
|
20
|
+
export declare function validateAppName(name: string): void;
|
|
21
|
+
/** ディレクトリ名から既定のアプリ名を作る(inventory-app → InventoryApp) */
|
|
22
|
+
export declare function defaultAppName(dirName: string): string;
|
|
23
|
+
/** 同梱テンプレートのディレクトリ(src/ からも dist/ からも ../template/myapp) */
|
|
24
|
+
export declare function bundledTemplateDir(): string;
|
|
25
|
+
/** テンプレートをコピーしてアプリ名に置換する */
|
|
26
|
+
export declare function scaffold(options: ScaffoldOptions): Promise<ScaffoldResult>;
|
|
27
|
+
/**
|
|
28
|
+
* .sln の `Project("{種別GUID}") = "名前", "パス", "{プロジェクトGUID}"` からプロジェクト GUID を集め、
|
|
29
|
+
* 新しい GUID に置き換える(ProjectConfigurationPlatforms 等の参照箇所も同じ置換で追従する)
|
|
30
|
+
*/
|
|
31
|
+
export declare function renewProjectGuids(sln: string): string;
|
|
32
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAiBA,sBAAsB;AACtB,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CASlD;AAED,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4BAA4B;AAC5B,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBhF;AAeD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD"}
|
package/dist/init.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `webview2-bridge-gen init`: 同梱テンプレート(template/myapp/ = リポジトリの templates/myapp/ のコピー)を
|
|
3
|
+
* コピーし、プレースホルダ `MyApp` / `myapp` をアプリ名に置換して新規アプリの骨組みを書き出す。
|
|
4
|
+
*
|
|
5
|
+
* - `MyApp`(PascalCase): VB の名前空間・プロジェクト名・アセンブリ名・Form のタイトル・LocalAppData のフォルダ名
|
|
6
|
+
* - `myapp`(小文字): package.json の name
|
|
7
|
+
* - .sln のプロジェクト GUID は新しく振り直す(プロジェクト種別 GUID は変えない)
|
|
8
|
+
* - `_gitignore` は `.gitignore` に戻す(npm pack が .gitignore を改名するため同梱時は別名)
|
|
9
|
+
*
|
|
10
|
+
* Node 固有(fs)なので index.ts からは export しない(generate と同じ entry)。
|
|
11
|
+
*/
|
|
12
|
+
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
import { GenerateError } from "./schema.js";
|
|
17
|
+
/** テンプレート内のプレースホルダ */
|
|
18
|
+
export const TEMPLATE_NAME = "MyApp";
|
|
19
|
+
const NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
20
|
+
/** アプリ名として使えるか(VB の名前空間の 1 セグメントになる) */
|
|
21
|
+
export function validateAppName(name) {
|
|
22
|
+
if (!NAME_PATTERN.test(name)) {
|
|
23
|
+
throw new GenerateError(`invalid app name "${name}": use letters, digits and underscores only, starting with a letter (e.g. InventoryApp)`);
|
|
24
|
+
}
|
|
25
|
+
if (name === TEMPLATE_NAME) {
|
|
26
|
+
throw new GenerateError(`app name "${TEMPLATE_NAME}" is the template placeholder; choose another name`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** ディレクトリ名から既定のアプリ名を作る(inventory-app → InventoryApp) */
|
|
30
|
+
export function defaultAppName(dirName) {
|
|
31
|
+
const pascal = dirName
|
|
32
|
+
.split(/[^A-Za-z0-9]+/)
|
|
33
|
+
.filter((s) => s.length > 0)
|
|
34
|
+
.map((s) => s[0].toUpperCase() + s.slice(1))
|
|
35
|
+
.join("");
|
|
36
|
+
return /^[0-9]/.test(pascal) ? `App${pascal}` : pascal;
|
|
37
|
+
}
|
|
38
|
+
/** 同梱テンプレートのディレクトリ(src/ からも dist/ からも ../template/myapp) */
|
|
39
|
+
export function bundledTemplateDir() {
|
|
40
|
+
return fileURLToPath(new URL("../template/myapp/", import.meta.url));
|
|
41
|
+
}
|
|
42
|
+
/** テンプレートをコピーしてアプリ名に置換する */
|
|
43
|
+
export async function scaffold(options) {
|
|
44
|
+
const { name } = options;
|
|
45
|
+
validateAppName(name);
|
|
46
|
+
const templateDir = options.templateDir ?? bundledTemplateDir();
|
|
47
|
+
const targetDir = path.resolve(options.targetDir);
|
|
48
|
+
const existing = await readdir(targetDir).catch(() => null);
|
|
49
|
+
if (existing !== null && existing.length > 0 && !options.force) {
|
|
50
|
+
throw new GenerateError(`${targetDir} is not empty (use --force to write into it anyway)`);
|
|
51
|
+
}
|
|
52
|
+
const rename = (s) => s.replaceAll(TEMPLATE_NAME, name).replaceAll(TEMPLATE_NAME.toLowerCase(), name.toLowerCase());
|
|
53
|
+
const files = [];
|
|
54
|
+
for (const rel of await listFiles(templateDir)) {
|
|
55
|
+
const outRel = rename(rel === "_gitignore" ? ".gitignore" : rel);
|
|
56
|
+
let content = rename(await readFile(path.join(templateDir, rel), "utf8"));
|
|
57
|
+
if (outRel.endsWith(".sln"))
|
|
58
|
+
content = renewProjectGuids(content);
|
|
59
|
+
const target = path.join(targetDir, ...outRel.split("/"));
|
|
60
|
+
await mkdir(path.dirname(target), { recursive: true });
|
|
61
|
+
await writeFile(target, content, "utf8");
|
|
62
|
+
files.push(outRel);
|
|
63
|
+
}
|
|
64
|
+
return { files, name };
|
|
65
|
+
}
|
|
66
|
+
async function listFiles(root) {
|
|
67
|
+
const out = [];
|
|
68
|
+
const walk = async (dir) => {
|
|
69
|
+
for (const e of await readdir(dir, { withFileTypes: true })) {
|
|
70
|
+
const full = path.join(dir, e.name);
|
|
71
|
+
if (e.isDirectory())
|
|
72
|
+
await walk(full);
|
|
73
|
+
else
|
|
74
|
+
out.push(path.relative(root, full).split(path.sep).join("/"));
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
await walk(root);
|
|
78
|
+
return out.sort();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* .sln の `Project("{種別GUID}") = "名前", "パス", "{プロジェクトGUID}"` からプロジェクト GUID を集め、
|
|
82
|
+
* 新しい GUID に置き換える(ProjectConfigurationPlatforms 等の参照箇所も同じ置換で追従する)
|
|
83
|
+
*/
|
|
84
|
+
export function renewProjectGuids(sln) {
|
|
85
|
+
const projectLine = /^Project\("\{[0-9A-Fa-f-]+\}"\)\s*=\s*"[^"]*",\s*"[^"]*",\s*"\{([0-9A-Fa-f-]+)\}"/gm;
|
|
86
|
+
let out = sln;
|
|
87
|
+
for (const m of sln.matchAll(projectLine)) {
|
|
88
|
+
const oldGuid = m[1];
|
|
89
|
+
out = out.replaceAll(`{${oldGuid}}`, `{${randomUUID().toUpperCase()}}`);
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ishibashi0112/webview2-bridge-gen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "zod contract -> JSON Schema -> TypeScript types + VB.NET DTO / Interface / Dispatcher generator for WinForms (.NET Framework 4.8) + WebView2 + Vite/React apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"webview2",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"files": [
|
|
46
46
|
"dist",
|
|
47
47
|
"vb-runtime",
|
|
48
|
+
"template",
|
|
48
49
|
"README.md",
|
|
49
50
|
"LICENSE"
|
|
50
51
|
],
|
|
@@ -64,10 +65,12 @@
|
|
|
64
65
|
"zod": "^4.5.4"
|
|
65
66
|
},
|
|
66
67
|
"scripts": {
|
|
67
|
-
"build": "pnpm sync
|
|
68
|
+
"build": "pnpm sync && node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc -p tsconfig.build.json",
|
|
68
69
|
"gen": "tsx src/cli.ts",
|
|
69
70
|
"test": "vitest run",
|
|
70
71
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
71
|
-
"sync
|
|
72
|
+
"sync": "pnpm sync:vb-runtime && pnpm sync:template",
|
|
73
|
+
"sync:vb-runtime": "node scripts/sync-vb-runtime.mjs",
|
|
74
|
+
"sync:template": "node scripts/sync-template.mjs"
|
|
72
75
|
}
|
|
73
76
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# template
|
|
2
|
+
|
|
3
|
+
新規アプリの雛形 `myapp/` のコピー。**手で編集しない。**
|
|
4
|
+
|
|
5
|
+
唯一の正はリポジトリの `templates/myapp/`。
|
|
6
|
+
`pnpm --filter @ishibashi0112/webview2-bridge-gen sync:template`(`pnpm build` でも自動実行)でここへコピーされ、
|
|
7
|
+
npm パッケージに同梱される。`init.test.ts` が templates/ と一致していることを検証する。
|
|
8
|
+
|
|
9
|
+
`webview2-bridge-gen init <dir> --name <AppName>` がこれをコピーし、`MyApp` / `myapp` をアプリ名に置換して書き出す。
|
|
10
|
+
`.gitignore` は npm pack が改名してしまうので `_gitignore` として同梱し、init が `.gitignore` に戻す。
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# MyApp — webview2-bridge を使う新規アプリの雛形
|
|
2
|
+
|
|
3
|
+
公開済みの npm(`@ishibashi0112/webview2-bridge-gen` / `-client`)だけで成立する最小構成。
|
|
4
|
+
`pnpm dlx @ishibashi0112/webview2-bridge-gen init <dir> --name <AppName>` がこのフォルダをコピーし、`MyApp` を指定名に置換して書き出す
|
|
5
|
+
(手でコピーして `MyApp` を置換しても同じ)。
|
|
6
|
+
NuGet は Newtonsoft.Json と Microsoft.Web.WebView2 の 2 つしか使わない。
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
myapp/
|
|
10
|
+
package.json # pnpm スクリプト(gen / gen:check / dev / build:web)
|
|
11
|
+
pnpm-workspace.yaml # web を workspace に。esbuild の postinstall 許可(必須)
|
|
12
|
+
webview2-bridge.gen.json # ジェネレータ設定(出力先・名前空間)
|
|
13
|
+
contract/contract.ts # zod による契約(唯一の正)。手で書く
|
|
14
|
+
contract/contract.schema.json# 生成
|
|
15
|
+
web/ # Vite + React。src/bridge.ts(transport 選択とモック)と src/main.tsx を手で書く
|
|
16
|
+
src/generated/ # 生成(TS 型)
|
|
17
|
+
dotnet/
|
|
18
|
+
Directory.Build.props # Option Strict On 等の共通設定
|
|
19
|
+
MyApp.sln
|
|
20
|
+
MyApp.Contract/ # netstandard2.0。Generated/ と Runtime/ は生成。手で書くものは無い
|
|
21
|
+
MyApp.Impl/ # net48。IXxxApi の実装を手で書く(DB / サーバーアクセスはここ)
|
|
22
|
+
MyApp.Host/ # net48 WinForms exe。MainForm.vb / Program.vb を手で書く。Bridge/ は生成
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
手で書くファイルは 5 つ: `contract.ts`、`bridge.ts`、`main.tsx`、`CustomersApi.vb`、`MainForm.vb`。
|
|
26
|
+
残りは生成物か、一度置いたら触らない設定ファイル。
|
|
27
|
+
|
|
28
|
+
## 前提ツール
|
|
29
|
+
|
|
30
|
+
| ツール | 用途 | 備考 |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| Node.js 22 以上 + pnpm 11(Corepack) | 生成、フロント開発 | `corepack enable` で pnpm が入る |
|
|
33
|
+
| .NET SDK 8 以上 | `dotnet build` / `dotnet run` | VS 2022 17.8 以降に同梱。VS 無しなら SDK 単体でよい |
|
|
34
|
+
| WebView2 Runtime | 実行 | Windows 11 は標準搭載 |
|
|
35
|
+
| Visual Studio 2022 | **任意**。フォームデザイナと GUI デバッガが要るときだけ | 「.NET デスクトップ開発」ワークロード |
|
|
36
|
+
|
|
37
|
+
## 初回
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
pnpm install # esbuild の postinstall 許可は pnpm-workspace.yaml に設定済み
|
|
41
|
+
pnpm gen # contract.ts → schema → TS 型 / VB 生成物 / VB ランタイム / WebViewBridge(10 ファイル)
|
|
42
|
+
pnpm dev # http://localhost:5173 をブラウザで開く。MemoryTransport のモックで動く
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Windows で実機(WebView2 内で VB と往復):
|
|
46
|
+
|
|
47
|
+
```bat
|
|
48
|
+
set WEBVIEW2_BRIDGE_DEV_URL=http://localhost:5173
|
|
49
|
+
dotnet run --project dotnet/MyApp.Host
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
PowerShell は `$env:WEBVIEW2_BRIDGE_DEV_URL="http://localhost:5173"`。バッジが `transport: webview2` になり、
|
|
53
|
+
`customers.list` で VB 側 `CustomersApi` の結果と progress が表示されれば OK。F12 で DevTools。
|
|
54
|
+
|
|
55
|
+
配布形態(環境変数なし):
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
pnpm build:web # → web/dist
|
|
59
|
+
dotnet build dotnet/MyApp.sln -c Release # dist を bin/Release/net48/wwwroot にコピーする
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`bin/Release/net48/MyApp.exe` を起動すると `https://app.local/index.html` から wwwroot が読まれる。
|
|
63
|
+
配布するのは `bin/Release/net48/` 一式(wwwroot を含む)。
|
|
64
|
+
|
|
65
|
+
## 日々のループ(API を 1 つ足す)
|
|
66
|
+
|
|
67
|
+
1. `contract/contract.ts` にメソッドを足す
|
|
68
|
+
2. `pnpm gen`(CI では `pnpm gen:check`)
|
|
69
|
+
3. `web/src/bridge.ts` のモックに同じメソッドを足し、画面を作る(ブラウザだけで進む)
|
|
70
|
+
4. `dotnet/MyApp.Impl/` に実装を書く。新しい namespace を足したら `MainForm.vb` の `dispatcher.Register(...)` も 1 行足す
|
|
71
|
+
5. Windows で `dotnet run` して実機確認
|
|
72
|
+
|
|
73
|
+
## Visual Studio はいつ要るか
|
|
74
|
+
|
|
75
|
+
ビルド・実行・生成はすべて VS 無し(VS Code + ターミナル)で進められる。VS を開くのは次のときだけ。
|
|
76
|
+
|
|
77
|
+
- **フォームデザイナ**で WinForms の部品(メニュー、NotifyIcon、ツールバー等)を置きたいとき。
|
|
78
|
+
この雛形の `MainForm.vb` はコードだけで WebView2 を Dock=Fill しているので、デザイナ無しで完結している
|
|
79
|
+
- VB 側に**ブレークポイント**を張って GUI デバッガで追いたいとき(`Debug.WriteLine` と WebView2 の DevTools で足りることが多い)
|
|
80
|
+
- 既存の旧スタイル .vbproj を含む**最終ビルド**(旧プロジェクトから Host を参照する等)
|
|
81
|
+
|
|
82
|
+
VS で開く場合は `dotnet/MyApp.sln` をそのまま開ける(SDK スタイル .vbproj)。
|
|
83
|
+
|
|
84
|
+
## 注意
|
|
85
|
+
|
|
86
|
+
- `MyApp.Host.vbproj` の `<PlatformTarget>x64</PlatformTarget>` を消して AnyCPU にしない。Windows の `dotnet build` で WebView2 のローダーが x86 だけになり、起動時に `BadImageFormatException` になる。32 ビット専用の DB ドライバ等が要るなら `x86` にする
|
|
87
|
+
- `pnpm-workspace.yaml` の `allowBuilds: { esbuild: true }` を消さない。pnpm 11 は postinstall を既定で止めるため、無いと gen が動かない
|
|
88
|
+
- `webview2-bridge.gen.json` の `ts.contractImport` は **生成ファイル(web/src/generated/)から見た相対パス**
|
|
89
|
+
- 生成物(`Generated/`、`Runtime/`、`Bridge/`、`web/src/generated/`、`contract.schema.json`)は手で編集しない。コミットはする
|
|
90
|
+
- ランタイムを上げるときは gen のバージョンを上げて `pnpm gen` を再実行する(`Runtime/` と `Bridge/` が更新される)
|
|
91
|
+
- 日付は ISO 8601 文字列で往復する。union / z.date 等は契約に使えない(gen がエラーで止める)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"contractVersion": 1,
|
|
4
|
+
"$defs": {
|
|
5
|
+
"Customer": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"id": {
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"name": {
|
|
12
|
+
"type": "string"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"required": [
|
|
16
|
+
"id",
|
|
17
|
+
"name"
|
|
18
|
+
],
|
|
19
|
+
"additionalProperties": false
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"methods": {
|
|
23
|
+
"customers": {
|
|
24
|
+
"list": {
|
|
25
|
+
"input": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"properties": {
|
|
28
|
+
"keyword": {
|
|
29
|
+
"type": "string"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": false
|
|
33
|
+
},
|
|
34
|
+
"output": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"properties": {
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": {
|
|
40
|
+
"$ref": "#/$defs/Customer"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"required": [
|
|
45
|
+
"items"
|
|
46
|
+
],
|
|
47
|
+
"additionalProperties": false
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"events": {
|
|
53
|
+
"progress": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"properties": {
|
|
56
|
+
"percent": {
|
|
57
|
+
"type": "number"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"required": [
|
|
61
|
+
"percent"
|
|
62
|
+
],
|
|
63
|
+
"additionalProperties": false
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineContract } from "@ishibashi0112/webview2-bridge-gen";
|
|
3
|
+
const Customer = z.object({ id: z.string(), name: z.string() }).meta({ id: "Customer" });
|
|
4
|
+
export const contract = defineContract({
|
|
5
|
+
methods: { customers: { list: { input: z.object({ keyword: z.string().optional() }), output: z.object({ items: z.array(Customer) }) } } },
|
|
6
|
+
events: { progress: z.object({ percent: z.number() }) },
|
|
7
|
+
});
|
|
8
|
+
export type Contract = typeof contract;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<Project>
|
|
2
|
+
<PropertyGroup>
|
|
3
|
+
<OptionStrict>On</OptionStrict>
|
|
4
|
+
<OptionExplicit>On</OptionExplicit>
|
|
5
|
+
<OptionInfer>On</OptionInfer>
|
|
6
|
+
<LangVersion>16.9</LangVersion>
|
|
7
|
+
<MyType Condition="'$(OutputType)' != 'WinExe'">Empty</MyType>
|
|
8
|
+
<EnableWindowsTargeting Condition="'$(OS)' != 'Windows_NT'">true</EnableWindowsTargeting>
|
|
9
|
+
</PropertyGroup>
|
|
10
|
+
</Project>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
' <auto-generated>
|
|
2
|
+
' This code was generated by @ishibashi0112/webview2-bridge-gen from contract.schema.json.
|
|
3
|
+
' DO NOT EDIT. Changes will be lost when `pnpm gen` runs.
|
|
4
|
+
' </auto-generated>
|
|
5
|
+
Option Strict On
|
|
6
|
+
Option Explicit On
|
|
7
|
+
Option Infer On
|
|
8
|
+
|
|
9
|
+
Imports System
|
|
10
|
+
Imports System.Runtime.CompilerServices
|
|
11
|
+
Imports WebView2Bridge.Runtime
|
|
12
|
+
|
|
13
|
+
Namespace Global.MyApp.Contract
|
|
14
|
+
|
|
15
|
+
''' <summary>契約の実装を Dispatcher に登録する拡張メソッド。dispatcher.Register(api) と書ける</summary>
|
|
16
|
+
Public Module DispatcherExtensions
|
|
17
|
+
|
|
18
|
+
''' <summary>契約に含まれる全メソッド名</summary>
|
|
19
|
+
Public ReadOnly MethodNames As String() = {"customers.list"}
|
|
20
|
+
|
|
21
|
+
''' <summary>"customers.*" の実装を登録する</summary>
|
|
22
|
+
<Extension>
|
|
23
|
+
Public Sub Register(dispatcher As Dispatcher, api As ICustomersApi)
|
|
24
|
+
If dispatcher Is Nothing Then Throw New ArgumentNullException(NameOf(dispatcher))
|
|
25
|
+
If api Is Nothing Then Throw New ArgumentNullException(NameOf(api))
|
|
26
|
+
dispatcher.RegisterHandler(Of CustomersListRequest, CustomersListResponse)("customers.list", AddressOf api.List)
|
|
27
|
+
End Sub
|
|
28
|
+
End Module
|
|
29
|
+
|
|
30
|
+
End Namespace
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
' <auto-generated>
|
|
2
|
+
' This code was generated by @ishibashi0112/webview2-bridge-gen from contract.schema.json.
|
|
3
|
+
' DO NOT EDIT. Changes will be lost when `pnpm gen` runs.
|
|
4
|
+
' </auto-generated>
|
|
5
|
+
Option Strict On
|
|
6
|
+
Option Explicit On
|
|
7
|
+
Option Infer On
|
|
8
|
+
|
|
9
|
+
Imports System
|
|
10
|
+
Imports System.Collections.Generic
|
|
11
|
+
Imports Newtonsoft.Json
|
|
12
|
+
Imports Newtonsoft.Json.Linq
|
|
13
|
+
|
|
14
|
+
Namespace Global.MyApp.Contract
|
|
15
|
+
|
|
16
|
+
Public Class Customer
|
|
17
|
+
<JsonProperty("id")>
|
|
18
|
+
Public Property Id As String
|
|
19
|
+
|
|
20
|
+
<JsonProperty("name")>
|
|
21
|
+
Public Property Name As String
|
|
22
|
+
End Class
|
|
23
|
+
|
|
24
|
+
Public Class CustomersListRequest
|
|
25
|
+
<JsonProperty("keyword", NullValueHandling:=NullValueHandling.Ignore)>
|
|
26
|
+
Public Property Keyword As String
|
|
27
|
+
End Class
|
|
28
|
+
|
|
29
|
+
Public Class CustomersListResponse
|
|
30
|
+
<JsonProperty("items")>
|
|
31
|
+
Public Property Items As List(Of Customer) = New List(Of Customer)()
|
|
32
|
+
End Class
|
|
33
|
+
|
|
34
|
+
Public Class ProgressEvent
|
|
35
|
+
<JsonProperty("percent")>
|
|
36
|
+
Public Property Percent As Double
|
|
37
|
+
End Class
|
|
38
|
+
|
|
39
|
+
End Namespace
|