@incajs/cli 0.0.9 → 0.0.10
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/adapter/types.d.mts +10 -21
- package/dist/adapter/vite/build.d.mts +2 -1
- package/dist/adapter/vite/captureOutput.d.mts +2 -1
- package/dist/adapter/vite/config.d.mts +3 -1
- package/dist/adapter/vite/createBundler.d.mts +4 -0
- package/dist/adapter/vite/hmr.d.mts +25 -2
- package/dist/adapter/vite/index.d.mts +1 -3
- package/dist/adapter/vite/unsupported.d.mts +2 -1
- package/dist/adapter/vite/watch.d.mts +2 -1
- package/dist/adapterCore.d.mts +10 -0
- package/dist/chunks/{defaults-Bl2pge8b.js → defaults-CKuLLRFh.js} +3 -3
- package/dist/chunks/{dist-DAXzdDML.js → dist-AuwuGWnE.js} +27 -27
- package/dist/chunks/jsonc-BDHXk_1o.js +40 -0
- package/dist/chunks/rolldown-runtime-Dy4uBu1J.js +11 -0
- package/dist/cli.js +474 -374
- package/dist/config/types.d.mts +1 -1
- package/dist/config.js +1 -1
- package/dist/dev.d.mts +10 -4
- package/dist/error.d.mts +5 -1
- package/dist/log.d.mts +4 -0
- package/dist/retryOnEdit.d.mts +32 -0
- package/dist/watchForEdit.d.mts +27 -0
- package/package.json +5 -5
- package/dist/chunks/jsonc-BdzClvC8.js +0 -46
package/dist/adapter/types.d.mts
CHANGED
|
@@ -32,11 +32,15 @@ export interface BundlerOptions extends BuildOptions {
|
|
|
32
32
|
/** Called after each successful (re)build, with what it wrote. */
|
|
33
33
|
onBuild: (output: BuildOutput) => void;
|
|
34
34
|
/** Called instead of `onBuild` when a (re)build fails. */
|
|
35
|
-
onError: (error:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
onError: (error: BuildFailure) => void;
|
|
36
|
+
}
|
|
37
|
+
/** A failed build or HMR update, in the one shape every bundler adapter reports. */
|
|
38
|
+
export interface BuildFailure {
|
|
39
|
+
message: string;
|
|
40
|
+
/** The stack, plus any further detail worth printing under it. */
|
|
41
|
+
stack: string | null;
|
|
42
|
+
/** An `ERR_INCA_*` identifier, when the failure has one to look up. */
|
|
43
|
+
code?: string | null;
|
|
40
44
|
}
|
|
41
45
|
/** What a build wrote — the result of {@link Bundler.build}, and every {@link BundlerOptions.onBuild} call. */
|
|
42
46
|
export interface BuildOutput {
|
|
@@ -52,21 +56,6 @@ export interface BuildOutput {
|
|
|
52
56
|
at: number;
|
|
53
57
|
};
|
|
54
58
|
}
|
|
55
|
-
/**
|
|
56
|
-
* A failed HMR update's detail — the same fields a Rollup/Vite plugin
|
|
57
|
-
* error carries beyond `message`/`stack`, when it has them.
|
|
58
|
-
*/
|
|
59
|
-
export interface UpdateError {
|
|
60
|
-
message: string;
|
|
61
|
-
stack?: string | null;
|
|
62
|
-
plugin?: string | null;
|
|
63
|
-
id?: string | null;
|
|
64
|
-
frame?: string | null;
|
|
65
|
-
loc?: {
|
|
66
|
-
line: number;
|
|
67
|
-
column: number;
|
|
68
|
-
} | null;
|
|
69
|
-
}
|
|
70
59
|
/** Options for {@link Bundler.hmr}. */
|
|
71
60
|
export interface HmrOptions {
|
|
72
61
|
/** The app's own entry point — may import `.vue` files. */
|
|
@@ -91,7 +80,7 @@ export interface HmrOptions {
|
|
|
91
80
|
/** Called in place of forwarding a whole-app reload payload to the app. */
|
|
92
81
|
reload: () => void;
|
|
93
82
|
/** Called when an update the app fetched failed to compile. */
|
|
94
|
-
onError: (error:
|
|
83
|
+
onError: (error: BuildFailure) => void;
|
|
95
84
|
/** Called after a successful update, with the file that changed and how long it took. */
|
|
96
85
|
onUpdate?: (info: {
|
|
97
86
|
file: string;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { AdapterCore } from '../../adapterCore.mts';
|
|
1
2
|
import { BuildOptions, BuildOutput } from '../types.mts';
|
|
2
3
|
/**
|
|
3
4
|
* Builds `entry` into a minified, production build under `outDir` once, and
|
|
4
5
|
* rejects on failure rather than reporting it through a callback. Never
|
|
5
6
|
* starts or talks to `inca-host` — that's `dev.mts`'s job.
|
|
6
7
|
*/
|
|
7
|
-
export declare function build({ entry, outDir, runtimeConfig, stdout, stderr, quiet, }: BuildOptions): Promise<BuildOutput>;
|
|
8
|
+
export declare function build(core: AdapterCore, { entry, outDir, runtimeConfig, stdout, stderr, quiet, }: BuildOptions): Promise<BuildOutput>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
+
import { AdapterCore } from '../../adapterCore.mts';
|
|
2
3
|
import { BuildOutput } from '../types.mts';
|
|
3
4
|
/** What one (re)build actually wrote, relative to its own `outDir`. */
|
|
4
5
|
export interface CapturedOutput {
|
|
@@ -15,4 +16,4 @@ export declare function toBuildOutput(outDir: string, captured: CapturedOutput,
|
|
|
15
16
|
* one-shot build and every watch rebuild, so both read the bundler's real
|
|
16
17
|
* output instead of assuming a file name or layout.
|
|
17
18
|
*/
|
|
18
|
-
export declare function captureOutput(sink: (output: CapturedOutput) => void): Plugin;
|
|
19
|
+
export declare function captureOutput(core: AdapterCore, sink: (output: CapturedOutput) => void): Plugin;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { InlineConfig } from 'vite';
|
|
2
|
+
import { AdapterCore } from '../../adapterCore.mts';
|
|
2
3
|
import { CapturedOutput } from './captureOutput.mts';
|
|
3
4
|
export declare const BUNDLE_FILE_NAME = "bundle.js";
|
|
4
5
|
export interface ResolveConfigOptions {
|
|
6
|
+
core: AdapterCore;
|
|
5
7
|
/** The app's own entry point — may import `.vue` files. */
|
|
6
8
|
entry: string;
|
|
7
9
|
/** Where the build's output is written. */
|
|
@@ -31,4 +33,4 @@ export interface ResolveConfigOptions {
|
|
|
31
33
|
* the entry, named by `chunkFileNames`/`assetFileNames` below, rather than
|
|
32
34
|
* failing the build.
|
|
33
35
|
*/
|
|
34
|
-
export declare function resolveViteConfig({ entry, outDir, mode, watch, onOutput, stdout, stderr, quiet, runtimeConfig, }: ResolveConfigOptions): InlineConfig;
|
|
36
|
+
export declare function resolveViteConfig({ core, entry, outDir, mode, watch, onOutput, stdout, stderr, quiet, runtimeConfig, }: ResolveConfigOptions): InlineConfig;
|
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AdapterCore } from '../../adapterCore.mts';
|
|
2
|
+
import { BuildFailure, HmrChannel, HmrOptions } from '../types.mts';
|
|
3
|
+
/**
|
|
4
|
+
* A failed update's detail — the same fields a Rollup/Vite plugin
|
|
5
|
+
* error carries beyond `message`/`stack`, when it has them.
|
|
6
|
+
*/
|
|
7
|
+
interface UpdateError {
|
|
8
|
+
message: string;
|
|
9
|
+
stack?: string | null;
|
|
10
|
+
plugin?: string | null;
|
|
11
|
+
id?: string | null;
|
|
12
|
+
frame?: string | null;
|
|
13
|
+
loc?: {
|
|
14
|
+
line: number;
|
|
15
|
+
column: number;
|
|
16
|
+
} | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Reduces a failed update to a {@link BuildFailure}, with the message and
|
|
20
|
+
* `code` a failed rebuild reports. Plugin, file and frame detail from Vite's
|
|
21
|
+
* `buildErrorMessage` follows the stack.
|
|
22
|
+
*/
|
|
23
|
+
export declare function faultOfUpdate(core: AdapterCore, error: UpdateError): BuildFailure;
|
|
2
24
|
/**
|
|
3
25
|
* Starts a Vite dev server driving the app over its dev channel instead of
|
|
4
26
|
* a browser: a `"client"` environment with a custom {@link HotChannel}
|
|
5
27
|
* standing in for the WebSocket server `server.ws: false` disables.
|
|
6
28
|
*/
|
|
7
|
-
export declare function hmr({ entry, cwd, runtimeConfig, runtimePath, stdout, stderr, quiet, notify, reload, onError, onUpdate, }: HmrOptions): Promise<HmrChannel>;
|
|
29
|
+
export declare function hmr(core: AdapterCore, { entry, cwd, runtimeConfig, runtimePath, stdout, stderr, quiet, notify, reload, onError, onUpdate, }: HmrOptions): Promise<HmrChannel>;
|
|
30
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
+
import { AdapterCore } from '../../adapterCore.mts';
|
|
2
3
|
/** Something an app can write that the engine can't run yet. */
|
|
3
4
|
export interface UnsupportedFeature {
|
|
4
5
|
/** The `ERR_INCA_*` identifier this failure is looked up by. */
|
|
@@ -20,4 +21,4 @@ export declare const UNSUPPORTED: readonly UnsupportedFeature[];
|
|
|
20
21
|
* Fails the build on the first module that uses an unsupported feature,
|
|
21
22
|
* naming the file that used it.
|
|
22
23
|
*/
|
|
23
|
-
export declare function rejectUnsupported(features?: readonly UnsupportedFeature[]): Plugin;
|
|
24
|
+
export declare function rejectUnsupported(core: AdapterCore, features?: readonly UnsupportedFeature[]): Plugin;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { AdapterCore } from '../../adapterCore.mts';
|
|
1
2
|
import { BundlerOptions, Watcher } from '../types.mts';
|
|
2
3
|
/**
|
|
3
4
|
* Builds `entry` into a build under `outDir` and rebuilds it on every
|
|
4
5
|
* change, calling `onBuild` with what each rebuild wrote. Never starts,
|
|
5
6
|
* reloads, or talks to `inca-host` — that's `dev.mts`'s job.
|
|
6
7
|
*/
|
|
7
|
-
export declare function watch({ onBuild, onError, stdout, stderr, quiet, ...buildOptions }: BundlerOptions): Promise<Watcher>;
|
|
8
|
+
export declare function watch(core: AdapterCore, { onBuild, onError, stdout, stderr, quiet, ...buildOptions }: BundlerOptions): Promise<Watcher>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { IncaError } from './error.mts';
|
|
2
|
+
export { bundlerFault } from './log.mts';
|
|
3
|
+
/**
|
|
4
|
+
* The CLI logic the CLI injects into a bundler adapter: the `IncaError`
|
|
5
|
+
* class and `bundlerFault`, which reduces a bundler's error to a printable
|
|
6
|
+
* fault.
|
|
7
|
+
*
|
|
8
|
+
* Also the seam an adapter's own tests pass the real module through.
|
|
9
|
+
*/
|
|
10
|
+
export type AdapterCore = typeof import('./adapterCore.mts');
|
|
@@ -1025,7 +1025,7 @@ var Q = (e) => e?.replace(/\\/g, "/"), Gt = 0, Kt = {
|
|
|
1025
1025
|
".json": () => JSON.parse,
|
|
1026
1026
|
".yaml": () => import("./yaml-N2dF3WHm.js").then((e) => e.parseYAML),
|
|
1027
1027
|
".yml": () => import("./yaml-N2dF3WHm.js").then((e) => e.parseYAML),
|
|
1028
|
-
".jsonc": () => import("./jsonc-
|
|
1028
|
+
".jsonc": () => import("./jsonc-BDHXk_1o.js").then((e) => e.n).then((e) => (t) => e.parseJSONC(t, { allowTrailingComma: !0 })),
|
|
1029
1029
|
".json5": () => import("./json5-feUuPtTt.js").then((e) => e.parseJSON5),
|
|
1030
1030
|
".toml": () => import("./toml-BERh2MAo.js").then((e) => e.parseTOML)
|
|
1031
1031
|
}, qt = Object.freeze([
|
|
@@ -1071,7 +1071,7 @@ async function Jt(e) {
|
|
|
1071
1071
|
name: e.rcFile,
|
|
1072
1072
|
dir: e.cwd
|
|
1073
1073
|
})), e.globalRc) {
|
|
1074
|
-
let { findWorkspaceDir: t } = await import("./dist-
|
|
1074
|
+
let { findWorkspaceDir: t } = await import("./dist-AuwuGWnE.js"), r = await t(e.cwd).catch(() => {});
|
|
1075
1075
|
r && n.push(X({
|
|
1076
1076
|
name: e.rcFile,
|
|
1077
1077
|
dir: r
|
|
@@ -1083,7 +1083,7 @@ async function Jt(e) {
|
|
|
1083
1083
|
r.rc = t({}, ...n);
|
|
1084
1084
|
}
|
|
1085
1085
|
if (e.packageJson) {
|
|
1086
|
-
let n = (Array.isArray(e.packageJson) ? e.packageJson : [typeof e.packageJson == "string" ? e.packageJson : e.name]).filter((e) => e && typeof e == "string"), { readPackageJSON: i } = await import("./dist-
|
|
1086
|
+
let n = (Array.isArray(e.packageJson) ? e.packageJson : [typeof e.packageJson == "string" ? e.packageJson : e.name]).filter((e) => e && typeof e == "string"), { readPackageJSON: i } = await import("./dist-AuwuGWnE.js"), a = await i(e.cwd).catch(() => {});
|
|
1087
1087
|
r.packageJson = t({}, ...n.map((e) => a?.[e]));
|
|
1088
1088
|
}
|
|
1089
1089
|
let a = {};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { c as e, d as t, f as n, l as r, s as i, u as a } from "./defaults-CKuLLRFh.js";
|
|
2
|
+
import { n as o, t as s } from "./_format-BKs7bsc4.js";
|
|
3
|
+
import { t as c } from "./jsonc-BDHXk_1o.js";
|
|
4
4
|
import { promises as l, statSync as u } from "node:fs";
|
|
5
5
|
import "node:fs/promises";
|
|
6
6
|
import { fileURLToPath as d } from "node:url";
|
|
7
7
|
//#region ../../node_modules/.pnpm/confbox@0.3.1/node_modules/confbox/dist/json.mjs
|
|
8
8
|
function f(e, t) {
|
|
9
|
-
let n = JSON.parse(
|
|
10
|
-
return
|
|
9
|
+
let n = JSON.parse(s(e), t?.reviver);
|
|
10
|
+
return o(e, n, t), n;
|
|
11
11
|
}
|
|
12
12
|
//#endregion
|
|
13
13
|
//#region ../../node_modules/.pnpm/pkg-types@2.3.3/node_modules/pkg-types/dist/index.mjs
|
|
@@ -22,19 +22,19 @@ var p = {
|
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
24
|
async function m(e, t = {}) {
|
|
25
|
-
let
|
|
25
|
+
let r = Array.isArray(e) ? e : [e], i = {
|
|
26
26
|
...p,
|
|
27
27
|
...t
|
|
28
|
-
},
|
|
29
|
-
if (
|
|
28
|
+
}, o = n(i.startingFrom), s = o[0] === "/", c = o.split("/").filter(Boolean);
|
|
29
|
+
if (r.includes(c.at(-1)) && await i.test(o)) return o;
|
|
30
30
|
s && (c[0] = "/" + c[0]);
|
|
31
31
|
let l = c.findIndex((e) => e.match(i.rootPattern));
|
|
32
|
-
if (l === -1 && (l = 0), i.reverse) for (let e = l + 1; e <= c.length; e++) for (let t of
|
|
33
|
-
let n =
|
|
32
|
+
if (l === -1 && (l = 0), i.reverse) for (let e = l + 1; e <= c.length; e++) for (let t of r) {
|
|
33
|
+
let n = a(...c.slice(0, e), t);
|
|
34
34
|
if (await i.test(n)) return n;
|
|
35
35
|
}
|
|
36
|
-
else for (let e = c.length; e > l; e--) for (let t of
|
|
37
|
-
let n =
|
|
36
|
+
else for (let e = c.length; e > l; e--) for (let t of r) {
|
|
37
|
+
let n = a(...c.slice(0, e), t);
|
|
38
38
|
if (await i.test(n)) return n;
|
|
39
39
|
}
|
|
40
40
|
throw Error(`Cannot find matching ${e} in ${i.startingFrom} or parent directories`);
|
|
@@ -42,10 +42,10 @@ async function m(e, t = {}) {
|
|
|
42
42
|
function h(e, t = {}) {
|
|
43
43
|
return m(e, t);
|
|
44
44
|
}
|
|
45
|
-
function g(e,
|
|
46
|
-
return e instanceof URL || e.startsWith("file://") ?
|
|
47
|
-
...
|
|
48
|
-
from:
|
|
45
|
+
function g(e, n = {}) {
|
|
46
|
+
return e instanceof URL || e.startsWith("file://") ? t(d(e)) : r(e) ? t(e) : i(e, {
|
|
47
|
+
...n,
|
|
48
|
+
from: n.from || n.parent || n.url
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
var _ = [
|
|
@@ -68,16 +68,16 @@ var _ = [
|
|
|
68
68
|
"deno.json",
|
|
69
69
|
"deno.jsonc"
|
|
70
70
|
], b = /* #__PURE__ */ new Map();
|
|
71
|
-
async function x(
|
|
72
|
-
let
|
|
73
|
-
if (
|
|
74
|
-
let
|
|
71
|
+
async function x(e, t = {}) {
|
|
72
|
+
let n = await S(e, t), r = t.cache && typeof t.cache != "boolean" ? t.cache : b;
|
|
73
|
+
if (t.cache && r.has(n)) return r.get(n);
|
|
74
|
+
let i = await l.readFile(n, "utf8"), a;
|
|
75
75
|
try {
|
|
76
|
-
|
|
76
|
+
a = f(i);
|
|
77
77
|
} catch {
|
|
78
|
-
|
|
78
|
+
a = c(i);
|
|
79
79
|
}
|
|
80
|
-
return
|
|
80
|
+
return r.set(n, a), a;
|
|
81
81
|
}
|
|
82
82
|
async function S(e = process.cwd(), t = {}) {
|
|
83
83
|
return h("package.json", {
|
|
@@ -86,10 +86,10 @@ async function S(e = process.cwd(), t = {}) {
|
|
|
86
86
|
});
|
|
87
87
|
}
|
|
88
88
|
var C = {
|
|
89
|
-
workspaceFile: (
|
|
90
|
-
gitConfig: (e) => m(".git/config", e).then((e) =>
|
|
91
|
-
lockFile: (
|
|
92
|
-
packageJson: (
|
|
89
|
+
workspaceFile: (t) => m(y, t).then((t) => e(t)),
|
|
90
|
+
gitConfig: (e) => m(".git/config", e).then((e) => n(e, "../..")),
|
|
91
|
+
lockFile: (t) => m(_, t).then((t) => e(t)),
|
|
92
|
+
packageJson: (t) => m(v, t).then((t) => e(t))
|
|
93
93
|
};
|
|
94
94
|
async function w(e = process.cwd(), t = {}) {
|
|
95
95
|
let n = g(e, t), r = t.tests || [
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
+
import { n as t, t as n } from "./_format-BKs7bsc4.js";
|
|
3
|
+
//#region ../../node_modules/.pnpm/confbox@0.3.1/node_modules/confbox/dist/_chunks/libs/strip-json-comments.mjs
|
|
4
|
+
var r = Symbol("singleComment"), i = Symbol("multiComment"), a = () => "", o = (e, t, n) => e.slice(t, n).replace(/[^ \t\r\n]/g, " "), s = (e, t) => {
|
|
5
|
+
let n = t - 1, r = 0;
|
|
6
|
+
for (; e[n] === "\\";) --n, r += 1;
|
|
7
|
+
return !!(r % 2);
|
|
8
|
+
};
|
|
9
|
+
function c(e, { whitespace: t = !0, trailingCommas: n = !1 } = {}) {
|
|
10
|
+
if (typeof e != "string") throw TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof e}\``);
|
|
11
|
+
let c = t ? o : a, l = !1, u = !1, d = 0, f = "", p = "", m = -1;
|
|
12
|
+
for (let t = 0; t < e.length; t++) {
|
|
13
|
+
let a = e[t], o = e[t + 1];
|
|
14
|
+
if (!u && a === "\"" && (s(e, t) || (l = !l)), !l) {
|
|
15
|
+
if (!u && a + o === "//") f += e.slice(d, t), d = t, u = r, t++;
|
|
16
|
+
else if (u === r && a + o === "\r\n") {
|
|
17
|
+
t++, u = !1, f += c(e, d, t), d = t;
|
|
18
|
+
continue;
|
|
19
|
+
} else if (u === r && a === "\n") u = !1, f += c(e, d, t), d = t;
|
|
20
|
+
else if (!u && a + o === "/*") {
|
|
21
|
+
f += e.slice(d, t), d = t, u = i, t++;
|
|
22
|
+
continue;
|
|
23
|
+
} else if (u === i && a + o === "*/") {
|
|
24
|
+
t++, u = !1, f += c(e, d, t + 1), d = t + 1;
|
|
25
|
+
continue;
|
|
26
|
+
} else n && !u && (m === -1 ? a === "," && (p += f + e.slice(d, t), f = "", d = t, m = t) : a === "}" || a === "]" ? (f += e.slice(d, t), p += c(f, 0, 1) + f.slice(1), f = "", d = t, m = -1) : a !== " " && a !== " " && a !== "\r" && a !== "\n" && (f += e.slice(d, t), d = t, m = -1));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
let h = u === r ? c(e, d) : e.slice(d);
|
|
30
|
+
return p + f + h;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region ../../node_modules/.pnpm/confbox@0.3.1/node_modules/confbox/dist/jsonc.mjs
|
|
34
|
+
var l = /* @__PURE__ */ e({ parseJSONC: () => u });
|
|
35
|
+
function u(e, r) {
|
|
36
|
+
let i = JSON.parse(c(n(e), { trailingCommas: r?.allowTrailingComma }));
|
|
37
|
+
return t(e, i, r), i;
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { l as n, u as t };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var e = Object.defineProperty, t = (t, n) => {
|
|
3
|
+
let r = {};
|
|
4
|
+
for (var i in t) e(r, i, {
|
|
5
|
+
get: t[i],
|
|
6
|
+
enumerable: !0
|
|
7
|
+
});
|
|
8
|
+
return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { t };
|