@dreamboard-games/cli 0.1.30-alpha.0 → 0.1.30-alpha.2
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 +179 -22
- package/dist/{chunk-TSJVWTJO.js → chunk-N7XPNNUI.js} +14 -12
- package/dist/chunk-N7XPNNUI.js.map +1 -0
- package/dist/chunk-SEGVTWSK.js +44 -0
- package/dist/{chunk-3XNJT3RK.js → chunk-TAQKH67O.js} +21279 -35845
- package/dist/chunk-TAQKH67O.js.map +1 -0
- package/dist/{global-config-UKSWNDTX.js → global-config-S4ZIPECE.js} +3 -3
- package/dist/index.js +955 -230
- package/dist/index.js.map +1 -1
- package/dist/internal.js +3 -4
- package/dist/{agent-verifier/keychain-backend-TNOPQV3Z.mjs → keychain-backend-HDF4TZDL.js} +2 -1
- package/dist/{agent-verifier/prompt-3BAINGAQ.mjs → prompt-NDV3AE5L.js} +2 -1
- package/package.json +6 -6
- package/skills/dreamboard/references/building-your-first-game.md +510 -0
- package/skills/dreamboard/references/cli.md +104 -0
- package/skills/dreamboard/references/game-interface.md +548 -0
- package/skills/dreamboard/references/manifest-authoring.md +597 -0
- package/skills/dreamboard/references/quickstart.md +66 -0
- package/skills/dreamboard/references/reducer.md +864 -0
- package/skills/dreamboard/references/rule-authoring.md +147 -0
- package/skills/dreamboard/references/testing.md +249 -0
- package/skills/dreamboard/scripts/events-extract.mjs +218 -0
- package/dist/agent-verifier/agent-workspace-verifier.mjs +0 -227
- package/dist/agent-verifier/chunk-2E5P5NWG.mjs +0 -835
- package/dist/agent-verifier/chunk-2GBBP27W.mjs +0 -301
- package/dist/agent-verifier/chunk-2NZNKIND.mjs +0 -166
- package/dist/agent-verifier/chunk-2QMNAVV4.mjs +0 -14522
- package/dist/agent-verifier/chunk-2SZHMP6F.mjs +0 -264
- package/dist/agent-verifier/chunk-54TAYXUD.mjs +0 -12
- package/dist/agent-verifier/chunk-6A5HRJMQ.mjs +0 -3174
- package/dist/agent-verifier/chunk-6UUJEYDV.mjs +0 -213
- package/dist/agent-verifier/chunk-7653FPGJ.mjs +0 -381
- package/dist/agent-verifier/chunk-BVVNBJM4.mjs +0 -221
- package/dist/agent-verifier/chunk-CEDUHGNH.mjs +0 -74
- package/dist/agent-verifier/chunk-CEQ2VJWN.mjs +0 -149
- package/dist/agent-verifier/chunk-CFU5EWIC.mjs +0 -69
- package/dist/agent-verifier/chunk-DTMJCPS4.mjs +0 -730
- package/dist/agent-verifier/chunk-EIQWDQWJ.mjs +0 -186
- package/dist/agent-verifier/chunk-EOQIV6PS.mjs +0 -649
- package/dist/agent-verifier/chunk-HBNDKQT5.mjs +0 -8381
- package/dist/agent-verifier/chunk-HJFQDSTU.mjs +0 -225
- package/dist/agent-verifier/chunk-LI3ZR3BI.mjs +0 -41
- package/dist/agent-verifier/chunk-LM3OZLZG.mjs +0 -48
- package/dist/agent-verifier/chunk-MINCYHXN.mjs +0 -106
- package/dist/agent-verifier/chunk-MRCUP5SW.mjs +0 -128
- package/dist/agent-verifier/chunk-PM3SVG6R.mjs +0 -38
- package/dist/agent-verifier/chunk-RBDDIIPM.mjs +0 -19
- package/dist/agent-verifier/chunk-RJBLBYHX.mjs +0 -1681
- package/dist/agent-verifier/chunk-SHUMAVAP.mjs +0 -59
- package/dist/agent-verifier/chunk-SYPLYRGB.mjs +0 -2812
- package/dist/agent-verifier/chunk-U6OJN7XS.mjs +0 -8092
- package/dist/agent-verifier/chunk-VYJTHSYR.mjs +0 -44
- package/dist/agent-verifier/chunk-XYDL7GY6.mjs +0 -10
- package/dist/agent-verifier/compile-WNCQQVOF.mjs +0 -313
- package/dist/agent-verifier/global-config-WX3ZZIVU.mjs +0 -17
- package/dist/agent-verifier/local-files-MTPLP62S.mjs +0 -46
- package/dist/agent-verifier/local-typecheck-QFYYAZOK.mjs +0 -9
- package/dist/agent-verifier/materialize-workspace-EWGZIVOY.mjs +0 -90
- package/dist/agent-verifier/project-state-7GR6BQTQ.mjs +0 -32
- package/dist/agent-verifier/reducer-bundle-preflight-C73LEXI2.mjs +0 -23
- package/dist/agent-verifier/reducer-contract-preflight-22X7DSZW.mjs +0 -10
- package/dist/agent-verifier/reducer-native-test-harness-GMWBUISX.mjs +0 -53
- package/dist/agent-verifier/static-scaffold-4YEQME5N.mjs +0 -28
- package/dist/agent-verifier/sync-LOQAH4RC.mjs +0 -594
- package/dist/agent-verifier/test-YOJERVHN.mjs +0 -356
- package/dist/agent-verifier/testing-5K2BJYF2.mjs +0 -674
- package/dist/agent-verifier/workspace-codegen-JDZJRSDV.mjs +0 -11
- package/dist/agent-verifier/workspace-dependencies-HZ6VVS4G.mjs +0 -14
- package/dist/chunk-2H7UOFLK.js +0 -11
- package/dist/chunk-3XNJT3RK.js.map +0 -1
- package/dist/chunk-7FOO4AJI.js +0 -50
- package/dist/chunk-7FOO4AJI.js.map +0 -1
- package/dist/chunk-TSJVWTJO.js.map +0 -1
- package/dist/internal.d.ts +0 -311
- package/dist/keychain-backend-JHTXAKWC.js +0 -135
- package/dist/prompt-GMZABCJC.js +0 -756
- package/dist/runtime-packages/ui-host-runtime/src/actor-principal.ts +0 -71
- package/dist/runtime-packages/ui-host-runtime/src/browser-interaction.ts +0 -139
- package/dist/runtime-packages/ui-host-runtime/src/components/host-controls.tsx +0 -374
- package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback-toaster.tsx +0 -266
- package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback.tsx +0 -212
- package/dist/runtime-packages/ui-host-runtime/src/components/host-primitives.tsx +0 -271
- package/dist/runtime-packages/ui-host-runtime/src/components/host-session-metadata.tsx +0 -135
- package/dist/runtime-packages/ui-host-runtime/src/components/index.ts +0 -5
- package/dist/runtime-packages/ui-host-runtime/src/components/perf-overlay.tsx +0 -194
- package/dist/runtime-packages/ui-host-runtime/src/gameplay-authority-transport.ts +0 -626
- package/dist/runtime-packages/ui-host-runtime/src/host-controls.tsx +0 -1
- package/dist/runtime-packages/ui-host-runtime/src/host-feedback.tsx +0 -1
- package/dist/runtime-packages/ui-host-runtime/src/host-session-transport.ts +0 -294
- package/dist/runtime-packages/ui-host-runtime/src/index.ts +0 -3
- package/dist/runtime-packages/ui-host-runtime/src/logger.ts +0 -11
- package/dist/runtime-packages/ui-host-runtime/src/perf.ts +0 -324
- package/dist/runtime-packages/ui-host-runtime/src/plugin-bridge.ts +0 -195
- package/dist/runtime-packages/ui-host-runtime/src/plugin-health-check.ts +0 -138
- package/dist/runtime-packages/ui-host-runtime/src/plugin-messages.ts +0 -159
- package/dist/runtime-packages/ui-host-runtime/src/plugin-session-gateway.ts +0 -551
- package/dist/runtime-packages/ui-host-runtime/src/runtime/index.ts +0 -13
- package/dist/runtime-packages/ui-host-runtime/src/screenshot/projection-to-snapshot.ts +0 -122
- package/dist/runtime-packages/ui-host-runtime/src/screenshot/static-store-api.ts +0 -26
- package/dist/runtime-packages/ui-host-runtime/src/session-ingress-controller.ts +0 -583
- package/dist/runtime-packages/ui-host-runtime/src/session-ingress.ts +0 -219
- package/dist/runtime-packages/ui-host-runtime/src/session-live-runtime.ts +0 -117
- package/dist/runtime-packages/ui-host-runtime/src/session-model.ts +0 -431
- package/dist/runtime-packages/ui-host-runtime/src/session-projection.ts +0 -211
- package/dist/runtime-packages/ui-host-runtime/src/session-recovery.ts +0 -80
- package/dist/runtime-packages/ui-host-runtime/src/session-state-reducer.ts +0 -1034
- package/dist/runtime-packages/ui-host-runtime/src/sse-manager.ts +0 -416
- package/dist/runtime-packages/ui-host-runtime/src/unified-session-store.ts +0 -184
- package/dist/testing-KLSV6CPJ.js +0 -674
- package/dist/testing-KLSV6CPJ.js.map +0 -1
- /package/dist/{chunk-2H7UOFLK.js.map → chunk-SEGVTWSK.js.map} +0 -0
- /package/dist/{global-config-UKSWNDTX.js.map → global-config-S4ZIPECE.js.map} +0 -0
- /package/dist/{keychain-backend-JHTXAKWC.js.map → keychain-backend-HDF4TZDL.js.map} +0 -0
- /package/dist/{prompt-GMZABCJC.js.map → prompt-NDV3AE5L.js.map} +0 -0
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
isPerPlayer,
|
|
4
|
-
perPlayerSchema
|
|
5
|
-
} from "./chunk-HBNDKQT5.mjs";
|
|
6
|
-
import {
|
|
7
|
-
importTypeScriptModule
|
|
8
|
-
} from "./chunk-CEDUHGNH.mjs";
|
|
9
|
-
import {
|
|
10
|
-
external_exports
|
|
11
|
-
} from "./chunk-2QMNAVV4.mjs";
|
|
12
|
-
import {
|
|
13
|
-
materializeManifestTable
|
|
14
|
-
} from "./chunk-U6OJN7XS.mjs";
|
|
15
|
-
|
|
16
|
-
// src/services/project/reducer-bundle-preflight.ts
|
|
17
|
-
import path from "path";
|
|
18
|
-
globalThis.__DREAMBOARD_AUTHORING_WARNINGS__ = true;
|
|
19
|
-
var REDUCER_BUNDLE_ENTRY_PATH = path.join("app", "index.ts");
|
|
20
|
-
var PREFLIGHT_RNG_SEED = 1337;
|
|
21
|
-
function buildPlayerIds(playerCount) {
|
|
22
|
-
const ids = [];
|
|
23
|
-
for (let index = 1; index <= playerCount; index += 1) {
|
|
24
|
-
ids.push(`player-${index}`);
|
|
25
|
-
}
|
|
26
|
-
return ids;
|
|
27
|
-
}
|
|
28
|
-
function buildScenarios(manifest) {
|
|
29
|
-
const rawCounts = [
|
|
30
|
-
manifest.players?.minPlayers,
|
|
31
|
-
manifest.players?.maxPlayers
|
|
32
|
-
].filter(
|
|
33
|
-
(count) => typeof count === "number" && Number.isFinite(count) && count > 0
|
|
34
|
-
);
|
|
35
|
-
const playerCounts = Array.from(new Set(rawCounts));
|
|
36
|
-
if (playerCounts.length === 0) {
|
|
37
|
-
return [];
|
|
38
|
-
}
|
|
39
|
-
const profiles = manifest.setupProfiles ?? [];
|
|
40
|
-
const profileIds = profiles.length > 0 ? profiles.map((profile) => profile.id) : [null];
|
|
41
|
-
const scenarios = [];
|
|
42
|
-
const seen = /* @__PURE__ */ new Set();
|
|
43
|
-
for (const profileId of profileIds) {
|
|
44
|
-
for (const count of playerCounts) {
|
|
45
|
-
const key = `${profileId ?? "<default>"}:${count}`;
|
|
46
|
-
if (seen.has(key)) continue;
|
|
47
|
-
seen.add(key);
|
|
48
|
-
scenarios.push({ setupProfileId: profileId, playerCount: count });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return scenarios;
|
|
52
|
-
}
|
|
53
|
-
function describeScenario(scenario) {
|
|
54
|
-
const profileDesc = scenario.setupProfileId ? `setup profile '${scenario.setupProfileId}'` : "no setup profile";
|
|
55
|
-
return `${profileDesc}, ${scenario.playerCount} player${scenario.playerCount === 1 ? "" : "s"}`;
|
|
56
|
-
}
|
|
57
|
-
function summarizeError(error) {
|
|
58
|
-
if (error instanceof Error) {
|
|
59
|
-
const firstLine = error.message.split("\n").map((line) => line.trim()).find((line) => line.length > 0) ?? "Unknown failure";
|
|
60
|
-
const detail = error.stack && error.stack !== error.message ? error.stack : void 0;
|
|
61
|
-
return { headline: firstLine, detail };
|
|
62
|
-
}
|
|
63
|
-
return { headline: String(error ?? "Unknown failure") };
|
|
64
|
-
}
|
|
65
|
-
function assertViewPerPlayerSeatsValid(view, expectedPlayerIds, breadcrumb = []) {
|
|
66
|
-
if (view === null || view === void 0) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
if (isPerPlayer(view)) {
|
|
70
|
-
const schema = perPlayerSchema(external_exports.unknown(), {
|
|
71
|
-
players: expectedPlayerIds
|
|
72
|
-
});
|
|
73
|
-
const result = schema.safeParse(view);
|
|
74
|
-
if (!result.success) {
|
|
75
|
-
const firstIssue = result.error.issues[0];
|
|
76
|
-
const location = breadcrumb.length > 0 ? ` at view.${breadcrumb.join(".")}` : "";
|
|
77
|
-
const message = firstIssue?.message ?? "PerPlayer seat mismatch";
|
|
78
|
-
return `PerPlayer seat mismatch${location}: ${message}`;
|
|
79
|
-
}
|
|
80
|
-
return null;
|
|
81
|
-
}
|
|
82
|
-
if (Array.isArray(view)) {
|
|
83
|
-
for (let index = 0; index < view.length; index += 1) {
|
|
84
|
-
const result = assertViewPerPlayerSeatsValid(
|
|
85
|
-
view[index],
|
|
86
|
-
expectedPlayerIds,
|
|
87
|
-
[...breadcrumb, `[${index}]`]
|
|
88
|
-
);
|
|
89
|
-
if (result) return result;
|
|
90
|
-
}
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
if (typeof view === "object") {
|
|
94
|
-
for (const [key, value] of Object.entries(
|
|
95
|
-
view
|
|
96
|
-
)) {
|
|
97
|
-
const result = assertViewPerPlayerSeatsValid(value, expectedPlayerIds, [
|
|
98
|
-
...breadcrumb,
|
|
99
|
-
key
|
|
100
|
-
]);
|
|
101
|
-
if (result) return result;
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
function identityShuffle(values) {
|
|
108
|
-
return [...values];
|
|
109
|
-
}
|
|
110
|
-
async function driveReducerBundleThroughScenarios(options) {
|
|
111
|
-
const { manifest, bundle, scenarios } = options;
|
|
112
|
-
const rngSeed = options.rngSeed ?? PREFLIGHT_RNG_SEED;
|
|
113
|
-
const failures = [];
|
|
114
|
-
const tableCache = /* @__PURE__ */ new Map();
|
|
115
|
-
for (const scenario of scenarios) {
|
|
116
|
-
let tableEntry = tableCache.get(scenario.playerCount);
|
|
117
|
-
if (!tableEntry) {
|
|
118
|
-
try {
|
|
119
|
-
const playerIds2 = buildPlayerIds(scenario.playerCount);
|
|
120
|
-
const table2 = JSON.parse(
|
|
121
|
-
JSON.stringify(
|
|
122
|
-
materializeManifestTable({
|
|
123
|
-
manifest,
|
|
124
|
-
playerIds: playerIds2,
|
|
125
|
-
shuffleItems: identityShuffle
|
|
126
|
-
})
|
|
127
|
-
)
|
|
128
|
-
);
|
|
129
|
-
tableEntry = { table: table2, playerIds: playerIds2 };
|
|
130
|
-
} catch (error) {
|
|
131
|
-
tableEntry = { error };
|
|
132
|
-
}
|
|
133
|
-
tableCache.set(scenario.playerCount, tableEntry);
|
|
134
|
-
}
|
|
135
|
-
if ("error" in tableEntry) {
|
|
136
|
-
const summary = summarizeError(tableEntry.error);
|
|
137
|
-
failures.push({
|
|
138
|
-
scenario,
|
|
139
|
-
phase: "BUILD_GAME_STATE",
|
|
140
|
-
headline: summary.headline,
|
|
141
|
-
detail: summary.detail
|
|
142
|
-
});
|
|
143
|
-
continue;
|
|
144
|
-
}
|
|
145
|
-
const { table, playerIds } = tableEntry;
|
|
146
|
-
let sessionState;
|
|
147
|
-
try {
|
|
148
|
-
sessionState = await bundle.initialize({
|
|
149
|
-
table,
|
|
150
|
-
playerIds: [...playerIds],
|
|
151
|
-
rngSeed,
|
|
152
|
-
setup: scenario.setupProfileId ? { profileId: scenario.setupProfileId, optionValues: {} } : null
|
|
153
|
-
});
|
|
154
|
-
} catch (error) {
|
|
155
|
-
const summary = summarizeError(error);
|
|
156
|
-
failures.push({
|
|
157
|
-
scenario,
|
|
158
|
-
phase: "INITIALIZE",
|
|
159
|
-
headline: summary.headline,
|
|
160
|
-
detail: summary.detail
|
|
161
|
-
});
|
|
162
|
-
continue;
|
|
163
|
-
}
|
|
164
|
-
let projection;
|
|
165
|
-
try {
|
|
166
|
-
projection = bundle.projectSeatsDynamic({
|
|
167
|
-
state: sessionState,
|
|
168
|
-
playerIds: [...playerIds]
|
|
169
|
-
});
|
|
170
|
-
} catch (error) {
|
|
171
|
-
const summary = summarizeError(error);
|
|
172
|
-
failures.push({
|
|
173
|
-
scenario,
|
|
174
|
-
phase: "PROJECT_SEATS",
|
|
175
|
-
headline: summary.headline,
|
|
176
|
-
detail: summary.detail
|
|
177
|
-
});
|
|
178
|
-
continue;
|
|
179
|
-
}
|
|
180
|
-
const seats = projection?.seats ?? {};
|
|
181
|
-
for (const playerId of playerIds) {
|
|
182
|
-
const seat = seats[playerId];
|
|
183
|
-
if (!seat) {
|
|
184
|
-
failures.push({
|
|
185
|
-
scenario,
|
|
186
|
-
phase: "PROJECT_SEATS",
|
|
187
|
-
playerId,
|
|
188
|
-
headline: `projectSeatsDynamic() did not return an entry for seat '${playerId}'.`
|
|
189
|
-
});
|
|
190
|
-
continue;
|
|
191
|
-
}
|
|
192
|
-
const mismatch = assertViewPerPlayerSeatsValid(seat.view, playerIds);
|
|
193
|
-
if (mismatch) {
|
|
194
|
-
failures.push({
|
|
195
|
-
scenario,
|
|
196
|
-
phase: "VALIDATE_VIEW",
|
|
197
|
-
playerId,
|
|
198
|
-
headline: mismatch
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return failures;
|
|
204
|
-
}
|
|
205
|
-
async function runReducerBundleSmoke(options) {
|
|
206
|
-
const { projectRoot, manifest } = options;
|
|
207
|
-
const scenarios = buildScenarios(manifest);
|
|
208
|
-
if (scenarios.length === 0) {
|
|
209
|
-
return [];
|
|
210
|
-
}
|
|
211
|
-
const entryPath = path.join(projectRoot, REDUCER_BUNDLE_ENTRY_PATH);
|
|
212
|
-
let module;
|
|
213
|
-
try {
|
|
214
|
-
module = await importTypeScriptModule(
|
|
215
|
-
entryPath
|
|
216
|
-
);
|
|
217
|
-
} catch (error) {
|
|
218
|
-
const summary = summarizeError(error);
|
|
219
|
-
throw new Error(
|
|
220
|
-
[
|
|
221
|
-
`Dreamboard could not import \`${REDUCER_BUNDLE_ENTRY_PATH}\` during \`dreamboard sync\`.`,
|
|
222
|
-
"Fix the reducer bundle entry so it can be imported locally, then run `dreamboard sync` again.",
|
|
223
|
-
`Original error: ${summary.headline}`
|
|
224
|
-
].join(" ")
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
const bundle = module.default;
|
|
228
|
-
if (!bundle || typeof bundle.initialize !== "function") {
|
|
229
|
-
throw new Error(
|
|
230
|
-
[
|
|
231
|
-
`\`${REDUCER_BUNDLE_ENTRY_PATH}\` does not export a reducer bundle as its default export.`,
|
|
232
|
-
"Export `createReducerBundle(game)` from `app/index.ts` so the compile pipeline can smoke-test it."
|
|
233
|
-
].join(" ")
|
|
234
|
-
);
|
|
235
|
-
}
|
|
236
|
-
return driveReducerBundleThroughScenarios({ manifest, bundle, scenarios });
|
|
237
|
-
}
|
|
238
|
-
function formatFailureLines(failures) {
|
|
239
|
-
return failures.map((failure) => {
|
|
240
|
-
const location = failure.playerId ? ` (seat ${failure.playerId})` : "";
|
|
241
|
-
return `\u2022 [${failure.phase}] ${describeScenario(failure.scenario)}${location}: ${failure.headline}`;
|
|
242
|
-
}).join("\n");
|
|
243
|
-
}
|
|
244
|
-
async function assertReducerBundleSmoke(options) {
|
|
245
|
-
const failures = await runReducerBundleSmoke(options);
|
|
246
|
-
if (failures.length === 0) {
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
throw new Error(
|
|
250
|
-
[
|
|
251
|
-
"Reducer bundle preflight failed during `dreamboard sync`.",
|
|
252
|
-
"Fix the reported scenarios locally before syncing so the backend does not catch them after start-game:",
|
|
253
|
-
formatFailureLines(failures)
|
|
254
|
-
].join("\n")
|
|
255
|
-
);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
export {
|
|
259
|
-
buildScenarios,
|
|
260
|
-
assertViewPerPlayerSeatsValid,
|
|
261
|
-
driveReducerBundleThroughScenarios,
|
|
262
|
-
runReducerBundleSmoke,
|
|
263
|
-
assertReducerBundleSmoke
|
|
264
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// ../../node_modules/.pnpm/@dreamboard-games+sdk@0.4.0-alpha.0_@types+react-dom@19.2.3_@types+react@19.2.17__@type_b74cbe125b074769500a56e94fa7f664/node_modules/@dreamboard-games/sdk/dist/chunk-PZ5AY32C.js
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
__export
|
|
12
|
-
};
|