@famibee/skynovel 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Button.js +36 -34
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +11 -6
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +13 -11
- package/dist/CmnInterface.js.map +1 -1
- package/dist/CmnLib.js +58 -56
- package/dist/CmnLib.js.map +1 -1
- package/dist/Config.js +9 -7
- package/dist/Config.js.map +1 -1
- package/dist/ConfigBase.js +52 -49
- package/dist/ConfigBase.js.map +1 -1
- package/dist/DebugMng.js +9 -6
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +6 -4
- package/dist/EventListenerCtn.js.map +1 -1
- package/dist/EventMng.js +522 -417
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +22 -20
- package/dist/Grammar.js.map +1 -1
- package/dist/GrpLayer.js +58 -57
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +66 -64
- package/dist/Layer.js.map +1 -1
- package/dist/LayerMng.js +461 -441
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +69 -67
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +23 -19
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +422 -418
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +4 -2
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +374 -370
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +643 -622
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +59 -60
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +135 -129
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +985 -950
- package/dist/SysBase.js.map +1 -1
- package/dist/TxtLayer.js +558 -551
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +47 -45
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +11 -9
- package/dist/gamepad.js +396 -660
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +2631 -2593
- package/dist/pixi.js.map +1 -1
- package/dist/platform.js +6 -4
- package/dist/platform.js.map +1 -1
- package/dist/rolldown-runtime.js +20 -0
- package/dist/web.js +418 -418
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +36 -34
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +11 -6
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +13 -11
- package/dist_app/CmnInterface.js.map +1 -1
- package/dist_app/CmnLib.js +58 -56
- package/dist_app/CmnLib.js.map +1 -1
- package/dist_app/Config.js +9 -7
- package/dist_app/Config.js.map +1 -1
- package/dist_app/ConfigBase.js +52 -49
- package/dist_app/ConfigBase.js.map +1 -1
- package/dist_app/DebugMng.js +9 -6
- package/dist_app/DebugMng.js.map +1 -1
- package/dist_app/EventListenerCtn.js +6 -4
- package/dist_app/EventListenerCtn.js.map +1 -1
- package/dist_app/EventMng.js +522 -417
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +22 -20
- package/dist_app/Grammar.js.map +1 -1
- package/dist_app/GrpLayer.js +58 -57
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +66 -64
- package/dist_app/Layer.js.map +1 -1
- package/dist_app/LayerMng.js +461 -441
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +69 -67
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +23 -19
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +422 -418
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +4 -2
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +374 -370
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +643 -622
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +59 -60
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +135 -129
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +985 -950
- package/dist_app/SysBase.js.map +1 -1
- package/dist_app/TxtLayer.js +558 -551
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +47 -45
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +62 -63
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +11 -11
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +11 -9
- package/dist_app/gamepad.js +396 -660
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +2028 -1990
- package/dist_app/pixi.js.map +1 -1
- package/dist_app/platform.js +6 -4
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +1 -1
- package/dist_app/preload.js.map +1 -1
- package/dist_app/rolldown-runtime.js +20 -0
- package/package.json +20 -21
package/dist_app/app.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import { g as
|
|
2
|
-
import { n as
|
|
3
|
-
import "./
|
|
4
|
-
import "./
|
|
5
|
-
import "./
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { t as Layer } from "./Layer.js";
|
|
9
|
-
var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
1
|
+
import { g as e, l as t, s as n, t as r, u as i } from "./CmnLib.js";
|
|
2
|
+
import { n as a } from "./CmnInterface.js";
|
|
3
|
+
import { t as o } from "./SysBase.js";
|
|
4
|
+
import { t as s } from "./DebugMng.js";
|
|
5
|
+
import { t as c } from "./Layer.js";
|
|
6
|
+
//#region src/sn/SysApp.ts
|
|
7
|
+
var { to_app: l } = globalThis, u = class extends o {
|
|
10
8
|
constructor(...[e = {}, t = {
|
|
11
9
|
cur: "prj/",
|
|
12
10
|
crypto: !1,
|
|
@@ -15,10 +13,10 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
15
13
|
super(e, t), this.loaded(e, t);
|
|
16
14
|
}
|
|
17
15
|
async loaded(...[t, n]) {
|
|
18
|
-
await super.loaded(t, n), this.#e = await
|
|
16
|
+
await super.loaded(t, n), this.#e = await l.getInfo(), r.isPackaged = this.#e.isPackaged, this.arg = {
|
|
19
17
|
...n,
|
|
20
|
-
cur: this.#e.getAppPath.replaceAll("\\", "/") + (
|
|
21
|
-
},
|
|
18
|
+
cur: this.#e.getAppPath.replaceAll("\\", "/") + (r.isPackaged ? "/doc/" : "/") + n.cur
|
|
19
|
+
}, l.on("log", (e, t) => console.info("main: %o", t)), this.$path_downloads = this.#e.downloads.replaceAll("\\", "/") + "/", r.isDbg = !!this.#e.env.SKYNOVEL_DBG && !r.isPackaged, r.isDbg && (this.extPort = e(this.#e.env.SKYNOVEL_PORT ?? "3776")), await this.run();
|
|
22
20
|
}
|
|
23
21
|
#e = {
|
|
24
22
|
getAppPath: "",
|
|
@@ -31,30 +29,30 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
31
29
|
arch: ""
|
|
32
30
|
};
|
|
33
31
|
fetch = (e) => fetch(e, { cache: "no-store" });
|
|
34
|
-
ensureFile =
|
|
32
|
+
ensureFile = l.ensureFile;
|
|
35
33
|
async readFile(e, t) {
|
|
36
34
|
return Promise.resolve("");
|
|
37
35
|
}
|
|
38
|
-
writeFile =
|
|
39
|
-
appendFile =
|
|
40
|
-
outputFile =
|
|
36
|
+
writeFile = l.writeFile;
|
|
37
|
+
appendFile = l.appendFile;
|
|
38
|
+
outputFile = l.outputFile;
|
|
41
39
|
isApp = !0;
|
|
42
40
|
$path_userdata = "";
|
|
43
41
|
$path_downloads = "";
|
|
44
42
|
async initVal(e, n) {
|
|
45
|
-
e["const.sn.isDebugger"] = !1, this.$path_userdata =
|
|
46
|
-
|
|
43
|
+
e["const.sn.isDebugger"] = !1, this.$path_userdata = r.isDbg ? this.#e.getAppPath.slice(0, -3) + ".vscode/" : this.#e.userData.replaceAll("\\", "/") + "/", this.flushSub = () => {
|
|
44
|
+
l.flush(JSON.parse(JSON.stringify(this.data)));
|
|
47
45
|
}, await this.#t();
|
|
48
|
-
let i = e["const.sn.isFirstBoot"] = await
|
|
49
|
-
if (i) this.data.sys =
|
|
46
|
+
let i = e["const.sn.isFirstBoot"] = await l.Store_isEmpty();
|
|
47
|
+
if (i) this.data.sys = a(), this.data.mark = {}, this.data.kidoku = {};
|
|
50
48
|
else {
|
|
51
|
-
let e = await
|
|
49
|
+
let e = await l.Store_get();
|
|
52
50
|
this.data.sys = e.sys, this.data.mark = e.mark, this.data.kidoku = e.kidoku;
|
|
53
51
|
}
|
|
54
|
-
let o =
|
|
55
|
-
|
|
52
|
+
let o = t(this.data.sys, "const.sn.nativeWindow.x", 0), s = t(this.data.sys, "const.sn.nativeWindow.y", 0), c = this.data.sys["const.sn.nativeWindow.w"] || r.stageW, u = this.data.sys["const.sn.nativeWindow.h"] || r.stageH;
|
|
53
|
+
l.on("save_win_inf", (t, { x: r, y: i, w: a, h: o }) => {
|
|
56
54
|
this.data.sys["const.sn.nativeWindow.x"] = r, this.data.sys["const.sn.nativeWindow.y"] = i, this.data.sys["const.sn.nativeWindow.w"] = a, this.data.sys["const.sn.nativeWindow.h"] = o, e["const.sn.screenResolutionX"] = screen.availWidth, e["const.sn.screenResolutionY"] = screen.availHeight, n(this.data);
|
|
57
|
-
}), await
|
|
55
|
+
}), await l.inited(this.cfg.oCfg, {
|
|
58
56
|
c: i,
|
|
59
57
|
x: o,
|
|
60
58
|
y: s,
|
|
@@ -62,16 +60,16 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
62
60
|
h: u
|
|
63
61
|
});
|
|
64
62
|
}
|
|
65
|
-
#t = () =>
|
|
63
|
+
#t = () => l.Store({
|
|
66
64
|
cwd: this.$path_userdata + "storage",
|
|
67
65
|
name: this.arg.crypto ? "data_" : "data",
|
|
68
66
|
encryptionKey: this.arg.crypto ? this.stk() : void 0
|
|
69
67
|
});
|
|
70
68
|
init(e, t, n) {
|
|
71
69
|
let r = super.init(e, t, n);
|
|
72
|
-
document.body.style.backgroundColor = "#000",
|
|
70
|
+
document.body.style.backgroundColor = "#000", l.on("shutdown", (e) => this.main?.destroy());
|
|
73
71
|
let i = new MouseEvent("click");
|
|
74
|
-
return
|
|
72
|
+
return l.on("fire", (e, t) => this.fire(t, i)), r;
|
|
75
73
|
}
|
|
76
74
|
cvsResize() {
|
|
77
75
|
if (super.cvsResize(), !this.main) return;
|
|
@@ -82,18 +80,18 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
82
80
|
}
|
|
83
81
|
copyBMFolder = (e, t) => {
|
|
84
82
|
let n = `${this.$path_userdata}storage/${String(e)}/`, r = `${this.$path_userdata}storage/${String(t)}/`;
|
|
85
|
-
|
|
86
|
-
e && await
|
|
83
|
+
l.existsSync(n).then(async (e) => {
|
|
84
|
+
e && await l.copy(n, r);
|
|
87
85
|
});
|
|
88
86
|
};
|
|
89
87
|
eraseBMFolder = (e) => {
|
|
90
|
-
|
|
88
|
+
l.remove(`${this.$path_userdata}storage/${String(e)}/`);
|
|
91
89
|
};
|
|
92
|
-
close = () => (
|
|
93
|
-
_export = () => (
|
|
94
|
-
|
|
90
|
+
close = () => (l.win_close(), !1);
|
|
91
|
+
_export = () => (l.zip(this.$path_userdata + "storage/", this.$path_downloads + (this.arg.crypto ? "" : "no_crypto_") + this.cfg.headNs + i("-", "_", "") + ".spd").then(() => {
|
|
92
|
+
r.debugLog && console.log("プレイデータをエクスポートしました"), this.fire("sn:exported", new MouseEvent("click"));
|
|
95
93
|
}), !1);
|
|
96
|
-
_import = () => (
|
|
94
|
+
_import = () => (l.showOpenDialog({
|
|
97
95
|
title: "play data import",
|
|
98
96
|
filters: [{
|
|
99
97
|
name: "sn import",
|
|
@@ -103,26 +101,26 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
103
101
|
}).then(async ({ canceled: e, filePaths: [t] }) => {
|
|
104
102
|
if (e) return;
|
|
105
103
|
let n = () => this.flush();
|
|
106
|
-
this.flush = () => {}, await
|
|
107
|
-
let i = await
|
|
108
|
-
this.data.sys = i.sys, this.data.mark = i.mark, this.data.kidoku = i.kidoku, this.flush = n, this.flush(), this.val.updateData(i),
|
|
104
|
+
this.flush = () => {}, await l.unzip(t, this.$path_userdata + "storage/"), await this.#t();
|
|
105
|
+
let i = await l.Store_get();
|
|
106
|
+
this.data.sys = i.sys, this.data.mark = i.mark, this.data.kidoku = i.kidoku, this.flush = n, this.flush(), this.val.updateData(i), r.debugLog && console.log("プレイデータをインポートしました"), this.fire("sn:imported", new MouseEvent("click"));
|
|
109
107
|
}).catch((e) => console.log(`[import] err: ${String(e)}`)), !1);
|
|
110
108
|
navigate_to = (e) => {
|
|
111
109
|
let { url: t } = e;
|
|
112
110
|
if (!t) throw "[navigate_to] urlは必須です";
|
|
113
|
-
return
|
|
111
|
+
return l.navigate_to(t), !1;
|
|
114
112
|
};
|
|
115
113
|
titleSub(e) {
|
|
116
|
-
|
|
114
|
+
l.win_setTitle(e);
|
|
117
115
|
}
|
|
118
|
-
tglFlscr_sub = () =>
|
|
119
|
-
this.isFullScr = !e, await
|
|
116
|
+
tglFlscr_sub = () => l.isSimpleFullScreen().then(async (e) => {
|
|
117
|
+
this.isFullScr = !e, await l.setSimpleFullScreen(this.isFullScr);
|
|
120
118
|
});
|
|
121
119
|
update_check = (e) => {
|
|
122
120
|
let { url: t } = e;
|
|
123
121
|
if (!t) throw "[update_check] urlは必須です";
|
|
124
122
|
if (!t.endsWith("/")) throw "[update_check] urlの末尾は/にして下さい";
|
|
125
|
-
return
|
|
123
|
+
return r.debugLog && s.myTrace(`[update_check] url=${t}`, "D"), this.fetch(t + "_index.json").then(async (e) => {
|
|
126
124
|
let n = {
|
|
127
125
|
title: "アプリ更新",
|
|
128
126
|
icon: this.#e.getAppPath + "/app/icon.png",
|
|
@@ -132,10 +130,10 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
132
130
|
message: `アプリ【${this.cfg.oCfg.book.title}】に更新があります。\nダウンロードしますか?`
|
|
133
131
|
};
|
|
134
132
|
e.ok ? await this.#n(e, t, n) : await this.#r(t, n);
|
|
135
|
-
}).catch((e) =>
|
|
133
|
+
}).catch((e) => s.myTrace(String(e), "ET")), !1;
|
|
136
134
|
};
|
|
137
135
|
async #n(e, t, n) {
|
|
138
|
-
|
|
136
|
+
r.debugLog && s.myTrace("[update_check] _index.jsonを取得しました", "D");
|
|
139
137
|
let i = await e.json();
|
|
140
138
|
if (!await this.#i(i.version, n)) return;
|
|
141
139
|
let a = this.#e.platform + "_" + this.#e.arch, o = i[a];
|
|
@@ -144,18 +142,18 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
144
142
|
await this.#a(t, a + "-" + e, r), await this.#o(n);
|
|
145
143
|
return;
|
|
146
144
|
}
|
|
147
|
-
let c = "", u =
|
|
145
|
+
let c = "", u = RegExp("^" + this.#e.platform + "_"), d = Object.entries(i).flatMap(([e, { path: n, cn: r }]) => u.test(e) ? (c += "\n- " + n, this.#a(t, e + "-" + r, n)) : []);
|
|
148
146
|
n.message = `CPU = ${this.#e.arch}\nに対応するファイルが見つかりません。同じOSのファイルをすべてダウンロードしますか?`, n.detail = `${String(d.length)} 個ファイルがあります` + c;
|
|
149
|
-
let { response: f } = await
|
|
147
|
+
let { response: f } = await l.showMessageBox(n);
|
|
150
148
|
f > 0 || (await Promise.allSettled(d), await this.#o(n));
|
|
151
149
|
}
|
|
152
150
|
async #r(e, t) {
|
|
153
|
-
let n = await this.fetch(e + `latest${
|
|
151
|
+
let n = await this.fetch(e + `latest${r.isMac ? "-mac" : ""}.yml`);
|
|
154
152
|
if (!n.ok) {
|
|
155
|
-
if (
|
|
153
|
+
if (r.debugLog) throw "[update_check] .ymlが見つかりません";
|
|
156
154
|
return;
|
|
157
155
|
}
|
|
158
|
-
|
|
156
|
+
r.debugLog && s.myTrace("[update_check] .ymlを取得しました", "D");
|
|
159
157
|
let i = await n.text(), a = /version: (.+)/.exec(i)?.[1];
|
|
160
158
|
if (!a) throw "[update_check] .yml に version が見つかりません";
|
|
161
159
|
if (!await this.#i(a, t)) return;
|
|
@@ -163,11 +161,11 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
163
161
|
if (!o) throw "[update_check] path が見つかりません";
|
|
164
162
|
let [, c] = o;
|
|
165
163
|
if (!c) throw "[update_check] path が見つかりません.";
|
|
166
|
-
|
|
164
|
+
r.debugLog && s.myTrace(`[update_check] path=${c}`, "D");
|
|
167
165
|
let l = /sha512: (.+)/.exec(i);
|
|
168
166
|
if (!l) throw "[update_check] sha512 が見つかりません";
|
|
169
167
|
let [, u] = l;
|
|
170
|
-
|
|
168
|
+
r.debugLog && s.myTrace(`[update_check] sha=${u ?? ""}=`, "D");
|
|
171
169
|
let [, d, f] = /(.+)(\.\w+)/.exec(c) ?? [
|
|
172
170
|
"",
|
|
173
171
|
"",
|
|
@@ -177,36 +175,37 @@ var { to_app } = globalThis, SysApp = class extends SysBase {
|
|
|
177
175
|
}
|
|
178
176
|
async #i(e, t) {
|
|
179
177
|
let n = this.#e.getVersion;
|
|
180
|
-
if (
|
|
178
|
+
if (r.debugLog && s.myTrace(`[update_check] 現在ver=${n} 新規ver=${e}`, "D"), e === n) return r.debugLog && s.myTrace("[update_check] バージョン更新なし", "I"), !1;
|
|
181
179
|
t.detail = `現在 NOW ver ${n}\n新規 NEW ver ${e}`;
|
|
182
|
-
let { response: i } = await
|
|
183
|
-
return i > 0 ? !1 : (
|
|
180
|
+
let { response: i } = await l.showMessageBox(t);
|
|
181
|
+
return i > 0 ? !1 : (r.debugLog && s.myTrace("[update_check] アプリダウンロード開始", "D"), !0);
|
|
184
182
|
}
|
|
185
183
|
async #a(e, t, n) {
|
|
186
|
-
|
|
184
|
+
r.debugLog && s.myTrace(`[update_check] アプリファイルDL試行... url=${e + t}`, "D");
|
|
187
185
|
let i = await this.fetch(e + t);
|
|
188
186
|
if (!i.ok) {
|
|
189
|
-
|
|
187
|
+
r.debugLog && s.myTrace(`[update_check] アプリファイルが見つかりません url=${e + n}`);
|
|
190
188
|
return;
|
|
191
189
|
}
|
|
192
190
|
let a = this.#e.downloads + "/" + n;
|
|
193
|
-
|
|
191
|
+
r.debugLog && s.myTrace(`[update_check] pathDL=${a}`, "D"), await this.writeFile(a, new DataView(await i.arrayBuffer()));
|
|
194
192
|
}
|
|
195
193
|
async #o(e) {
|
|
196
|
-
|
|
194
|
+
r.debugLog && s.myTrace("アプリファイルを保存しました", "D"), e.buttons.pop(), e.message = `アプリ【${this.cfg.oCfg.book.title}】の更新パッケージを\nダウンロードしました`, await l.showMessageBox(e);
|
|
197
195
|
}
|
|
198
196
|
window = (e) => {
|
|
199
|
-
let i =
|
|
200
|
-
return
|
|
197
|
+
let i = t(e, "x", Number(this.val.getVal("sys:const.sn.nativeWindow.x", 0))), a = t(e, "y", Number(this.val.getVal("sys:const.sn.nativeWindow.y", 0))), o = t(e, "w", Number(this.val.getVal("sys:const.sn.nativeWindow.w", r.stageW))), s = t(e, "h", Number(this.val.getVal("sys:const.sn.nativeWindow.h", r.stageH)));
|
|
198
|
+
return l.window(n(e, "centering", !1), i, a, r.stageW, r.stageH), this.val.setVal_Nochk("sys", "const.sn.nativeWindow.x", i), this.val.setVal_Nochk("sys", "const.sn.nativeWindow.y", a), this.val.setVal_Nochk("sys", "const.sn.nativeWindow.w", o), this.val.setVal_Nochk("sys", "const.sn.nativeWindow.h", s), this.flush(), !1;
|
|
201
199
|
};
|
|
202
200
|
capturePage(e, t, n, r) {
|
|
203
|
-
|
|
201
|
+
l.capturePage(e, t, n).then(() => r());
|
|
204
202
|
}
|
|
205
203
|
async savePic(e, t) {
|
|
206
204
|
let n = t.slice(t.indexOf(",", 20) + 1);
|
|
207
|
-
await this.ensureFile(e), await this.writeFile(e, n),
|
|
205
|
+
await this.ensureFile(e), await this.writeFile(e, n), r.debugLog && console.log(`画像ファイル ${e} を保存しました`);
|
|
208
206
|
}
|
|
209
207
|
};
|
|
210
|
-
|
|
208
|
+
//#endregion
|
|
209
|
+
export { r as CmnLib, c as Layer, u as SysApp, n as argChk_Boolean, t as argChk_Num };
|
|
211
210
|
|
|
212
211
|
//# sourceMappingURL=app.js.map
|
package/dist_app/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","names":["#hInfo","#setStore","mbo: MessageBoxOptions","#idxjs_found","#idxjs_not_found","#dl_start","#dl_app","#dl_comp","a: Promise<void>[]"],"sources":["../src/sn/SysApp.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {T_HINFO} from '../appMain_cmn';\nimport {SysBase} from './SysBase';\nimport {CmnLib, getDateStr, argChk_Boolean, argChk_Num, uint} from './CmnLib';\nimport type {T_HTag, TTag} from './Grammar';\nimport type {T_Variable, T_Data4Vari, T_SysBaseParams, T_SysBaseLoadedParams, T_H_TMP_DATA} from './CmnInterface';\nimport {creSYS_DATA} from './CmnInterface';\nimport type {HPROC, SAVE_WIN_INF} from '../preload';\nimport {DebugMng} from './DebugMng';\nconst {to_app} = <{to_app: HPROC;}><unknown>globalThis;\n\nimport type {Application} from 'pixi.js';\nimport type {IpcRendererEvent, MessageBoxOptions} from 'electron/renderer';\nimport type {readFile} from 'fs-extra';\n\n\ntype T_upd__index_json_pkg = {\n\t[pkg_name: string]: {\n\t\tpath\t: string;\n\t\tsize\t: number;\n\t\tsha512\t: string;\n\t\tcn\t\t: string;\n\t};\n\t// 'win32_x64': {\n\t// \t'path': 'xxx-1.0.0-x64.exe',\n\t// \t'size': 23892...,\n\t// \t'sha512': 'GVaqx...',\n\t// \t'cn': 'YTNm...'\n\t// }\n}\ntype T_upd__index_json = T_upd__index_json_pkg & {\n\tversion\t: string;\n\tname\t: string;\n}\n\n\n\t// console.log はアプリのコンソールに出る\nexport class SysApp extends SysBase {\n\tconstructor(...[hPlg = {}, arg = {cur: 'prj/', crypto: false, dip: ''}]: T_SysBaseParams) {\t// DOMContentLoaded は呼び出し側でやる\n\t\tsuper(hPlg, arg);\n\n\t\tvoid this.loaded(hPlg, arg);\n\t}\n\tprotected override async loaded(...[hPlg, arg]: T_SysBaseLoadedParams) {\n\t\tawait super.loaded(hPlg, arg);\n\n\t\tthis.#hInfo = await to_app.getInfo();\n\t\tCmnLib.isPackaged = this.#hInfo.isPackaged;\n\t\tthis.arg = {...arg, cur: this.#hInfo.getAppPath.replaceAll('\\\\', '/') + (CmnLib.isPackaged ?'/doc/' :'/')+ arg.cur};\n\n\t\tto_app.on('log', (_: IpcRendererEvent, arg: unknown)=> console.info('main: %o', arg));\n\n\t\tthis.$path_downloads = this.#hInfo.downloads.replaceAll('\\\\', '/') +'/';\n\n\t\tCmnLib.isDbg = Boolean(this.#hInfo.env.SKYNOVEL_DBG) && ! CmnLib.isPackaged;\t// 配布版では無効\n\t\tif (CmnLib.isDbg) this.extPort = uint(this.#hInfo.env.SKYNOVEL_PORT ?? '3776');\n\n\t\tawait this.run();\n\t}\n\t#hInfo: T_HINFO = {\n\t\tgetAppPath\t: '',\n\t\tisPackaged\t: false,\n\t\tdownloads\t: '',\n\t\tuserData\t: '',\n\t\tgetVersion\t: '',\n\t\tenv\t\t\t: {},\n\t\tplatform\t: '',\n\t\tarch\t\t: '',\n\t};\n\n\n\toverride\treadonly\tfetch = (url: string)=> fetch(url, {cache: 'no-store'});\n\n\toverride\treadonly\tensureFile\t= to_app.ensureFile;\n\tprotected\tasync readFile(_path: string, _encoding: Parameters<typeof readFile>[1]): Promise<string> {return Promise.resolve('')}\n\tprotected\treadonly\twriteFile\t= to_app.writeFile;\n\toverride\treadonly\tappendFile\t= to_app.appendFile;\n\toverride\treadonly\toutputFile\t= to_app.outputFile;\n\n\toverride readonly\tisApp = true;\n\tprotected \toverride $path_userdata\t\t= '';\n\tprotected\toverride $path_downloads\t= '';\n\n\toverride async\tinitVal(hTmp: T_H_TMP_DATA, comp: (data: T_Data4Vari)=> void) {\n\t\t// システム情報\n\t\thTmp['const.sn.isDebugger'] = false;\n\t\t\t// システムがデバッグ用の特別なバージョンか\n\t\t\t// AIRNovel の const.flash.system.Capabilities.isDebugger\n\n\t\tthis.$path_userdata\t= CmnLib.isDbg\n\t\t\t? this.#hInfo.getAppPath.slice(0, -3) +'.vscode/'\t// /doc → /\n\t\t\t: this.#hInfo.userData.replaceAll('\\\\', '/') +'/';\n\n\t\tthis.flushSub = ()=> {\n\t\t\tvoid to_app.flush(JSON.parse(JSON.stringify(this.data)));\n\t\t}\t// 関数や undefined を無視してくれるので、structuredClone() よりいい動作\n\t\tawait this.#setStore();\n\n\t\tconst first = hTmp['const.sn.isFirstBoot']\n\t\t= await to_app.Store_isEmpty();\n\t\tif (first) {\n\t\t\t// データがない(初回起動)場合の処理\n\t\t\tthis.data.sys = creSYS_DATA();\n\t\t\tthis.data.mark = {};\n\t\t\tthis.data.kidoku = {};\n\t\t}\n\t\telse {\n\t\t\t// データがある場合の処理\n\t\t\tconst o = await to_app.Store_get();\n\t\t\tthis.data.sys = o.sys;\n\t\t\tthis.data.mark = o.mark;\n\t\t\tthis.data.kidoku = o.kidoku;\n\t\t}\n\n\t\t// ウインドウ位置\n\t\tconst x = argChk_Num(this.data.sys, 'const.sn.nativeWindow.x', 0);\n\t\t//const x = Number(this.val.getVal(\t// ここではまだ使えない\n\t\tconst y = argChk_Num(this.data.sys, 'const.sn.nativeWindow.y', 0);\n\t\tconst w = this.data.sys['const.sn.nativeWindow.w'] || CmnLib.stageW;\n\t\tconst h = this.data.sys['const.sn.nativeWindow.h'] || CmnLib.stageH;\n\n\t\tto_app.on('save_win_inf', (_e, {x, y, w, h}: SAVE_WIN_INF)=> {\n// // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n// console.log(`fn:SysApp.ts save_win_inf (${x},${y},${w},${h})`);\n\t\t\tthis.data.sys['const.sn.nativeWindow.x'] = x;\n\t\t\tthis.data.sys['const.sn.nativeWindow.y'] = y;\n\t\t\tthis.data.sys['const.sn.nativeWindow.w'] = w;\n\t\t\tthis.data.sys['const.sn.nativeWindow.h'] = h;\n\n\t\t\t// ・画面サイズ:screen.width ウインドウが表示されているディスプレイのサイズ\n\t\t\t//\t※ macOSなら【設定】-【ディスプレイ】-【使用形態】のイメージボタンにホバーすると出る数字と同じ\n// DebugMng.myTrace(`fn:SysApp.ts 画面サイズ(${String(screen.width)} x ${String(screen.height)}) 利用可能領域(${String(screen.availWidth)} x ${String(screen.availHeight)})`, 'W');\n\t\t\thTmp['const.sn.screenResolutionX'] = screen.availWidth;\t// 画面の最大水平解像度\n\t\t\thTmp['const.sn.screenResolutionY'] = screen.availHeight;\t// 画面の最大垂直解像度\n\t\t\t\t// AIRNovel の const.flash.system.Capabilities.screenResolutionX、Y\n\t\t\t\t// 上のメニューバーは含んでいない(たぶん an も)。含むのは workAreaSize\n\n\t\t\tcomp(this.data);\n\t\t});\n\n// console.log(`fn:SysApp.ts to_app.inited(${x},${y},${w},${h})`);\n\t\tawait to_app.inited(this.cfg.oCfg, {c: first, x, y, w, h});\n\t}\n\treadonly\t#setStore = ()=> to_app.Store({\n\t\tcwd\t: this.$path_userdata +'storage',\n\t\tname: this.arg.crypto ?'data_' :'data',\n\t\tencryptionKey: this.arg.crypto ?this.stk() :undefined,\n\t});\n\n\n\toverride init(hTag: T_HTag, appPixi: Application, val: T_Variable) {\n\t\tconst ret = super.init(hTag, appPixi, val);\n\t\tdocument.body.style.backgroundColor = '#000';\n\n\t\tto_app.on('shutdown', (_e)=> this.main?.destroy());\n\n\t\tconst ev = new MouseEvent('click');\n\t\tto_app.on('fire', (_e, KEY: string)=> this.fire(KEY, ev));\n\t\t//to_app.on('call', (_e: IpcRendererEvent, fn: string, label: string)=> main.resumeByJumpOrCall({fn, label}));\t// 実験・保留コード。セキュリティ懸念\n\n\t\treturn ret;\n\t}\n\n\n\toverride cvsResize() {\n\t\tsuper.cvsResize();\n\n\t\tif (! this.main) return;\n\t\tconst cvs = this.main.cvs;\n\t\tconst ps = cvs.parentElement?.style;\n\t\tif (! ps) return;\n\t\tconst s = cvs.style;\n\t\tif (this.isFullScr) {\n\t\t\tps.position = '';\t// SysBaseを上書き\n\t\t\tps.width = '';\n\t\t\tps.height= '';\n\n\t\t\ts.position = 'fixed';\n\t\t\ts.left = `${String(this.ofsLeft4elm)}px`;\n\t\t\ts.top = `${String(this.ofsTop4elm)}px`;\n\t\t}\n\t\telse {\n\t\t\tps.position = 'relative';\t// SysBaseを上書き\n\t\t\tps.width = `${String(this.cvsWidth)}px`;\n\t\t\tps.height= `${String(this.cvsHeight)}px`;\n\n\t\t\ts.position = 'relative';\n\t\t\ts.left = '';\n\t\t\ts.top = '';\n\t\t}\n\t}\n\n\n\toverride readonly copyBMFolder = (from: number, to: number)=> {\n\t\tconst path_from = `${this.$path_userdata}storage/${String(from)}/`;\n\t\tconst path_to = `${this.$path_userdata}storage/${String(to)}/`;\n\t\tvoid to_app.existsSync(path_from).then(async v=> {\n\t\t\tif (v) await to_app.copy(path_from, path_to);\n\t\t});\n\t};\n\toverride readonly eraseBMFolder = (place: number)=> {\n\t\tvoid to_app.remove(`${this.$path_userdata}storage/${String(place)}/`);\n\t};\n\n\t// アプリの終了\n\tprotected override readonly\tclose = ()=> {to_app.win_close(); return false}\n\n\t// プレイデータをエクスポート\n\tprotected override readonly\t_export = ()=> {\n\t\tvoid to_app.zip(\n\t\t\tthis.$path_userdata +'storage/',\n\t\t\tthis.$path_downloads + (this.arg.crypto ?'' :'no_crypto_')\n\t\t\t+ this.cfg.headNs + getDateStr('-', '_', '') +'.spd',\n\t\t).then(()=> {\n\t\t\tif (CmnLib.debugLog) console.log('プレイデータをエクスポートしました');\n\t\t\tthis.fire('sn:exported', new MouseEvent('click'));\t// 末尾に処理\n\t\t});\n\n\t\treturn false;\n\t}\n\n\t// プレイデータをインポート\n\tprotected override readonly\t_import = ()=> {\n\t\tto_app.showOpenDialog({\n\t\t\ttitle\t: 'play data import',\n\t\t\tfilters\t: [{name: 'sn import', extensions: ['spd']}],\n\t\t\tproperties: [\n\t\t\t\t'openFile',\t// - ファイルを選択するのを許可します。\n\t\t\t\t// openDirectory - ディレクトリを選択するのを許可します。\n\t\t\t\t// multiSelections - 複数のパスを選択するのを許可します。\n\t\t\t],\n\t\t}).then(async ({canceled, filePaths: [inp]})=> {\n\t\t\tif (canceled) return;\n\n\t\t\tconst bkFlush = ()=> this.flush();\n\t\t\tthis.flush = ()=> { /* empty */ };\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tawait to_app.unzip(inp!, this.$path_userdata +'storage/');\n\n\t\t\tawait this.#setStore();\n\t\t\tconst o = await to_app.Store_get();\n\t\t\tthis.data.sys = o.sys;\n\t\t\tthis.data.mark = o.mark;\n\t\t\tthis.data.kidoku = o.kidoku;\n\t\t\tthis.flush = bkFlush;\n\t\t\tthis.flush();\n\t\t\tthis.val.updateData(o);\n\n\t\t\tif (CmnLib.debugLog) console.log('プレイデータをインポートしました');\n\t\t\tthis.fire('sn:imported', new MouseEvent('click'));\n\t\t})\n\t\t.catch((e: unknown)=> console.log(`[import] err: ${String(e)}`));\n\n\t\treturn false;\n\t}\n\n\t// URLを開く\n\tprotected override readonly\tnavigate_to: TTag = hArg=> {\n\t\tconst {url} = hArg;\n\t\tif (! url) throw '[navigate_to] urlは必須です';\n\n\t\tto_app.navigate_to(url);\n\n\t\treturn false;\n\t}\n\t// タイトル指定\n\tprotected override titleSub(title: string) {to_app.win_setTitle(title)}\n\n\t// 全画面状態切替\n\tprotected override readonly\ttglFlscr_sub\n\t= ()=> to_app.isSimpleFullScreen().then(async isFS=> {\n\t\tthis.isFullScr = ! isFS;\n\t\tawait to_app.setSimpleFullScreen(this.isFullScr);\n\t});\n\n\t// 更新チェック\n\tprotected override readonly\tupdate_check: TTag = hArg=> {\n\t\tconst {url} = hArg;\n\t\tif (! url) throw '[update_check] urlは必須です';\n\t\tif (! url.endsWith('/')) throw '[update_check] urlの末尾は/にして下さい';\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] url=${url}`, 'D');\n\n\t\tvoid this.fetch(url +'_index.json')\n\t\t.then(async o=> {\n\t\t\tconst mbo: MessageBoxOptions = {\n\t\t\t\ttitle\t: 'アプリ更新',\n\t\t\t\ticon\t: this.#hInfo.getAppPath +'/app/icon.png',\n\t\t\t\tbuttons\t: ['OK', 'Cancel'],\n\t\t\t\tdefaultId\t: 0,\n\t\t\t\tcancelId\t: 1,\n\t\t\t\tmessage\t: `アプリ【${this.cfg.oCfg.book.title}】に更新があります。\\nダウンロードしますか?`,\n\t\t\t};\n\t\t\tif (o.ok) await this.#idxjs_found(o, url, mbo);\n\t\t\telse await this.#idxjs_not_found(url, mbo);\n\t\t})\n\t\t.catch((e: unknown)=> DebugMng.myTrace(String(e), 'ET'));\n\n\t\treturn false;\n\t}\n\tasync #idxjs_found(o: Response, url: string, mbo: MessageBoxOptions) {\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] _index.jsonを取得しました', 'D');\n\t\tconst oIdx = <T_upd__index_json>await o.json();\n\t\tif (! await this.#dl_start(oIdx.version, mbo)) return;\n\n\t\tconst key = this.#hInfo.platform +'_'+ this.#hInfo.arch;\n\t//\tconst key = this.#hInfo.platform +'_@'+ this.#hInfo.arch;\n\t\t\t// アーキテクチャがない場合の動作テスト\n\t\tconst k = oIdx[key];\n\t\tif (k) {\n\t\t\tconst {cn, path} = k;\n\t\t\tawait this.#dl_app(url, key +'-'+ cn, path);\n\t\t\tawait this.#dl_comp(mbo);\n\t\t\treturn;\n\t\t}\n\n\t\tlet d = '';\n\t\tconst regOldSameKey = new RegExp('^'+ this.#hInfo.platform +'_');\n\t\tconst a: Promise<void>[] = Object.entries(<{[nm: string]: {\n\t\t\tpath: string,\n\t\t\tcn\t: string,\n\t\t}}>oIdx)\n\t\t.flatMap(([nm, {path, cn}])=> {\n\t\t\tif (! regOldSameKey.test(nm)) return [];\n\t\t\td += '\\n- '+ path;\n\t\t\treturn this.#dl_app(url, nm +'-'+ cn, path);\n\t\t});\n\n\t\tmbo.message = `CPU = ${this.#hInfo.arch}\\nに対応するファイルが見つかりません。同じOSのファイルをすべてダウンロードしますか?`;\n\t\tmbo.detail = `${String(a.length)} 個ファイルがあります`+ d;\n\t\tconst {response} = await to_app.showMessageBox(mbo);\n\t\tif (response > 0) return;\n\n\t\tawait Promise.allSettled(a);\n\t\tawait this.#dl_comp(mbo);\n\t}\n\tasync #idxjs_not_found(url: string, mbo: MessageBoxOptions) {\n\t\tconst o = await this.fetch(url +`latest${CmnLib.isMac ?'-mac' :''}.yml`);\n\t\tif (! o.ok) {\n\t\t\tif (CmnLib.debugLog) throw '[update_check] .ymlが見つかりません';\n\t\t\treturn;\n\t\t}\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] .ymlを取得しました', 'D');\n\t\tconst sYml = await o.text();\n\t\tconst mv = /version: (.+)/.exec(sYml);\n\t\tconst mv2 = mv?.[1];\n\t\tif (! mv2) throw '[update_check] .yml に version が見つかりません';\n\n\t\tif (! await this.#dl_start(mv2, mbo)) return;\n\n\n\t\tconst mp = /path: (.+)/.exec(sYml);\n\t\tif (! mp) throw '[update_check] path が見つかりません';\n\t\tconst [,path] = mp;\n\t\tif (! path) throw '[update_check] path が見つかりません.';\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] path=${path}`, 'D');\n\n\t\tconst mc = /sha512: (.+)/.exec(sYml);\n\t\tif (! mc) throw '[update_check] sha512 が見つかりません';\n\t\tconst [,sha] = mc;\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] sha=${sha ?? ''}=`, 'D');\n\n\t\t// (id)-1.0.0-arm64.dmg\n\t\tconst [,id, arch] = /(.+)(\\.\\w+)/.exec(path) ?? ['', '', ''];\n\t\tawait this.#dl_app(url, id + '-' + this.#hInfo.arch + arch, path);\n\t\tawait this.#dl_comp(mbo);\n\t}\n\n\tasync #dl_start(netver: string, mbo: MessageBoxOptions): Promise<boolean> {\n\t\tconst appver = this.#hInfo.getVersion;\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] 現在ver=${appver} 新規ver=${netver}`, 'D');\n\t\tif (netver === appver) {\n\t\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] バージョン更新なし', 'I');\n\t\t\treturn false;\n\t\t}\n\n\t\tmbo.detail = `現在 NOW ver ${appver}\\n新規 NEW ver ${netver}`;\n\t\tconst {response} = await to_app.showMessageBox(mbo);\n\t\tif (response > 0) return false;\n\n\t\t// アプリダウンロード\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] アプリダウンロード開始', 'D');\n\n\t\treturn true;\n\t}\n\tasync #dl_app(url: string, urlApp: string, fn: string) {\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] アプリファイルDL試行... url=${url + urlApp}`, 'D');\n\t\tconst o = await this.fetch(url + urlApp);\n\t\tif (! o.ok) {\n\t\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] アプリファイルが見つかりません url=${url + fn}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pathDL = this.#hInfo.downloads +'/'+ fn;\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] pathDL=${pathDL}`, 'D');\n\n\t\tawait this.writeFile(pathDL, new DataView(await o.arrayBuffer()));\n\t}\n\tasync #dl_comp(mbo: MessageBoxOptions) {\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('アプリファイルを保存しました', 'D');\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tmbo.buttons!.pop();\n\t\tmbo.message = `アプリ【${this.cfg.oCfg.book.title}】の更新パッケージを\\nダウンロードしました`;\n//\t\t\tmbo.message = `アプリ【${this.cfg.oCfg.book.title}】の更新パッケージを\\nダウンロードしました`+ (isOk ?'' :'が、破損しています。\\n開発元に連絡してください');\n\t\tawait to_app.showMessageBox(mbo);\n\t}\n\n\t// アプリウインドウ設定\n\tprotected override readonly\twindow: TTag = hArg=> {\n\t\tconst x = argChk_Num(hArg, 'x', Number(this.val.getVal('sys:const.sn.nativeWindow.x', 0)));\n\t\tconst y = argChk_Num(hArg, 'y', Number(this.val.getVal('sys:const.sn.nativeWindow.y', 0)));\n\t\tconst w = argChk_Num(hArg, 'w', Number(this.val.getVal('sys:const.sn.nativeWindow.w', CmnLib.stageW)));\n\t\tconst h = argChk_Num(hArg, 'h', Number(this.val.getVal('sys:const.sn.nativeWindow.h', CmnLib.stageH)));\n\t\tto_app.window(argChk_Boolean(hArg, 'centering', false), x, y, CmnLib.stageW, CmnLib.stageH);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.x', x);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.y', y);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.w', w);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.h', h);\n\t\tthis.flush();\n\n\t\treturn false;\n\t}\n\n\toverride capturePage(path: string, w: number, h: number, fnc: ()=> void) {\n\t\tvoid to_app.capturePage(path, w, h).then(()=> fnc());\n\t}\n\n\toverride async savePic(path: string, data_url: string) {\n\t\tconst bs64 = data_url.slice(data_url.indexOf(',', 20) +1);\n\t\tawait this.ensureFile(path);\n\t\tawait this.writeFile(path, bs64);\n\t\tif (CmnLib.debugLog) console.log(`画像ファイル ${path} を保存しました`);\n\t}\n\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","names":["#hInfo","#setStore","#idxjs_found","#idxjs_not_found","#dl_start","#dl_app","#dl_comp"],"sources":["../src/sn/SysApp.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport type {T_HINFO} from '../appMain_cmn';\nimport {SysBase} from './SysBase';\nimport {CmnLib, getDateStr, argChk_Boolean, argChk_Num, uint} from './CmnLib';\nimport type {T_HTag, TTag} from './Grammar';\nimport type {T_Variable, T_Data4Vari, T_SysBaseParams, T_SysBaseLoadedParams, T_H_TMP_DATA} from './CmnInterface';\nimport {creSYS_DATA} from './CmnInterface';\nimport type {HPROC, SAVE_WIN_INF} from '../preload';\nimport {DebugMng} from './DebugMng';\nconst {to_app} = <{to_app: HPROC;}><unknown>globalThis;\n\nimport type {Application} from 'pixi.js';\nimport type {IpcRendererEvent, MessageBoxOptions} from 'electron/renderer';\nimport type {readFile} from 'fs-extra';\n\n\ntype T_upd__index_json_pkg = {\n\t[pkg_name: string]: {\n\t\tpath\t: string;\n\t\tsize\t: number;\n\t\tsha512\t: string;\n\t\tcn\t\t: string;\n\t};\n\t// 'win32_x64': {\n\t// \t'path': 'xxx-1.0.0-x64.exe',\n\t// \t'size': 23892...,\n\t// \t'sha512': 'GVaqx...',\n\t// \t'cn': 'YTNm...'\n\t// }\n}\ntype T_upd__index_json = T_upd__index_json_pkg & {\n\tversion\t: string;\n\tname\t: string;\n}\n\n\n\t// console.log はアプリのコンソールに出る\nexport class SysApp extends SysBase {\n\tconstructor(...[hPlg = {}, arg = {cur: 'prj/', crypto: false, dip: ''}]: T_SysBaseParams) {\t// DOMContentLoaded は呼び出し側でやる\n\t\tsuper(hPlg, arg);\n\n\t\tvoid this.loaded(hPlg, arg);\n\t}\n\tprotected override async loaded(...[hPlg, arg]: T_SysBaseLoadedParams) {\n\t\tawait super.loaded(hPlg, arg);\n\n\t\tthis.#hInfo = await to_app.getInfo();\n\t\tCmnLib.isPackaged = this.#hInfo.isPackaged;\n\t\tthis.arg = {...arg, cur: this.#hInfo.getAppPath.replaceAll('\\\\', '/') + (CmnLib.isPackaged ?'/doc/' :'/')+ arg.cur};\n\n\t\tto_app.on('log', (_: IpcRendererEvent, arg: unknown)=> console.info('main: %o', arg));\n\n\t\tthis.$path_downloads = this.#hInfo.downloads.replaceAll('\\\\', '/') +'/';\n\n\t\tCmnLib.isDbg = Boolean(this.#hInfo.env.SKYNOVEL_DBG) && ! CmnLib.isPackaged;\t// 配布版では無効\n\t\tif (CmnLib.isDbg) this.extPort = uint(this.#hInfo.env.SKYNOVEL_PORT ?? '3776');\n\n\t\tawait this.run();\n\t}\n\t#hInfo: T_HINFO = {\n\t\tgetAppPath\t: '',\n\t\tisPackaged\t: false,\n\t\tdownloads\t: '',\n\t\tuserData\t: '',\n\t\tgetVersion\t: '',\n\t\tenv\t\t\t: {},\n\t\tplatform\t: '',\n\t\tarch\t\t: '',\n\t};\n\n\n\toverride\treadonly\tfetch = (url: string)=> fetch(url, {cache: 'no-store'});\n\n\toverride\treadonly\tensureFile\t= to_app.ensureFile;\n\tprotected\tasync readFile(_path: string, _encoding: Parameters<typeof readFile>[1]): Promise<string> {return Promise.resolve('')}\n\tprotected\treadonly\twriteFile\t= to_app.writeFile;\n\toverride\treadonly\tappendFile\t= to_app.appendFile;\n\toverride\treadonly\toutputFile\t= to_app.outputFile;\n\n\toverride readonly\tisApp = true;\n\tprotected \toverride $path_userdata\t\t= '';\n\tprotected\toverride $path_downloads\t= '';\n\n\toverride async\tinitVal(hTmp: T_H_TMP_DATA, comp: (data: T_Data4Vari)=> void) {\n\t\t// システム情報\n\t\thTmp['const.sn.isDebugger'] = false;\n\t\t\t// システムがデバッグ用の特別なバージョンか\n\t\t\t// AIRNovel の const.flash.system.Capabilities.isDebugger\n\n\t\tthis.$path_userdata\t= CmnLib.isDbg\n\t\t\t? this.#hInfo.getAppPath.slice(0, -3) +'.vscode/'\t// /doc → /\n\t\t\t: this.#hInfo.userData.replaceAll('\\\\', '/') +'/';\n\n\t\tthis.flushSub = ()=> {\n\t\t\tvoid to_app.flush(JSON.parse(JSON.stringify(this.data)));\n\t\t}\t// 関数や undefined を無視してくれるので、structuredClone() よりいい動作\n\t\tawait this.#setStore();\n\n\t\tconst first = hTmp['const.sn.isFirstBoot']\n\t\t= await to_app.Store_isEmpty();\n\t\tif (first) {\n\t\t\t// データがない(初回起動)場合の処理\n\t\t\tthis.data.sys = creSYS_DATA();\n\t\t\tthis.data.mark = {};\n\t\t\tthis.data.kidoku = {};\n\t\t}\n\t\telse {\n\t\t\t// データがある場合の処理\n\t\t\tconst o = await to_app.Store_get();\n\t\t\tthis.data.sys = o.sys;\n\t\t\tthis.data.mark = o.mark;\n\t\t\tthis.data.kidoku = o.kidoku;\n\t\t}\n\n\t\t// ウインドウ位置\n\t\tconst x = argChk_Num(this.data.sys, 'const.sn.nativeWindow.x', 0);\n\t\t//const x = Number(this.val.getVal(\t// ここではまだ使えない\n\t\tconst y = argChk_Num(this.data.sys, 'const.sn.nativeWindow.y', 0);\n\t\tconst w = this.data.sys['const.sn.nativeWindow.w'] || CmnLib.stageW;\n\t\tconst h = this.data.sys['const.sn.nativeWindow.h'] || CmnLib.stageH;\n\n\t\tto_app.on('save_win_inf', (_e, {x, y, w, h}: SAVE_WIN_INF)=> {\n// // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n// console.log(`fn:SysApp.ts save_win_inf (${x},${y},${w},${h})`);\n\t\t\tthis.data.sys['const.sn.nativeWindow.x'] = x;\n\t\t\tthis.data.sys['const.sn.nativeWindow.y'] = y;\n\t\t\tthis.data.sys['const.sn.nativeWindow.w'] = w;\n\t\t\tthis.data.sys['const.sn.nativeWindow.h'] = h;\n\n\t\t\t// ・画面サイズ:screen.width ウインドウが表示されているディスプレイのサイズ\n\t\t\t//\t※ macOSなら【設定】-【ディスプレイ】-【使用形態】のイメージボタンにホバーすると出る数字と同じ\n// DebugMng.myTrace(`fn:SysApp.ts 画面サイズ(${String(screen.width)} x ${String(screen.height)}) 利用可能領域(${String(screen.availWidth)} x ${String(screen.availHeight)})`, 'W');\n\t\t\thTmp['const.sn.screenResolutionX'] = screen.availWidth;\t// 画面の最大水平解像度\n\t\t\thTmp['const.sn.screenResolutionY'] = screen.availHeight;\t// 画面の最大垂直解像度\n\t\t\t\t// AIRNovel の const.flash.system.Capabilities.screenResolutionX、Y\n\t\t\t\t// 上のメニューバーは含んでいない(たぶん an も)。含むのは workAreaSize\n\n\t\t\tcomp(this.data);\n\t\t});\n\n// console.log(`fn:SysApp.ts to_app.inited(${x},${y},${w},${h})`);\n\t\tawait to_app.inited(this.cfg.oCfg, {c: first, x, y, w, h});\n\t}\n\treadonly\t#setStore = ()=> to_app.Store({\n\t\tcwd\t: this.$path_userdata +'storage',\n\t\tname: this.arg.crypto ?'data_' :'data',\n\t\tencryptionKey: this.arg.crypto ?this.stk() :undefined,\n\t});\n\n\n\toverride init(hTag: T_HTag, appPixi: Application, val: T_Variable) {\n\t\tconst ret = super.init(hTag, appPixi, val);\n\t\tdocument.body.style.backgroundColor = '#000';\n\n\t\tto_app.on('shutdown', (_e)=> this.main?.destroy());\n\n\t\tconst ev = new MouseEvent('click');\n\t\tto_app.on('fire', (_e, KEY: string)=> this.fire(KEY, ev));\n\t\t//to_app.on('call', (_e: IpcRendererEvent, fn: string, label: string)=> main.resumeByJumpOrCall({fn, label}));\t// 実験・保留コード。セキュリティ懸念\n\n\t\treturn ret;\n\t}\n\n\n\toverride cvsResize() {\n\t\tsuper.cvsResize();\n\n\t\tif (! this.main) return;\n\t\tconst cvs = this.main.cvs;\n\t\tconst ps = cvs.parentElement?.style;\n\t\tif (! ps) return;\n\t\tconst s = cvs.style;\n\t\tif (this.isFullScr) {\n\t\t\tps.position = '';\t// SysBaseを上書き\n\t\t\tps.width = '';\n\t\t\tps.height= '';\n\n\t\t\ts.position = 'fixed';\n\t\t\ts.left = `${String(this.ofsLeft4elm)}px`;\n\t\t\ts.top = `${String(this.ofsTop4elm)}px`;\n\t\t}\n\t\telse {\n\t\t\tps.position = 'relative';\t// SysBaseを上書き\n\t\t\tps.width = `${String(this.cvsWidth)}px`;\n\t\t\tps.height= `${String(this.cvsHeight)}px`;\n\n\t\t\ts.position = 'relative';\n\t\t\ts.left = '';\n\t\t\ts.top = '';\n\t\t}\n\t}\n\n\n\toverride readonly copyBMFolder = (from: number, to: number)=> {\n\t\tconst path_from = `${this.$path_userdata}storage/${String(from)}/`;\n\t\tconst path_to = `${this.$path_userdata}storage/${String(to)}/`;\n\t\tvoid to_app.existsSync(path_from).then(async v=> {\n\t\t\tif (v) await to_app.copy(path_from, path_to);\n\t\t});\n\t};\n\toverride readonly eraseBMFolder = (place: number)=> {\n\t\tvoid to_app.remove(`${this.$path_userdata}storage/${String(place)}/`);\n\t};\n\n\t// アプリの終了\n\tprotected override readonly\tclose = ()=> {to_app.win_close(); return false}\n\n\t// プレイデータをエクスポート\n\tprotected override readonly\t_export = ()=> {\n\t\tvoid to_app.zip(\n\t\t\tthis.$path_userdata +'storage/',\n\t\t\tthis.$path_downloads + (this.arg.crypto ?'' :'no_crypto_')\n\t\t\t+ this.cfg.headNs + getDateStr('-', '_', '') +'.spd',\n\t\t).then(()=> {\n\t\t\tif (CmnLib.debugLog) console.log('プレイデータをエクスポートしました');\n\t\t\tthis.fire('sn:exported', new MouseEvent('click'));\t// 末尾に処理\n\t\t});\n\n\t\treturn false;\n\t}\n\n\t// プレイデータをインポート\n\tprotected override readonly\t_import = ()=> {\n\t\tto_app.showOpenDialog({\n\t\t\ttitle\t: 'play data import',\n\t\t\tfilters\t: [{name: 'sn import', extensions: ['spd']}],\n\t\t\tproperties: [\n\t\t\t\t'openFile',\t// - ファイルを選択するのを許可します。\n\t\t\t\t// openDirectory - ディレクトリを選択するのを許可します。\n\t\t\t\t// multiSelections - 複数のパスを選択するのを許可します。\n\t\t\t],\n\t\t}).then(async ({canceled, filePaths: [inp]})=> {\n\t\t\tif (canceled) return;\n\n\t\t\tconst bkFlush = ()=> this.flush();\n\t\t\tthis.flush = ()=> { /* empty */ };\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\tawait to_app.unzip(inp!, this.$path_userdata +'storage/');\n\n\t\t\tawait this.#setStore();\n\t\t\tconst o = await to_app.Store_get();\n\t\t\tthis.data.sys = o.sys;\n\t\t\tthis.data.mark = o.mark;\n\t\t\tthis.data.kidoku = o.kidoku;\n\t\t\tthis.flush = bkFlush;\n\t\t\tthis.flush();\n\t\t\tthis.val.updateData(o);\n\n\t\t\tif (CmnLib.debugLog) console.log('プレイデータをインポートしました');\n\t\t\tthis.fire('sn:imported', new MouseEvent('click'));\n\t\t})\n\t\t.catch((e: unknown)=> console.log(`[import] err: ${String(e)}`));\n\n\t\treturn false;\n\t}\n\n\t// URLを開く\n\tprotected override readonly\tnavigate_to: TTag = hArg=> {\n\t\tconst {url} = hArg;\n\t\tif (! url) throw '[navigate_to] urlは必須です';\n\n\t\tto_app.navigate_to(url);\n\n\t\treturn false;\n\t}\n\t// タイトル指定\n\tprotected override titleSub(title: string) {to_app.win_setTitle(title)}\n\n\t// 全画面状態切替\n\tprotected override readonly\ttglFlscr_sub\n\t= ()=> to_app.isSimpleFullScreen().then(async isFS=> {\n\t\tthis.isFullScr = ! isFS;\n\t\tawait to_app.setSimpleFullScreen(this.isFullScr);\n\t});\n\n\t// 更新チェック\n\tprotected override readonly\tupdate_check: TTag = hArg=> {\n\t\tconst {url} = hArg;\n\t\tif (! url) throw '[update_check] urlは必須です';\n\t\tif (! url.endsWith('/')) throw '[update_check] urlの末尾は/にして下さい';\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] url=${url}`, 'D');\n\n\t\tvoid this.fetch(url +'_index.json')\n\t\t.then(async o=> {\n\t\t\tconst mbo: MessageBoxOptions = {\n\t\t\t\ttitle\t: 'アプリ更新',\n\t\t\t\ticon\t: this.#hInfo.getAppPath +'/app/icon.png',\n\t\t\t\tbuttons\t: ['OK', 'Cancel'],\n\t\t\t\tdefaultId\t: 0,\n\t\t\t\tcancelId\t: 1,\n\t\t\t\tmessage\t: `アプリ【${this.cfg.oCfg.book.title}】に更新があります。\\nダウンロードしますか?`,\n\t\t\t};\n\t\t\tif (o.ok) await this.#idxjs_found(o, url, mbo);\n\t\t\telse await this.#idxjs_not_found(url, mbo);\n\t\t})\n\t\t.catch((e: unknown)=> DebugMng.myTrace(String(e), 'ET'));\n\n\t\treturn false;\n\t}\n\tasync #idxjs_found(o: Response, url: string, mbo: MessageBoxOptions) {\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] _index.jsonを取得しました', 'D');\n\t\tconst oIdx = <T_upd__index_json>await o.json();\n\t\tif (! await this.#dl_start(oIdx.version, mbo)) return;\n\n\t\tconst key = this.#hInfo.platform +'_'+ this.#hInfo.arch;\n\t//\tconst key = this.#hInfo.platform +'_@'+ this.#hInfo.arch;\n\t\t\t// アーキテクチャがない場合の動作テスト\n\t\tconst k = oIdx[key];\n\t\tif (k) {\n\t\t\tconst {cn, path} = k;\n\t\t\tawait this.#dl_app(url, key +'-'+ cn, path);\n\t\t\tawait this.#dl_comp(mbo);\n\t\t\treturn;\n\t\t}\n\n\t\tlet d = '';\n\t\tconst regOldSameKey = new RegExp('^'+ this.#hInfo.platform +'_');\n\t\tconst a: Promise<void>[] = Object.entries(<{[nm: string]: {\n\t\t\tpath: string,\n\t\t\tcn\t: string,\n\t\t}}>oIdx)\n\t\t.flatMap(([nm, {path, cn}])=> {\n\t\t\tif (! regOldSameKey.test(nm)) return [];\n\t\t\td += '\\n- '+ path;\n\t\t\treturn this.#dl_app(url, nm +'-'+ cn, path);\n\t\t});\n\n\t\tmbo.message = `CPU = ${this.#hInfo.arch}\\nに対応するファイルが見つかりません。同じOSのファイルをすべてダウンロードしますか?`;\n\t\tmbo.detail = `${String(a.length)} 個ファイルがあります`+ d;\n\t\tconst {response} = await to_app.showMessageBox(mbo);\n\t\tif (response > 0) return;\n\n\t\tawait Promise.allSettled(a);\n\t\tawait this.#dl_comp(mbo);\n\t}\n\tasync #idxjs_not_found(url: string, mbo: MessageBoxOptions) {\n\t\tconst o = await this.fetch(url +`latest${CmnLib.isMac ?'-mac' :''}.yml`);\n\t\tif (! o.ok) {\n\t\t\tif (CmnLib.debugLog) throw '[update_check] .ymlが見つかりません';\n\t\t\treturn;\n\t\t}\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] .ymlを取得しました', 'D');\n\t\tconst sYml = await o.text();\n\t\tconst mv = /version: (.+)/.exec(sYml);\n\t\tconst mv2 = mv?.[1];\n\t\tif (! mv2) throw '[update_check] .yml に version が見つかりません';\n\n\t\tif (! await this.#dl_start(mv2, mbo)) return;\n\n\n\t\tconst mp = /path: (.+)/.exec(sYml);\n\t\tif (! mp) throw '[update_check] path が見つかりません';\n\t\tconst [,path] = mp;\n\t\tif (! path) throw '[update_check] path が見つかりません.';\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] path=${path}`, 'D');\n\n\t\tconst mc = /sha512: (.+)/.exec(sYml);\n\t\tif (! mc) throw '[update_check] sha512 が見つかりません';\n\t\tconst [,sha] = mc;\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] sha=${sha ?? ''}=`, 'D');\n\n\t\t// (id)-1.0.0-arm64.dmg\n\t\tconst [,id, arch] = /(.+)(\\.\\w+)/.exec(path) ?? ['', '', ''];\n\t\tawait this.#dl_app(url, id + '-' + this.#hInfo.arch + arch, path);\n\t\tawait this.#dl_comp(mbo);\n\t}\n\n\tasync #dl_start(netver: string, mbo: MessageBoxOptions): Promise<boolean> {\n\t\tconst appver = this.#hInfo.getVersion;\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] 現在ver=${appver} 新規ver=${netver}`, 'D');\n\t\tif (netver === appver) {\n\t\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] バージョン更新なし', 'I');\n\t\t\treturn false;\n\t\t}\n\n\t\tmbo.detail = `現在 NOW ver ${appver}\\n新規 NEW ver ${netver}`;\n\t\tconst {response} = await to_app.showMessageBox(mbo);\n\t\tif (response > 0) return false;\n\n\t\t// アプリダウンロード\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('[update_check] アプリダウンロード開始', 'D');\n\n\t\treturn true;\n\t}\n\tasync #dl_app(url: string, urlApp: string, fn: string) {\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] アプリファイルDL試行... url=${url + urlApp}`, 'D');\n\t\tconst o = await this.fetch(url + urlApp);\n\t\tif (! o.ok) {\n\t\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] アプリファイルが見つかりません url=${url + fn}`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pathDL = this.#hInfo.downloads +'/'+ fn;\n\t\tif (CmnLib.debugLog) DebugMng.myTrace(`[update_check] pathDL=${pathDL}`, 'D');\n\n\t\tawait this.writeFile(pathDL, new DataView(await o.arrayBuffer()));\n\t}\n\tasync #dl_comp(mbo: MessageBoxOptions) {\n\t\tif (CmnLib.debugLog) DebugMng.myTrace('アプリファイルを保存しました', 'D');\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tmbo.buttons!.pop();\n\t\tmbo.message = `アプリ【${this.cfg.oCfg.book.title}】の更新パッケージを\\nダウンロードしました`;\n//\t\t\tmbo.message = `アプリ【${this.cfg.oCfg.book.title}】の更新パッケージを\\nダウンロードしました`+ (isOk ?'' :'が、破損しています。\\n開発元に連絡してください');\n\t\tawait to_app.showMessageBox(mbo);\n\t}\n\n\t// アプリウインドウ設定\n\tprotected override readonly\twindow: TTag = hArg=> {\n\t\tconst x = argChk_Num(hArg, 'x', Number(this.val.getVal('sys:const.sn.nativeWindow.x', 0)));\n\t\tconst y = argChk_Num(hArg, 'y', Number(this.val.getVal('sys:const.sn.nativeWindow.y', 0)));\n\t\tconst w = argChk_Num(hArg, 'w', Number(this.val.getVal('sys:const.sn.nativeWindow.w', CmnLib.stageW)));\n\t\tconst h = argChk_Num(hArg, 'h', Number(this.val.getVal('sys:const.sn.nativeWindow.h', CmnLib.stageH)));\n\t\tto_app.window(argChk_Boolean(hArg, 'centering', false), x, y, CmnLib.stageW, CmnLib.stageH);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.x', x);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.y', y);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.w', w);\n\t\tthis.val.setVal_Nochk('sys', 'const.sn.nativeWindow.h', h);\n\t\tthis.flush();\n\n\t\treturn false;\n\t}\n\n\toverride capturePage(path: string, w: number, h: number, fnc: ()=> void) {\n\t\tvoid to_app.capturePage(path, w, h).then(()=> fnc());\n\t}\n\n\toverride async savePic(path: string, data_url: string) {\n\t\tconst bs64 = data_url.slice(data_url.indexOf(',', 20) +1);\n\t\tawait this.ensureFile(path);\n\t\tawait this.writeFile(path, bs64);\n\t\tif (CmnLib.debugLog) console.log(`画像ファイル ${path} を保存しました`);\n\t}\n\n}\n"],"mappings":";;;;;;AAeA,IAAM,EAAC,cAAqC,YA4B/B,IAAb,cAA4B,EAAQ;CACnC,YAAY,GAAG,CAAC,IAAO,CAAC,GAAG,IAAM;EAAC,KAAK;EAAQ,QAAQ;EAAO,KAAK;CAAE,IAAqB;EAGzF,AAFA,MAAM,GAAM,CAAG,GAEf,KAAU,OAAO,GAAM,CAAG;CAC3B;CACA,MAAyB,OAAO,GAAG,CAAC,GAAM,IAA6B;EActE,AAbA,MAAM,MAAM,OAAO,GAAM,CAAG,GAE5B,KAAKA,KAAS,MAAM,EAAO,QAAQ,GACnC,EAAO,aAAa,KAAKA,GAAO,YAChC,KAAK,MAAM;GAAC,GAAG;GAAK,KAAK,KAAKA,GAAO,WAAW,WAAW,MAAM,GAAG,KAAK,EAAO,aAAY,UAAS,OAAM,EAAI;EAAG,GAElH,EAAO,GAAG,QAAQ,GAAqB,MAAgB,QAAQ,KAAK,YAAY,CAAG,CAAC,GAEpF,KAAK,kBAAkB,KAAKA,GAAO,UAAU,WAAW,MAAM,GAAG,IAAG,KAEpE,EAAO,QAAQ,EAAQ,KAAKA,GAAO,IAAI,gBAAiB,CAAE,EAAO,YAC7D,EAAO,UAAO,KAAK,UAAU,EAAK,KAAKA,GAAO,IAAI,iBAAiB,MAAM,IAE7E,MAAM,KAAK,IAAI;CAChB;CACA,KAAmB;EAClB,YAAa;EACb,YAAa;EACb,WAAY;EACZ,UAAW;EACX,YAAa;EACb,KAAQ,CAAC;EACT,UAAW;EACX,MAAQ;CACT;CAGA,SAA2B,MAAe,MAAM,GAAK,EAAC,OAAO,WAAU,CAAC;CAExE,aAA+B,EAAO;CACtC,MAAgB,SAAS,GAAe,GAA4D;EAAC,OAAO,QAAQ,QAAQ,EAAE;CAAC;CAC/H,YAA+B,EAAO;CACtC,aAA+B,EAAO;CACtC,aAA+B,EAAO;CAEtC,QAA0B;CAC1B,iBAAsC;CACtC,kBAAqC;CAErC,MAAe,QAAQ,GAAoB,GAAkC;EAa5E,AAXA,EAAK,yBAAyB,IAI9B,KAAK,iBAAiB,EAAO,QAC1B,KAAKA,GAAO,WAAW,MAAM,GAAG,EAAE,IAAG,aACrC,KAAKA,GAAO,SAAS,WAAW,MAAM,GAAG,IAAG,KAE/C,KAAK,iBAAgB;GACpB,EAAY,MAAM,KAAK,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC,CAAC;EACxD,GACA,MAAM,KAAKC,GAAU;EAErB,IAAM,IAAQ,EAAK,0BACjB,MAAM,EAAO,cAAc;EAC7B,IAAI,GAIH,AAFA,KAAK,KAAK,MAAM,EAAY,GAC5B,KAAK,KAAK,OAAO,CAAC,GAClB,KAAK,KAAK,SAAS,CAAC;OAEhB;GAEJ,IAAM,IAAI,MAAM,EAAO,UAAU;GAGjC,AAFA,KAAK,KAAK,MAAM,EAAE,KAClB,KAAK,KAAK,OAAO,EAAE,MACnB,KAAK,KAAK,SAAS,EAAE;EACtB;EAGA,IAAM,IAAI,EAAW,KAAK,KAAK,KAAK,2BAA2B,CAAC,GAE1D,IAAI,EAAW,KAAK,KAAK,KAAK,2BAA2B,CAAC,GAC1D,IAAI,KAAK,KAAK,IAAI,8BAA8B,EAAO,QACvD,IAAI,KAAK,KAAK,IAAI,8BAA8B,EAAO;EAsB7D,AApBA,EAAO,GAAG,iBAAiB,GAAI,EAAC,MAAG,MAAG,MAAG,WAAoB;GAgB5D,AAbA,KAAK,KAAK,IAAI,6BAA6B,GAC3C,KAAK,KAAK,IAAI,6BAA6B,GAC3C,KAAK,KAAK,IAAI,6BAA6B,GAC3C,KAAK,KAAK,IAAI,6BAA6B,GAK3C,EAAK,gCAAgC,OAAO,YAC5C,EAAK,gCAAgC,OAAO,aAI5C,EAAK,KAAK,IAAI;EACf,CAAC,GAGD,MAAM,EAAO,OAAO,KAAK,IAAI,MAAM;GAAC,GAAG;GAAO;GAAG;GAAG;GAAG;EAAC,CAAC;CAC1D;CACA,WAA0B,EAAO,MAAM;EACtC,KAAM,KAAK,iBAAgB;EAC3B,MAAM,KAAK,IAAI,SAAQ,UAAS;EAChC,eAAe,KAAK,IAAI,SAAQ,KAAK,IAAI,IAAG,KAAA;CAC7C,CAAC;CAGD,KAAc,GAAc,GAAsB,GAAiB;EAClE,IAAM,IAAM,MAAM,KAAK,GAAM,GAAS,CAAG;EAGzC,AAFA,SAAS,KAAK,MAAM,kBAAkB,QAEtC,EAAO,GAAG,aAAa,MAAM,KAAK,MAAM,QAAQ,CAAC;EAEjD,IAAM,IAAK,IAAI,WAAW,OAAO;EAIjC,OAHA,EAAO,GAAG,SAAS,GAAI,MAAe,KAAK,KAAK,GAAK,CAAE,CAAC,GAGjD;CACR;CAGA,YAAqB;EAGpB,IAFA,MAAM,UAAU,GAEZ,CAAE,KAAK,MAAM;EACjB,IAAM,IAAM,KAAK,KAAK,KAChB,IAAK,EAAI,eAAe;EAC9B,IAAI,CAAE,GAAI;EACV,IAAM,IAAI,EAAI;EACd,AAAI,KAAK,aACR,EAAG,WAAW,IACd,EAAG,QAAQ,IACX,EAAG,SAAQ,IAEX,EAAE,WAAW,SACb,EAAE,OAAO,GAAG,OAAO,KAAK,WAAW,EAAE,KACrC,EAAE,MAAO,GAAG,OAAO,KAAK,UAAU,EAAE,QAGpC,EAAG,WAAW,YACd,EAAG,QAAQ,GAAG,OAAO,KAAK,QAAQ,EAAE,KACpC,EAAG,SAAQ,GAAG,OAAO,KAAK,SAAS,EAAE,KAErC,EAAE,WAAW,YACb,EAAE,OAAO,IACT,EAAE,MAAO;CAEX;CAGA,gBAAkC,GAAc,MAAc;EAC7D,IAAM,IAAY,GAAG,KAAK,eAAe,UAAU,OAAO,CAAI,EAAE,IAC1D,IAAU,GAAG,KAAK,eAAe,UAAU,OAAO,CAAE,EAAE;EAC5D,EAAY,WAAW,CAAS,CAAC,CAAC,KAAK,OAAM,MAAI;GAChD,AAAI,KAAG,MAAM,EAAO,KAAK,GAAW,CAAO;EAC5C,CAAC;CACF;CACA,iBAAmC,MAAiB;EACnD,EAAY,OAAO,GAAG,KAAK,eAAe,UAAU,OAAO,CAAK,EAAE,EAAE;CACrE;CAGA,eAA0C,EAAO,UAAU,GAAU;CAGrE,iBACC,EAAY,IACX,KAAK,iBAAgB,YACrB,KAAK,mBAAmB,KAAK,IAAI,SAAQ,KAAI,gBAC3C,KAAK,IAAI,SAAS,EAAW,KAAK,KAAK,EAAE,IAAG,MAC/C,CAAC,CAAC,WAAU;EAEX,AADI,EAAO,YAAU,QAAQ,IAAI,mBAAmB,GACpD,KAAK,KAAK,eAAe,IAAI,WAAW,OAAO,CAAC;CACjD,CAAC,GAEM;CAIR,iBACC,EAAO,eAAe;EACrB,OAAQ;EACR,SAAU,CAAC;GAAC,MAAM;GAAa,YAAY,CAAC,KAAK;EAAC,CAAC;EACnD,YAAY,CACX,UAGD;CACD,CAAC,CAAC,CAAC,KAAK,OAAO,EAAC,aAAU,WAAW,CAAC,SAAS;EAC9C,IAAI,GAAU;EAEd,IAAM,UAAe,KAAK,MAAM;EAKhC,AAJA,KAAK,cAAa,CAAc,GAEhC,MAAM,EAAO,MAAM,GAAM,KAAK,iBAAgB,UAAU,GAExD,MAAM,KAAKA,GAAU;EACrB,IAAM,IAAI,MAAM,EAAO,UAAU;EASjC,AARA,KAAK,KAAK,MAAM,EAAE,KAClB,KAAK,KAAK,OAAO,EAAE,MACnB,KAAK,KAAK,SAAS,EAAE,QACrB,KAAK,QAAQ,GACb,KAAK,MAAM,GACX,KAAK,IAAI,WAAW,CAAC,GAEjB,EAAO,YAAU,QAAQ,IAAI,kBAAkB,GACnD,KAAK,KAAK,eAAe,IAAI,WAAW,OAAO,CAAC;CACjD,CAAC,CAAC,CACD,OAAO,MAAc,QAAQ,IAAI,iBAAiB,OAAO,CAAC,GAAG,CAAC,GAExD;CAIR,eAAgD,MAAO;EACtD,IAAM,EAAC,WAAO;EACd,IAAI,CAAE,GAAK,MAAM;EAIjB,OAFA,EAAO,YAAY,CAAG,GAEf;CACR;CAEA,SAA4B,GAAe;EAAC,EAAO,aAAa,CAAK;CAAC;CAGtE,qBACO,EAAO,mBAAmB,CAAC,CAAC,KAAK,OAAM,MAAO;EAEpD,AADA,KAAK,YAAY,CAAE,GACnB,MAAM,EAAO,oBAAoB,KAAK,SAAS;CAChD,CAAC;CAGD,gBAAiD,MAAO;EACvD,IAAM,EAAC,WAAO;EACd,IAAI,CAAE,GAAK,MAAM;EACjB,IAAI,CAAE,EAAI,SAAS,GAAG,GAAG,MAAM;EAkB/B,OAjBI,EAAO,YAAU,EAAS,QAAQ,sBAAsB,KAAO,GAAG,GAEtE,KAAU,MAAM,IAAK,aAAa,CAAC,CAClC,KAAK,OAAM,MAAI;GACf,IAAM,IAAyB;IAC9B,OAAQ;IACR,MAAO,KAAKD,GAAO,aAAY;IAC/B,SAAU,CAAC,MAAM,QAAQ;IACzB,WAAY;IACZ,UAAW;IACX,SAAU,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM;GAC3C;GACA,AAAI,EAAE,KAAI,MAAM,KAAKE,GAAa,GAAG,GAAK,CAAG,IACxC,MAAM,KAAKC,GAAiB,GAAK,CAAG;EAC1C,CAAC,CAAC,CACD,OAAO,MAAc,EAAS,QAAQ,OAAO,CAAC,GAAG,IAAI,CAAC,GAEhD;CACR;CACA,MAAMD,GAAa,GAAa,GAAa,GAAwB;EACpE,AAAI,EAAO,YAAU,EAAS,QAAQ,qCAAqC,GAAG;EAC9E,IAAM,IAA0B,MAAM,EAAE,KAAK;EAC7C,IAAI,CAAE,MAAM,KAAKE,GAAU,EAAK,SAAS,CAAG,GAAG;EAE/C,IAAM,IAAM,KAAKJ,GAAO,WAAU,MAAK,KAAKA,GAAO,MAG7C,IAAI,EAAK;EACf,IAAI,GAAG;GACN,IAAM,EAAC,OAAI,YAAQ;GAEnB,AADA,MAAM,KAAKK,GAAQ,GAAK,IAAK,MAAK,GAAI,CAAI,GAC1C,MAAM,KAAKC,GAAS,CAAG;GACvB;EACD;EAEA,IAAI,IAAI,IACF,IAAoB,OAAO,MAAK,KAAKN,GAAO,WAAU,GAAG,GACzD,IAAqB,OAAO,QAG/B,CAAI,CAAC,CACP,SAAS,CAAC,GAAI,EAAC,SAAM,aACf,EAAc,KAAK,CAAE,KAC3B,KAAK,SAAQ,GACN,KAAKK,GAAQ,GAAK,IAAI,MAAK,GAAI,CAAI,KAFL,CAAC,CAGtC;EAGD,AADA,EAAI,UAAU,SAAS,KAAKL,GAAO,KAAK,+CACxC,EAAI,SAAS,GAAG,OAAO,EAAE,MAAM,EAAE,eAAc;EAC/C,IAAM,EAAC,gBAAY,MAAM,EAAO,eAAe,CAAG;EAC9C,IAAW,MAEf,MAAM,QAAQ,WAAW,CAAC,GAC1B,MAAM,KAAKM,GAAS,CAAG;CACxB;CACA,MAAMH,GAAiB,GAAa,GAAwB;EAC3D,IAAM,IAAI,MAAM,KAAK,MAAM,IAAK,SAAS,EAAO,QAAO,SAAQ,GAAG,KAAK;EACvE,IAAI,CAAE,EAAE,IAAI;GACX,IAAI,EAAO,UAAU,MAAM;GAC3B;EACD;EACA,AAAI,EAAO,YAAU,EAAS,QAAQ,8BAA8B,GAAG;EACvE,IAAM,IAAO,MAAM,EAAE,KAAK,GAEpB,IADK,gBAAgB,KAAK,CACpB,CAAA,GAAK;EACjB,IAAI,CAAE,GAAK,MAAM;EAEjB,IAAI,CAAE,MAAM,KAAKC,GAAU,GAAK,CAAG,GAAG;EAGtC,IAAM,IAAK,aAAa,KAAK,CAAI;EACjC,IAAI,CAAE,GAAI,MAAM;EAChB,IAAM,GAAE,KAAQ;EAChB,IAAI,CAAE,GAAM,MAAM;EAClB,AAAI,EAAO,YAAU,EAAS,QAAQ,uBAAuB,KAAQ,GAAG;EAExE,IAAM,IAAK,eAAe,KAAK,CAAI;EACnC,IAAI,CAAE,GAAI,MAAM;EAChB,IAAM,GAAE,KAAO;EACf,AAAI,EAAO,YAAU,EAAS,QAAQ,sBAAsB,KAAO,GAAG,IAAI,GAAG;EAG7E,IAAM,GAAE,GAAI,KAAQ,cAAc,KAAK,CAAI,KAAK;GAAC;GAAI;GAAI;EAAE;EAE3D,AADA,MAAM,KAAKC,GAAQ,GAAK,IAAK,MAAM,KAAKL,GAAO,OAAO,GAAM,CAAI,GAChE,MAAM,KAAKM,GAAS,CAAG;CACxB;CAEA,MAAMF,GAAU,GAAgB,GAA0C;EACzE,IAAM,IAAS,KAAKJ,GAAO;EAE3B,IADI,EAAO,YAAU,EAAS,QAAQ,wBAAwB,EAAO,SAAS,KAAU,GAAG,GACvF,MAAW,GAEd,OADI,EAAO,YAAU,EAAS,QAAQ,4BAA4B,GAAG,GAC9D;EAGR,EAAI,SAAS,cAAc,EAAO,eAAe;EACjD,IAAM,EAAC,gBAAY,MAAM,EAAO,eAAe,CAAG;EAMlD,OALI,IAAW,IAAU,MAGrB,EAAO,YAAU,EAAS,QAAQ,8BAA8B,GAAG,GAEhE;CACR;CACA,MAAMK,GAAQ,GAAa,GAAgB,GAAY;EACtD,AAAI,EAAO,YAAU,EAAS,QAAQ,qCAAqC,IAAM,KAAU,GAAG;EAC9F,IAAM,IAAI,MAAM,KAAK,MAAM,IAAM,CAAM;EACvC,IAAI,CAAE,EAAE,IAAI;GACX,AAAI,EAAO,YAAU,EAAS,QAAQ,sCAAsC,IAAM,GAAI;GACtF;EACD;EAEA,IAAM,IAAS,KAAKL,GAAO,YAAW,MAAK;EAG3C,AAFI,EAAO,YAAU,EAAS,QAAQ,yBAAyB,KAAU,GAAG,GAE5E,MAAM,KAAK,UAAU,GAAQ,IAAI,SAAS,MAAM,EAAE,YAAY,CAAC,CAAC;CACjE;CACA,MAAMM,GAAS,GAAwB;EAOtC,AANI,EAAO,YAAU,EAAS,QAAQ,kBAAkB,GAAG,GAG3D,EAAI,QAAS,IAAI,GACjB,EAAI,UAAU,OAAO,KAAK,IAAI,KAAK,KAAK,MAAM,yBAE9C,MAAM,EAAO,eAAe,CAAG;CAChC;CAGA,UAA2C,MAAO;EACjD,IAAM,IAAI,EAAW,GAAM,KAAK,OAAO,KAAK,IAAI,OAAO,+BAA+B,CAAC,CAAC,CAAC,GACnF,IAAI,EAAW,GAAM,KAAK,OAAO,KAAK,IAAI,OAAO,+BAA+B,CAAC,CAAC,CAAC,GACnF,IAAI,EAAW,GAAM,KAAK,OAAO,KAAK,IAAI,OAAO,+BAA+B,EAAO,MAAM,CAAC,CAAC,GAC/F,IAAI,EAAW,GAAM,KAAK,OAAO,KAAK,IAAI,OAAO,+BAA+B,EAAO,MAAM,CAAC,CAAC;EAQrG,OAPA,EAAO,OAAO,EAAe,GAAM,aAAa,EAAK,GAAG,GAAG,GAAG,EAAO,QAAQ,EAAO,MAAM,GAC1F,KAAK,IAAI,aAAa,OAAO,2BAA2B,CAAC,GACzD,KAAK,IAAI,aAAa,OAAO,2BAA2B,CAAC,GACzD,KAAK,IAAI,aAAa,OAAO,2BAA2B,CAAC,GACzD,KAAK,IAAI,aAAa,OAAO,2BAA2B,CAAC,GACzD,KAAK,MAAM,GAEJ;CACR;CAEA,YAAqB,GAAc,GAAW,GAAW,GAAgB;EACxE,EAAY,YAAY,GAAM,GAAG,CAAC,CAAC,CAAC,WAAU,EAAI,CAAC;CACpD;CAEA,MAAe,QAAQ,GAAc,GAAkB;EACtD,IAAM,IAAO,EAAS,MAAM,EAAS,QAAQ,KAAK,EAAE,IAAG,CAAC;EAGxD,AAFA,MAAM,KAAK,WAAW,CAAI,GAC1B,MAAM,KAAK,UAAU,GAAM,CAAI,GAC3B,EAAO,YAAU,QAAQ,IAAI,UAAU,EAAK,SAAS;CAC1D;AAED"}
|