@sveltejs/vite-plugin-svelte 1.0.0-next.28 → 1.0.0-next.31
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 +1 -0
- package/dist/index.cjs +163 -23
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +6 -0
- package/dist/index.js +161 -37
- package/dist/index.js.map +3 -3
- package/package.json +10 -10
- package/src/index.ts +7 -1
- package/src/utils/compile.ts +7 -0
- package/src/utils/error.ts +92 -0
- package/src/utils/esbuild.ts +99 -0
- package/src/utils/log.ts +1 -1
- package/src/utils/options.ts +22 -2
package/dist/index.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
9
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
6
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
11
7
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -21,7 +17,6 @@ var __spreadValues = (a, b) => {
|
|
|
21
17
|
return a;
|
|
22
18
|
};
|
|
23
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
|
-
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
25
20
|
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
26
21
|
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
27
22
|
}) : x)(function(x) {
|
|
@@ -29,20 +24,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
29
24
|
return require.apply(this, arguments);
|
|
30
25
|
throw new Error('Dynamic require of "' + x + '" is not supported');
|
|
31
26
|
});
|
|
32
|
-
var __reExport = (target, module, desc) => {
|
|
33
|
-
if (module && typeof module === "object" || typeof module === "function") {
|
|
34
|
-
for (let key of __getOwnPropNames(module))
|
|
35
|
-
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
36
|
-
__defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });
|
|
37
|
-
}
|
|
38
|
-
return target;
|
|
39
|
-
};
|
|
40
|
-
var __toModule = (module) => {
|
|
41
|
-
return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
|
|
42
|
-
};
|
|
43
27
|
|
|
44
28
|
// src/index.ts
|
|
45
|
-
import
|
|
29
|
+
import fs7 from "fs";
|
|
46
30
|
|
|
47
31
|
// src/utils/log.ts
|
|
48
32
|
import { cyan, yellow, red } from "kleur/colors";
|
|
@@ -186,7 +170,7 @@ function buildExtendedLogMessage(w) {
|
|
|
186
170
|
}
|
|
187
171
|
|
|
188
172
|
// src/handle-hot-update.ts
|
|
189
|
-
async function handleHotUpdate(
|
|
173
|
+
async function handleHotUpdate(compileSvelte2, ctx, svelteRequest, cache, options) {
|
|
190
174
|
const { read, server } = ctx;
|
|
191
175
|
const cachedJS = cache.getJS(svelteRequest);
|
|
192
176
|
if (!cachedJS) {
|
|
@@ -195,7 +179,7 @@ async function handleHotUpdate(compileSvelte, ctx, svelteRequest, cache, options
|
|
|
195
179
|
}
|
|
196
180
|
const cachedCss = cache.getCSS(svelteRequest);
|
|
197
181
|
const content = await read();
|
|
198
|
-
const compileData = await
|
|
182
|
+
const compileData = await compileSvelte2(svelteRequest, content, options);
|
|
199
183
|
cache.update(compileData);
|
|
200
184
|
const affectedModules = new Set();
|
|
201
185
|
const cssModule = server.moduleGraph.getModuleById(svelteRequest.cssId);
|
|
@@ -287,7 +271,7 @@ function toSafe(base64) {
|
|
|
287
271
|
}
|
|
288
272
|
|
|
289
273
|
// src/utils/compile.ts
|
|
290
|
-
var _createCompileSvelte = (makeHot) => async function
|
|
274
|
+
var _createCompileSvelte = (makeHot) => async function compileSvelte2(svelteRequest, code, options) {
|
|
291
275
|
var _a, _b;
|
|
292
276
|
const { filename, normalizedFilename, cssId, ssr } = svelteRequest;
|
|
293
277
|
const { emitCss = true } = options;
|
|
@@ -301,6 +285,13 @@ var _createCompileSvelte = (makeHot) => async function compileSvelte(svelteReque
|
|
|
301
285
|
log.debug(`setting cssHash ${hash} for ${normalizedFilename}`);
|
|
302
286
|
compileOptions.cssHash = () => hash;
|
|
303
287
|
}
|
|
288
|
+
if (ssr && compileOptions.enableSourcemap !== false) {
|
|
289
|
+
if (typeof compileOptions.enableSourcemap === "object") {
|
|
290
|
+
compileOptions.enableSourcemap.css = false;
|
|
291
|
+
} else {
|
|
292
|
+
compileOptions.enableSourcemap = { js: true, css: false };
|
|
293
|
+
}
|
|
294
|
+
}
|
|
304
295
|
let preprocessed;
|
|
305
296
|
if (options.preprocess) {
|
|
306
297
|
preprocessed = await preprocess(code, options.preprocess, { filename });
|
|
@@ -479,7 +470,7 @@ async function loadSvelteConfig(viteConfig, inlineOptions) {
|
|
|
479
470
|
}
|
|
480
471
|
if (!configFile.endsWith(".mjs")) {
|
|
481
472
|
try {
|
|
482
|
-
const _require = import.meta.url ? esmRequire
|
|
473
|
+
const _require = import.meta.url ? esmRequire ?? (esmRequire = createRequire(import.meta.url)) : __require;
|
|
483
474
|
delete _require.cache[_require.resolve(configFile)];
|
|
484
475
|
const result = _require(configFile);
|
|
485
476
|
if (result != null) {
|
|
@@ -692,6 +683,126 @@ function needsOptimization(dep, localRequire) {
|
|
|
692
683
|
|
|
693
684
|
// src/utils/options.ts
|
|
694
685
|
import { createRequire as createRequire3 } from "module";
|
|
686
|
+
|
|
687
|
+
// src/utils/esbuild.ts
|
|
688
|
+
import { promises as fs4 } from "fs";
|
|
689
|
+
import { compile as compile2, preprocess as preprocess2 } from "svelte/compiler";
|
|
690
|
+
|
|
691
|
+
// src/utils/error.ts
|
|
692
|
+
function toRollupError(error) {
|
|
693
|
+
const { filename, frame, start, code, name } = error;
|
|
694
|
+
const rollupError = {
|
|
695
|
+
name,
|
|
696
|
+
id: filename,
|
|
697
|
+
message: buildExtendedLogMessage(error),
|
|
698
|
+
frame: formatFrameForVite(frame),
|
|
699
|
+
code,
|
|
700
|
+
stack: ""
|
|
701
|
+
};
|
|
702
|
+
if (start) {
|
|
703
|
+
rollupError.loc = {
|
|
704
|
+
line: start.line,
|
|
705
|
+
column: start.column,
|
|
706
|
+
file: filename
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
return rollupError;
|
|
710
|
+
}
|
|
711
|
+
function toESBuildError(error) {
|
|
712
|
+
const { filename, frame, start } = error;
|
|
713
|
+
const partialMessage = {
|
|
714
|
+
text: buildExtendedLogMessage(error)
|
|
715
|
+
};
|
|
716
|
+
if (start) {
|
|
717
|
+
partialMessage.location = {
|
|
718
|
+
line: start.line,
|
|
719
|
+
column: start.column,
|
|
720
|
+
file: filename,
|
|
721
|
+
lineText: lineFromFrame(start.line, frame)
|
|
722
|
+
};
|
|
723
|
+
}
|
|
724
|
+
return partialMessage;
|
|
725
|
+
}
|
|
726
|
+
function lineFromFrame(lineNo, frame) {
|
|
727
|
+
if (!frame) {
|
|
728
|
+
return "";
|
|
729
|
+
}
|
|
730
|
+
const lines = frame.split("\n");
|
|
731
|
+
const errorLine = lines.find((line) => line.trimStart().startsWith(`${lineNo}: `));
|
|
732
|
+
return errorLine ? errorLine.substring(errorLine.indexOf(": ") + 3) : "";
|
|
733
|
+
}
|
|
734
|
+
function formatFrameForVite(frame) {
|
|
735
|
+
if (!frame) {
|
|
736
|
+
return "";
|
|
737
|
+
}
|
|
738
|
+
return frame.split("\n").map((line) => line.match(/^\s+\^/) ? " " + line : " " + line.replace(":", " | ")).join("\n");
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// src/utils/esbuild.ts
|
|
742
|
+
function esbuildSveltePlugin(options) {
|
|
743
|
+
return {
|
|
744
|
+
name: "vite-plugin-svelte:optimize-svelte",
|
|
745
|
+
setup(build) {
|
|
746
|
+
disableVitePrebundleSvelte(build);
|
|
747
|
+
const svelteExtensions = (options.extensions ?? [".svelte"]).map((ext) => ext.slice(1));
|
|
748
|
+
const svelteFilter = new RegExp(`\\.(` + svelteExtensions.join("|") + `)(\\?.*)?$`);
|
|
749
|
+
build.onLoad({ filter: svelteFilter }, async ({ path: filename }) => {
|
|
750
|
+
const code = await fs4.readFile(filename, "utf8");
|
|
751
|
+
try {
|
|
752
|
+
const contents = await compileSvelte(options, { filename, code });
|
|
753
|
+
return { contents };
|
|
754
|
+
} catch (e) {
|
|
755
|
+
return { errors: [toESBuildError(e)] };
|
|
756
|
+
}
|
|
757
|
+
});
|
|
758
|
+
}
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
function disableVitePrebundleSvelte(build) {
|
|
762
|
+
var _a;
|
|
763
|
+
const viteDepPrebundlePlugin = (_a = build.initialOptions.plugins) == null ? void 0 : _a.find((v) => v.name === "vite:dep-pre-bundle");
|
|
764
|
+
if (!viteDepPrebundlePlugin)
|
|
765
|
+
return;
|
|
766
|
+
const _setup = viteDepPrebundlePlugin.setup.bind(viteDepPrebundlePlugin);
|
|
767
|
+
viteDepPrebundlePlugin.setup = function(build2) {
|
|
768
|
+
const _onResolve = build2.onResolve.bind(build2);
|
|
769
|
+
build2.onResolve = function(options, callback) {
|
|
770
|
+
if (options.filter.source.includes("svelte")) {
|
|
771
|
+
options.filter = new RegExp(options.filter.source.replace("|svelte", ""), options.filter.flags);
|
|
772
|
+
}
|
|
773
|
+
return _onResolve(options, callback);
|
|
774
|
+
};
|
|
775
|
+
return _setup(build2);
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
async function compileSvelte(options, { filename, code }) {
|
|
779
|
+
var _a, _b;
|
|
780
|
+
const compileOptions = __spreadProps(__spreadValues({}, options.compilerOptions), {
|
|
781
|
+
css: true,
|
|
782
|
+
filename,
|
|
783
|
+
generate: "dom"
|
|
784
|
+
});
|
|
785
|
+
let preprocessed;
|
|
786
|
+
if (options.preprocess) {
|
|
787
|
+
preprocessed = await preprocess2(code, options.preprocess, { filename });
|
|
788
|
+
if (preprocessed.map)
|
|
789
|
+
compileOptions.sourcemap = preprocessed.map;
|
|
790
|
+
}
|
|
791
|
+
const finalCode = preprocessed ? preprocessed.code : code;
|
|
792
|
+
const dynamicCompileOptions = await ((_b = (_a = options.experimental) == null ? void 0 : _a.dynamicCompileOptions) == null ? void 0 : _b.call(_a, {
|
|
793
|
+
filename,
|
|
794
|
+
code: finalCode,
|
|
795
|
+
compileOptions
|
|
796
|
+
}));
|
|
797
|
+
if (dynamicCompileOptions && log.debug.enabled) {
|
|
798
|
+
log.debug(`dynamic compile options for ${filename}: ${JSON.stringify(dynamicCompileOptions)}`);
|
|
799
|
+
}
|
|
800
|
+
const finalCompileOptions = dynamicCompileOptions ? __spreadValues(__spreadValues({}, compileOptions), dynamicCompileOptions) : compileOptions;
|
|
801
|
+
const compiled = compile2(finalCode, finalCompileOptions);
|
|
802
|
+
return compiled.js.code + "//# sourceMappingURL=" + compiled.js.map.toUrl();
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
// src/utils/options.ts
|
|
695
806
|
var knownOptions = new Set([
|
|
696
807
|
"configFile",
|
|
697
808
|
"include",
|
|
@@ -787,12 +898,11 @@ function mergeOptions(defaultOptions, svelteConfig, inlineOptions, viteConfig, v
|
|
|
787
898
|
return merged;
|
|
788
899
|
}
|
|
789
900
|
async function resolveOptions(inlineOptions = {}, viteConfig, viteEnv) {
|
|
790
|
-
var _a;
|
|
791
901
|
const viteConfigWithResolvedRoot = __spreadProps(__spreadValues({}, viteConfig), {
|
|
792
902
|
root: resolveViteRoot(viteConfig)
|
|
793
903
|
});
|
|
794
904
|
const svelteConfig = await loadSvelteConfig(viteConfigWithResolvedRoot, inlineOptions) || {};
|
|
795
|
-
const defaultOptions = buildDefaultOptions(viteEnv.mode === "production",
|
|
905
|
+
const defaultOptions = buildDefaultOptions(viteEnv.mode === "production", inlineOptions.emitCss ?? svelteConfig.emitCss);
|
|
796
906
|
const resolvedOptions = mergeOptions(defaultOptions, svelteConfig, inlineOptions, viteConfigWithResolvedRoot, viteEnv);
|
|
797
907
|
enforceOptionsForProduction(resolvedOptions);
|
|
798
908
|
enforceOptionsForHmr(resolvedOptions);
|
|
@@ -816,7 +926,6 @@ function buildExtraViteConfig(options, config, configEnv) {
|
|
|
816
926
|
return extraViteConfig;
|
|
817
927
|
}
|
|
818
928
|
function buildOptimizeDepsForSvelte(svelteDeps, options, optimizeDeps) {
|
|
819
|
-
svelteDeps = svelteDeps.filter((dep) => dep.type === "component-library");
|
|
820
929
|
const include = [];
|
|
821
930
|
const exclude = ["svelte-hmr"];
|
|
822
931
|
const isIncluded = (dep) => {
|
|
@@ -834,6 +943,16 @@ function buildOptimizeDepsForSvelte(svelteDeps, options, optimizeDeps) {
|
|
|
834
943
|
} else {
|
|
835
944
|
log.debug('"svelte" is excluded in optimizeDeps.exclude, skipped adding it to include.');
|
|
836
945
|
}
|
|
946
|
+
if (options.experimental.prebundleSvelteLibraries) {
|
|
947
|
+
return {
|
|
948
|
+
include,
|
|
949
|
+
exclude,
|
|
950
|
+
esbuildOptions: {
|
|
951
|
+
plugins: [esbuildSveltePlugin(options)]
|
|
952
|
+
}
|
|
953
|
+
};
|
|
954
|
+
}
|
|
955
|
+
svelteDeps = svelteDeps.filter((dep) => dep.type === "component-library");
|
|
837
956
|
const svelteDepsToExclude = Array.from(new Set(svelteDeps.map((dep) => dep.name))).filter((dep) => !isIncluded(dep));
|
|
838
957
|
log.debug(`automatically excluding found svelte dependencies: ${svelteDepsToExclude.join(", ")}`);
|
|
839
958
|
exclude.push(...svelteDepsToExclude.filter((x) => !isExcluded(x)));
|
|
@@ -945,7 +1064,7 @@ var VitePluginSvelteCache = class {
|
|
|
945
1064
|
};
|
|
946
1065
|
|
|
947
1066
|
// src/utils/watch.ts
|
|
948
|
-
import
|
|
1067
|
+
import fs5 from "fs";
|
|
949
1068
|
import path4 from "path";
|
|
950
1069
|
function setupWatchers(options, cache, requestParser) {
|
|
951
1070
|
const { server, configFile: svelteConfigFile } = options;
|
|
@@ -957,7 +1076,7 @@ function setupWatchers(options, cache, requestParser) {
|
|
|
957
1076
|
const emitChangeEventOnDependants = (filename) => {
|
|
958
1077
|
const dependants = cache.getDependants(filename);
|
|
959
1078
|
dependants.forEach((dependant) => {
|
|
960
|
-
if (
|
|
1079
|
+
if (fs5.existsSync(dependant)) {
|
|
961
1080
|
log.debug(`emitting virtual change event for "${dependant}" because depdendency "${filename}" changed`);
|
|
962
1081
|
watcher.emit("change", dependant);
|
|
963
1082
|
}
|
|
@@ -1014,19 +1133,19 @@ function setupWatchers(options, cache, requestParser) {
|
|
|
1014
1133
|
});
|
|
1015
1134
|
}
|
|
1016
1135
|
function ensureWatchedFile(watcher, file, root) {
|
|
1017
|
-
if (file && !file.startsWith(root + "/") && !file.includes("\0") &&
|
|
1136
|
+
if (file && !file.startsWith(root + "/") && !file.includes("\0") && fs5.existsSync(file)) {
|
|
1018
1137
|
watcher.add(path4.resolve(file));
|
|
1019
1138
|
}
|
|
1020
1139
|
}
|
|
1021
1140
|
|
|
1022
1141
|
// src/utils/resolve.ts
|
|
1023
1142
|
import path5 from "path";
|
|
1024
|
-
import
|
|
1143
|
+
import fs6 from "fs";
|
|
1025
1144
|
import relative from "require-relative";
|
|
1026
1145
|
function resolveViaPackageJsonSvelte(importee, importer) {
|
|
1027
1146
|
if (importer && isBareImport(importee)) {
|
|
1028
1147
|
const importeePkgFile = relative.resolve(`${importee}/package.json`, path5.dirname(importer));
|
|
1029
|
-
const importeePkg = JSON.parse(
|
|
1148
|
+
const importeePkg = JSON.parse(fs6.readFileSync(importeePkgFile, { encoding: "utf-8" }));
|
|
1030
1149
|
if (importeePkg.svelte) {
|
|
1031
1150
|
return path5.resolve(path5.dirname(importeePkgFile), importeePkg.svelte);
|
|
1032
1151
|
}
|
|
@@ -1052,14 +1171,14 @@ import {
|
|
|
1052
1171
|
transformWithEsbuild
|
|
1053
1172
|
} from "vite";
|
|
1054
1173
|
import MagicString2 from "magic-string";
|
|
1055
|
-
import { preprocess as
|
|
1174
|
+
import { preprocess as preprocess3 } from "svelte/compiler";
|
|
1056
1175
|
|
|
1057
1176
|
// src/utils/sourcemap.ts
|
|
1058
1177
|
import MagicString from "magic-string";
|
|
1059
1178
|
async function buildMagicString(from, to, options) {
|
|
1060
1179
|
let diff_match_patch, DIFF_DELETE, DIFF_INSERT;
|
|
1061
1180
|
try {
|
|
1062
|
-
const dmpPkg = await
|
|
1181
|
+
const dmpPkg = await import("diff-match-patch");
|
|
1063
1182
|
diff_match_patch = dmpPkg.diff_match_patch;
|
|
1064
1183
|
DIFF_INSERT = dmpPkg.DIFF_INSERT;
|
|
1065
1184
|
DIFF_DELETE = dmpPkg.DIFF_DELETE;
|
|
@@ -1152,7 +1271,7 @@ function createViteStylePreprocessor(config) {
|
|
|
1152
1271
|
function createVitePreprocessorGroup(config) {
|
|
1153
1272
|
return {
|
|
1154
1273
|
markup({ content, filename }) {
|
|
1155
|
-
return
|
|
1274
|
+
return preprocess3(content, {
|
|
1156
1275
|
script: createViteScriptPreprocessor(),
|
|
1157
1276
|
style: createViteStylePreprocessor(config)
|
|
1158
1277
|
}, { filename });
|
|
@@ -1287,7 +1406,7 @@ function svelte(inlineOptions) {
|
|
|
1287
1406
|
let requestParser;
|
|
1288
1407
|
let options;
|
|
1289
1408
|
let viteConfig;
|
|
1290
|
-
let
|
|
1409
|
+
let compileSvelte2;
|
|
1291
1410
|
let resolvedSvelteSSR;
|
|
1292
1411
|
return {
|
|
1293
1412
|
name: "vite-plugin-svelte",
|
|
@@ -1306,7 +1425,7 @@ function svelte(inlineOptions) {
|
|
|
1306
1425
|
async configResolved(config) {
|
|
1307
1426
|
addExtraPreprocessors(options, config);
|
|
1308
1427
|
requestParser = buildIdParser(options);
|
|
1309
|
-
|
|
1428
|
+
compileSvelte2 = createCompileSvelte(options);
|
|
1310
1429
|
viteConfig = config;
|
|
1311
1430
|
log.debug("resolved options", options);
|
|
1312
1431
|
},
|
|
@@ -1328,7 +1447,7 @@ function svelte(inlineOptions) {
|
|
|
1328
1447
|
}
|
|
1329
1448
|
if (viteConfig.assetsInclude(filename)) {
|
|
1330
1449
|
log.debug(`load returns raw content for ${filename}`);
|
|
1331
|
-
return
|
|
1450
|
+
return fs7.readFileSync(filename, "utf-8");
|
|
1332
1451
|
}
|
|
1333
1452
|
}
|
|
1334
1453
|
},
|
|
@@ -1392,7 +1511,12 @@ function svelte(inlineOptions) {
|
|
|
1392
1511
|
log.error("failed to transform tagged svelte request", svelteRequest);
|
|
1393
1512
|
throw new Error(`failed to transform tagged svelte request for id ${id}`);
|
|
1394
1513
|
}
|
|
1395
|
-
|
|
1514
|
+
let compileData;
|
|
1515
|
+
try {
|
|
1516
|
+
compileData = await compileSvelte2(svelteRequest, code, options);
|
|
1517
|
+
} catch (e) {
|
|
1518
|
+
throw toRollupError(e);
|
|
1519
|
+
}
|
|
1396
1520
|
logCompilerWarnings(compileData.compiled.warnings, options);
|
|
1397
1521
|
cache.update(compileData);
|
|
1398
1522
|
if (((_a = compileData.dependencies) == null ? void 0 : _a.length) && options.server) {
|
|
@@ -1409,7 +1533,7 @@ function svelte(inlineOptions) {
|
|
|
1409
1533
|
}
|
|
1410
1534
|
const svelteRequest = requestParser(ctx.file, false, ctx.timestamp);
|
|
1411
1535
|
if (svelteRequest) {
|
|
1412
|
-
return handleHotUpdate(
|
|
1536
|
+
return handleHotUpdate(compileSvelte2, ctx, svelteRequest, cache, options);
|
|
1413
1537
|
}
|
|
1414
1538
|
},
|
|
1415
1539
|
buildEnd() {
|