weapp-vite 6.24.0 → 6.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/auto-routes.mjs +1 -1
- package/dist/cli.mjs +4 -4
- package/dist/{config-qh0O73A5.d.mts → config-Fg6rCCMb.d.mts} +13 -4
- package/dist/config.d.mts +1 -1
- package/dist/{createContext-DddiW1j3.mjs → createContext-DVzd-0tU.mjs} +1025 -605
- package/dist/docs/README.md +1 -0
- package/dist/docs/weapp-config.md +31 -0
- package/dist/file-XlRiJP3-.mjs +2 -0
- package/dist/{file-CaKJV6Km.mjs → file-zQ4br3El.mjs} +79 -79
- package/dist/getInstance-DZ87aPw-.mjs +2 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/json.d.mts +1 -1
- package/dist/mcp.d.mts +1 -1
- package/dist/test.mjs +1 -1
- package/dist/types.d.mts +2 -2
- package/package.json +10 -9
- package/dist/file-QyWJOwaH.mjs +0 -2
- package/dist/getInstance-BXs7VCNS.mjs +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as applyWeappViteHostMeta } from "./pluginHost--CaeyWpA.mjs";
|
|
2
|
+
import { C as inlineAutoRoutesImports, T as MINI_PROGRAM_PLATFORM_ADAPTERS, _ as templateExtensions, a as findJsonEntry, b as isNativeTemplateSource, c as isJsOrTs, d as touch, g as supportedCssLangs, h as scriptExtensions, i as findJsEntry, l as isTemplate, m as jsExtensions, n as changeFileExtension, o as findTemplateEntry, p as configExtensions, r as findCssEntry, s as findVueEntry, t as extractConfigFromVue, v as vueExtensions, x as isSourceStyleExtension, y as ALL_NATIVE_STYLE_RESOLVER_EXTENSIONS } from "./file-zQ4br3El.mjs";
|
|
2
3
|
import { n as configureLogger, r as logger_default } from "./logger-mt4mSTqV.mjs";
|
|
3
|
-
import { C as isNativeTemplateSource, S as ALL_NATIVE_STYLE_RESOLVER_EXTENSIONS, T as MINI_PROGRAM_PLATFORM_ADAPTERS, _ as jsExtensions, a as findJsonEntry, b as templateExtensions, c as isJsOrTs, d as touch, g as configExtensions, i as findJsEntry, l as isTemplate, n as changeFileExtension, o as findTemplateEntry, p as inlineAutoRoutesImports, r as findCssEntry, s as findVueEntry, t as extractConfigFromVue, v as scriptExtensions, w as isSourceStyleExtension, x as vueExtensions, y as supportedCssLangs } from "./file-CaKJV6Km.mjs";
|
|
4
4
|
import { createRequire, isBuiltin } from "node:module";
|
|
5
5
|
import { createDebug } from "obug";
|
|
6
6
|
import fs, { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
@@ -9,16 +9,16 @@ import path, { posix } from "pathe";
|
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
10
|
import path$1, { normalize, relative, win32 } from "node:path";
|
|
11
11
|
import { MINI_PROGRAM_PLATFORM_ALIASES, MINI_PROGRAM_PLATFORM_DESCRIPTORS, addExtension, defu, escapeStringRegexp, escapeWxmlAttribute, escapeWxmlText, get, getDefaultMiniProgramPlatform, getMiniProgramAppTypesPackage, getMiniProgramDefaultBuildTarget, getMiniProgramDirectivePrefix, getMiniProgramRouteRuntimeGlobalKeys, getMiniProgramRuntimeGlobalKey, getMiniProgramRuntimeGlobalKeys, getMiniProgramRuntimeGlobalKeysByResolvePriority, getSupportedMiniProgramDirectivePrefixes, getSupportedMiniProgramPlatforms, isEmptyObject, isObject, normalizeMiniProgramPlatform, removeExtension, removeExtensionDeep, resolveMiniProgramPlatform, set, supportsMiniProgramAutoTouchAppStyle } from "@weapp-core/shared";
|
|
12
|
+
import { parse, stringify } from "comment-json";
|
|
12
13
|
import { fs as fs$1 } from "@weapp-core/shared/fs";
|
|
13
|
-
import
|
|
14
|
+
import process from "node:process";
|
|
15
|
+
import { compileScript, parse as parse$1 } from "vue/compiler-sfc";
|
|
16
|
+
import { BABEL_TS_MODULE_PARSER_OPTIONS, analyzeScript as analyzeScript$1, analyzeScripts, collectComponentPropsFromCode, collectRequireTokens, collectScriptSetupImportsFromCode, generate, mayContainPlatformApiIdentifierByText, mayContainStaticRequireLiteral, parse as parse$2, parseJsLikeWithEngine, platformApiIdentifiers } from "@weapp-vite/ast";
|
|
14
17
|
import { collectOnPageScrollPerformanceWarnings } from "@weapp-vite/ast/operations/onPageScroll";
|
|
15
18
|
import { collectSetDataPickKeysFromTemplateCode } from "@weapp-vite/ast/operations/setDataPick";
|
|
16
19
|
import { BABEL_TS_MODULE_PARSER_OPTIONS as BABEL_TS_MODULE_PARSER_OPTIONS$1, generate as generate$1, getVisitorKeys, parse as parse$3, parseJsLike, traverse } from "@weapp-vite/ast/babel";
|
|
17
|
-
import { compileScript, parse as parse$1 } from "vue/compiler-sfc";
|
|
18
20
|
import picomatch from "picomatch";
|
|
19
|
-
import { VUE_COMPONENT_TAG_RE, WE_VU_COMPILER_REACTIVITY_MODULE_ID, WE_VU_COMPILER_RUNTIME_MODULE_ID, WE_VU_COMPILER_TEMPLATE_MODULE_ID, WE_VU_RUNTIME_APIS, buildClassStyleComputedCode, collectVueTemplateTags, compileJsxFile, compileVueFile, compileVueStyleToWxss, createJsonMerger, createPageEntryMatcher, createPageEntryMatcher as createPageEntryMatcher$1, generateScopedId, getClassStyleWxsSource, getMiniProgramTemplatePlatform, getSfcCheckMtime, injectWevuPageFeaturesInJsWithResolver, invalidateFileCache, isAutoImportCandidateTag, isBuiltinComponent, isUniAppCompatibilityFile, pathExists, readAndParseSfc, readFile as readFile$1, refreshVueFileJsonConfig, resolveClassStyleWxsLocation,
|
|
20
|
-
import process from "node:process";
|
|
21
|
-
import { parse as parse$2, stringify } from "comment-json";
|
|
21
|
+
import { VUE_COMPONENT_TAG_RE, WE_VU_COMPILER_REACTIVITY_MODULE_ID, WE_VU_COMPILER_RUNTIME_MODULE_ID, WE_VU_COMPILER_TEMPLATE_MODULE_ID, WE_VU_RUNTIME_APIS, buildClassStyleComputedCode, classifyVueSfcBlockChanges, collectVueTemplateTags, compileJsxFile, compileVueFile, compileVueStyleToWxss, createJsonMerger, createPageEntryMatcher, createPageEntryMatcher as createPageEntryMatcher$1, generateScopedId, getClassStyleWxsSource, getMiniProgramTemplatePlatform, getSfcCheckMtime, injectWevuPageFeaturesInJsWithResolver, invalidateFileCache, isAutoImportCandidateTag, isBuiltinComponent, isUniAppCompatibilityFile, pathExists, readAndParseSfc, readFile as readFile$1, refreshVueFileJsonConfig, resolveClassStyleWxsLocation, resolveVueSfcHmrSignatures, resolveVueSfcStyleIndependentSignature, transformNestedWxssVars, transformUniAppSource, transformVueDeepSelectors } from "wevu/compiler";
|
|
22
22
|
import fs$2, { appendFile, copyFile, mkdir, readFile, readdir, rm } from "node:fs/promises";
|
|
23
23
|
import { build, createLogger, createServer, loadConfigFromFile, preprocessCSS, transformWithOxc } from "vite";
|
|
24
24
|
import { createHash, randomBytes } from "node:crypto";
|
|
@@ -725,179 +725,6 @@ function getVueComponentsSettings(ctx) {
|
|
|
725
725
|
return { enabled: false };
|
|
726
726
|
}
|
|
727
727
|
//#endregion
|
|
728
|
-
//#region src/runtime/autoImport/service/actions.ts
|
|
729
|
-
function createAutoImportActions(options) {
|
|
730
|
-
function bumpVersion() {
|
|
731
|
-
options.autoImportState.version += 1;
|
|
732
|
-
}
|
|
733
|
-
async function awaitOutputWrites() {
|
|
734
|
-
while (true) {
|
|
735
|
-
const pending = [
|
|
736
|
-
...options.pendingRegistrations,
|
|
737
|
-
options.outputsState.pendingWrite,
|
|
738
|
-
options.outputsState.pendingTypedWrite,
|
|
739
|
-
options.outputsState.pendingHtmlCustomDataWrite,
|
|
740
|
-
options.outputsState.pendingVueComponentsWrite
|
|
741
|
-
].filter((task) => Boolean(task));
|
|
742
|
-
if (!pending.length) return;
|
|
743
|
-
await Promise.all(pending);
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
function setSupportFileResolverComponents(components) {
|
|
747
|
-
if (!options.resolverHelpers.setSupportFileResolverComponents(components)) return;
|
|
748
|
-
bumpVersion();
|
|
749
|
-
options.deferOrSchedule("manifest", true);
|
|
750
|
-
const { typed, html, vue } = options.getOutputSettingsSnapshot();
|
|
751
|
-
if (typed.enabled || html.enabled) options.resolverHelpers.syncResolverComponentProps();
|
|
752
|
-
if (typed.enabled) options.deferOrSchedule("typed", true);
|
|
753
|
-
if (html.enabled) options.deferOrSchedule("html", true);
|
|
754
|
-
if (vue.enabled) {
|
|
755
|
-
options.resolverHelpers.syncResolverComponentProps();
|
|
756
|
-
options.deferOrSchedule("vue", true);
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
function clearSupportFileResolverComponents() {
|
|
760
|
-
if (!options.resolverHelpers.clearSupportFileResolverComponents()) return;
|
|
761
|
-
bumpVersion();
|
|
762
|
-
options.resolverHelpers.syncResolverComponentProps();
|
|
763
|
-
}
|
|
764
|
-
return {
|
|
765
|
-
reset() {
|
|
766
|
-
bumpVersion();
|
|
767
|
-
options.registry.clear();
|
|
768
|
-
options.autoImportState.matcher = void 0;
|
|
769
|
-
options.autoImportState.matcherKey = "";
|
|
770
|
-
options.autoImportState.preparedGlobsKey = void 0;
|
|
771
|
-
options.resolvedResolverComponents.clear();
|
|
772
|
-
options.resolverHelpers.clearResolveCache();
|
|
773
|
-
options.deferOrSchedule("manifest", true);
|
|
774
|
-
options.componentMetadataMap.clear();
|
|
775
|
-
options.resolverComponentNames.clear();
|
|
776
|
-
const { typed, html, vue } = options.getOutputSettingsSnapshot();
|
|
777
|
-
if (typed.enabled || html.enabled) options.resolverHelpers.syncResolverComponentProps();
|
|
778
|
-
options.deferOrSchedule("typed", true);
|
|
779
|
-
options.deferOrSchedule("html", true);
|
|
780
|
-
if (vue.enabled) options.resolverHelpers.syncResolverComponentProps();
|
|
781
|
-
options.deferOrSchedule("vue", true);
|
|
782
|
-
},
|
|
783
|
-
async registerPotentialComponent(filePath) {
|
|
784
|
-
const task = Promise.resolve().then(async () => {
|
|
785
|
-
await options.registryHelpers.registerLocalComponent(filePath);
|
|
786
|
-
}).finally(() => {
|
|
787
|
-
options.pendingRegistrations.delete(task);
|
|
788
|
-
});
|
|
789
|
-
options.pendingRegistrations.add(task);
|
|
790
|
-
await task;
|
|
791
|
-
},
|
|
792
|
-
removePotentialComponent(filePath) {
|
|
793
|
-
bumpVersion();
|
|
794
|
-
const { removed, removedNames } = options.registryHelpers.removeRegisteredComponent({
|
|
795
|
-
baseName: removeExtensionDeep(filePath),
|
|
796
|
-
templatePath: filePath
|
|
797
|
-
});
|
|
798
|
-
options.deferOrSchedule("manifest", removed);
|
|
799
|
-
for (const name of removedNames) if (options.resolverComponentNames.has(name)) options.componentMetadataMap.set(name, {
|
|
800
|
-
types: /* @__PURE__ */ new Map(),
|
|
801
|
-
docs: /* @__PURE__ */ new Map()
|
|
802
|
-
});
|
|
803
|
-
else options.componentMetadataMap.delete(name);
|
|
804
|
-
const shouldWriteArtifacts = removed || removedNames.length > 0;
|
|
805
|
-
options.deferOrSchedule("typed", shouldWriteArtifacts);
|
|
806
|
-
options.deferOrSchedule("html", shouldWriteArtifacts);
|
|
807
|
-
options.deferOrSchedule("vue", shouldWriteArtifacts);
|
|
808
|
-
},
|
|
809
|
-
setSupportFileResolverComponents,
|
|
810
|
-
clearSupportFileResolverComponents,
|
|
811
|
-
async syncSupportFileResolverComponents() {
|
|
812
|
-
try {
|
|
813
|
-
setSupportFileResolverComponents(options.resolverHelpers.collectStaticResolverComponentsForSupportFiles());
|
|
814
|
-
await awaitOutputWrites();
|
|
815
|
-
} finally {
|
|
816
|
-
clearSupportFileResolverComponents();
|
|
817
|
-
}
|
|
818
|
-
},
|
|
819
|
-
collectStaticResolverComponentsForSupportFiles() {
|
|
820
|
-
return options.resolverHelpers.collectStaticResolverComponentsForSupportFiles();
|
|
821
|
-
},
|
|
822
|
-
resolve(componentName, importerBaseName) {
|
|
823
|
-
const local = options.registry.get(componentName);
|
|
824
|
-
if (local) return local;
|
|
825
|
-
const resolvedValue = options.resolverHelpers.resolveWithResolvers(componentName, importerBaseName);
|
|
826
|
-
if (!resolvedValue) return;
|
|
827
|
-
const resolverChanged = options.resolvedResolverComponents.get(resolvedValue.name) !== resolvedValue.from;
|
|
828
|
-
options.resolvedResolverComponents.set(resolvedValue.name, resolvedValue.from);
|
|
829
|
-
if (resolverChanged) bumpVersion();
|
|
830
|
-
const resolved = {
|
|
831
|
-
kind: "resolver",
|
|
832
|
-
value: resolvedValue
|
|
833
|
-
};
|
|
834
|
-
const { typed, html, vue } = options.getOutputSettingsSnapshot();
|
|
835
|
-
if (typed.enabled || html.enabled) {
|
|
836
|
-
const metadataMissing = !options.componentMetadataMap.has(resolved.value.name);
|
|
837
|
-
if (metadataMissing) options.componentMetadataMap.set(resolved.value.name, {
|
|
838
|
-
types: /* @__PURE__ */ new Map(),
|
|
839
|
-
docs: /* @__PURE__ */ new Map()
|
|
840
|
-
});
|
|
841
|
-
if (typed.enabled && (resolverChanged || metadataMissing)) options.deferOrSchedule("typed", true);
|
|
842
|
-
if (html.enabled && (resolverChanged || metadataMissing)) options.deferOrSchedule("html", true);
|
|
843
|
-
} else options.componentMetadataMap.delete(resolved.value.name);
|
|
844
|
-
if (vue.enabled && resolverChanged) options.deferOrSchedule("vue", true);
|
|
845
|
-
if (resolverChanged) options.deferOrSchedule("manifest", true);
|
|
846
|
-
return resolved;
|
|
847
|
-
},
|
|
848
|
-
filter(id) {
|
|
849
|
-
const globMatcher = options.registryHelpers.ensureMatcher();
|
|
850
|
-
if (!globMatcher) return false;
|
|
851
|
-
return globMatcher(id);
|
|
852
|
-
},
|
|
853
|
-
getRegisteredLocalComponents() {
|
|
854
|
-
return Array.from(options.registry.values());
|
|
855
|
-
},
|
|
856
|
-
hasPendingRegistrations() {
|
|
857
|
-
return options.pendingRegistrations.size > 0;
|
|
858
|
-
},
|
|
859
|
-
awaitPendingRegistrations() {
|
|
860
|
-
return Promise.all([...options.pendingRegistrations]).then(() => {});
|
|
861
|
-
},
|
|
862
|
-
awaitManifestWrites() {
|
|
863
|
-
return awaitOutputWrites();
|
|
864
|
-
}
|
|
865
|
-
};
|
|
866
|
-
}
|
|
867
|
-
//#endregion
|
|
868
|
-
//#region src/ast/index.ts
|
|
869
|
-
/**
|
|
870
|
-
* 解析 AST 引擎配置。
|
|
871
|
-
*/
|
|
872
|
-
function resolveAstEngine(config) {
|
|
873
|
-
return config?.ast?.engine ?? "babel";
|
|
874
|
-
}
|
|
875
|
-
//#endregion
|
|
876
|
-
//#region src/context/shared.ts
|
|
877
|
-
const debug$2 = createDebugger("weapp-vite:context");
|
|
878
|
-
function hasOwn$6(source, key) {
|
|
879
|
-
return Object.prototype.hasOwnProperty.call(source, key);
|
|
880
|
-
}
|
|
881
|
-
function resolvedComponentName(entry) {
|
|
882
|
-
const base = path.basename(entry);
|
|
883
|
-
if (base === "index") {
|
|
884
|
-
const dirName = path.dirname(entry);
|
|
885
|
-
if (dirName === ".") return { base };
|
|
886
|
-
return {
|
|
887
|
-
componentName: path.basename(dirName),
|
|
888
|
-
base
|
|
889
|
-
};
|
|
890
|
-
}
|
|
891
|
-
return {
|
|
892
|
-
componentName: base,
|
|
893
|
-
base
|
|
894
|
-
};
|
|
895
|
-
}
|
|
896
|
-
function isEmptyObject$1(obj) {
|
|
897
|
-
for (const key in obj) if (hasOwn$6(obj, key)) return false;
|
|
898
|
-
return true;
|
|
899
|
-
}
|
|
900
|
-
//#endregion
|
|
901
728
|
//#region src/platform.ts
|
|
902
729
|
const DEFAULT_MP_PLATFORM = getDefaultMiniProgramPlatform();
|
|
903
730
|
const NPM_PROTOCOL_RE$1 = /^npm:/;
|
|
@@ -1198,6 +1025,315 @@ function normalizeNpmImportPathByPlatform(importee, options) {
|
|
|
1198
1025
|
return normalizePlatformNpmImportPath(options.platform, normalized, { alipayNpmMode: options.alipayNpmMode });
|
|
1199
1026
|
}
|
|
1200
1027
|
//#endregion
|
|
1028
|
+
//#region src/utils/json.ts
|
|
1029
|
+
const ALIPAY_GENERIC_COMPONENT_PLACEHOLDER = "./__weapp_vite_generic_component";
|
|
1030
|
+
const WEAPP_SCOPED_SLOT_GENERIC_COMPONENT_PLACEHOLDER = "./__weapp_vite_scoped_slot_generic_component";
|
|
1031
|
+
const JSON_FILE_JS_EXTENSION_RE = /\.[jt]s$/;
|
|
1032
|
+
const COMPONENT_NAME_LOWER_TO_UPPER_RE = /([a-z0-9])([A-Z])/g;
|
|
1033
|
+
const COMPONENT_NAME_MULTI_UPPER_RE = /([A-Z]+)([A-Z][a-z])/g;
|
|
1034
|
+
const COMPONENT_NAME_HAS_UPPER_RE = /[A-Z]/;
|
|
1035
|
+
const SCOPED_SLOT_GENERIC_KEY_RE$1 = /^scoped-slots-/;
|
|
1036
|
+
function parseCommentJson(json) {
|
|
1037
|
+
return parse(json, void 0, true);
|
|
1038
|
+
}
|
|
1039
|
+
function jsonFileRemoveJsExtension(fileName) {
|
|
1040
|
+
return fileName.replace(JSON_FILE_JS_EXTENSION_RE, "");
|
|
1041
|
+
}
|
|
1042
|
+
function stringifyJson$1(value, replacer) {
|
|
1043
|
+
return stringify(value, replacer, 2);
|
|
1044
|
+
}
|
|
1045
|
+
function normalizeAppJson(json) {
|
|
1046
|
+
if (!json || typeof json !== "object" || Array.isArray(json)) return json;
|
|
1047
|
+
const subPackages = Array.isArray(json.subPackages) ? json.subPackages : Array.isArray(json.subpackages) ? json.subpackages : [];
|
|
1048
|
+
const { subpackages: _subpackages, ...rest } = json;
|
|
1049
|
+
return {
|
|
1050
|
+
...rest,
|
|
1051
|
+
subPackages: subPackages.map((subPackage) => ({
|
|
1052
|
+
...subPackage,
|
|
1053
|
+
pages: Array.isArray(subPackage?.pages) ? subPackage.pages : []
|
|
1054
|
+
}))
|
|
1055
|
+
};
|
|
1056
|
+
}
|
|
1057
|
+
function matches(pattern, importee) {
|
|
1058
|
+
if (pattern instanceof RegExp) return pattern.test(importee);
|
|
1059
|
+
if (importee.length < pattern.length) return false;
|
|
1060
|
+
if (importee === pattern) return true;
|
|
1061
|
+
return importee.startsWith(pattern + "/");
|
|
1062
|
+
}
|
|
1063
|
+
function getAliasEntries(options = {}) {
|
|
1064
|
+
if (options === false) return [];
|
|
1065
|
+
const { entries } = options;
|
|
1066
|
+
if (!entries) return [];
|
|
1067
|
+
if (Array.isArray(entries)) return entries.map((entry) => {
|
|
1068
|
+
return {
|
|
1069
|
+
find: entry.find,
|
|
1070
|
+
replacement: entry.replacement
|
|
1071
|
+
};
|
|
1072
|
+
});
|
|
1073
|
+
return Object.entries(entries).map(([key, value]) => {
|
|
1074
|
+
return {
|
|
1075
|
+
find: key,
|
|
1076
|
+
replacement: value
|
|
1077
|
+
};
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
function resolveImportee$1(importee, jsonPath, aliasEntries) {
|
|
1081
|
+
if (Array.isArray(aliasEntries)) {
|
|
1082
|
+
if (!jsonPath) return importee;
|
|
1083
|
+
const matchedEntry = aliasEntries.find((x) => matches(x.find, importee));
|
|
1084
|
+
if (!matchedEntry) return importee;
|
|
1085
|
+
const updatedId = importee.replace(matchedEntry.find, matchedEntry.replacement);
|
|
1086
|
+
return toPosixPath(path.relative(path.dirname(jsonPath), updatedId));
|
|
1087
|
+
}
|
|
1088
|
+
return importee;
|
|
1089
|
+
}
|
|
1090
|
+
function toKebabCaseComponentName(name) {
|
|
1091
|
+
return name.replace(COMPONENT_NAME_LOWER_TO_UPPER_RE, "$1-$2").replace(COMPONENT_NAME_MULTI_UPPER_RE, "$1-$2").toLowerCase();
|
|
1092
|
+
}
|
|
1093
|
+
function normalizeUsingComponentPathByPlatform(importee, platform, dependencies, mode) {
|
|
1094
|
+
if (!hasNpmDependencyPrefix(dependencies, importee) && !importee.trim().startsWith("/")) return importee;
|
|
1095
|
+
return normalizeNpmImportPathByPlatform(importee, {
|
|
1096
|
+
platform,
|
|
1097
|
+
dependencies,
|
|
1098
|
+
alipayNpmMode: mode
|
|
1099
|
+
});
|
|
1100
|
+
}
|
|
1101
|
+
function normalizeUsingComponentsByPlatform(usingComponents, platform, options) {
|
|
1102
|
+
if (!shouldNormalizeUsingComponents(platform)) return usingComponents;
|
|
1103
|
+
const normalized = {};
|
|
1104
|
+
for (const [key, value] of Object.entries(usingComponents)) {
|
|
1105
|
+
const nextKey = COMPONENT_NAME_HAS_UPPER_RE.test(key) ? toKebabCaseComponentName(key) : key;
|
|
1106
|
+
const nextValue = normalizeUsingComponentPathByPlatform(value, platform, options?.dependencies, options?.alipayNpmMode);
|
|
1107
|
+
if (!Reflect.has(normalized, nextKey)) normalized[nextKey] = nextValue;
|
|
1108
|
+
}
|
|
1109
|
+
return normalized;
|
|
1110
|
+
}
|
|
1111
|
+
function normalizeComponentGenericsByPlatform(componentGenerics, platform) {
|
|
1112
|
+
if (!shouldFillComponentGenericsDefault(platform) && platform !== "weapp") return componentGenerics;
|
|
1113
|
+
const normalized = {};
|
|
1114
|
+
for (const [key, value] of Object.entries(componentGenerics)) {
|
|
1115
|
+
const placeholder = platform === "weapp" ? SCOPED_SLOT_GENERIC_KEY_RE$1.test(key) ? WEAPP_SCOPED_SLOT_GENERIC_COMPONENT_PLACEHOLDER : void 0 : ALIPAY_GENERIC_COMPONENT_PLACEHOLDER;
|
|
1116
|
+
if (!placeholder) {
|
|
1117
|
+
normalized[key] = value;
|
|
1118
|
+
continue;
|
|
1119
|
+
}
|
|
1120
|
+
if (value === true) {
|
|
1121
|
+
normalized[key] = { default: placeholder };
|
|
1122
|
+
continue;
|
|
1123
|
+
}
|
|
1124
|
+
if (isObject(value)) {
|
|
1125
|
+
const nextValue = { ...value };
|
|
1126
|
+
if (typeof nextValue.default !== "string" || !nextValue.default.trim()) nextValue.default = placeholder;
|
|
1127
|
+
normalized[key] = nextValue;
|
|
1128
|
+
continue;
|
|
1129
|
+
}
|
|
1130
|
+
normalized[key] = value;
|
|
1131
|
+
}
|
|
1132
|
+
return normalized;
|
|
1133
|
+
}
|
|
1134
|
+
function resolveJson(entry, aliasEntries, platform, options) {
|
|
1135
|
+
if (entry.json) {
|
|
1136
|
+
const json = entry.type === "app" ? normalizeAppJson(structuredClone(entry.json)) : structuredClone(entry.json);
|
|
1137
|
+
if (entry.jsonPath && Array.isArray(aliasEntries)) {
|
|
1138
|
+
const usingComponents = get(json, "usingComponents");
|
|
1139
|
+
if (isObject(usingComponents)) {
|
|
1140
|
+
for (const [key, importee] of Object.entries(usingComponents)) {
|
|
1141
|
+
const resolvedId = resolveImportee$1(importee, entry.jsonPath, aliasEntries);
|
|
1142
|
+
set(json, `usingComponents.${key}`, resolvedId);
|
|
1143
|
+
}
|
|
1144
|
+
set(json, "usingComponents", normalizeUsingComponentsByPlatform(usingComponents, platform, options));
|
|
1145
|
+
}
|
|
1146
|
+
if (entry.type === "app") for (const field of ["subPackages", "subpackages"]) {
|
|
1147
|
+
const subPackages = get(json, field);
|
|
1148
|
+
if (Array.isArray(subPackages)) {
|
|
1149
|
+
for (const subPackage of subPackages) if (subPackage.entry) subPackage.entry = changeFileExtension(subPackage.entry, "js");
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
} else {
|
|
1153
|
+
const usingComponents = get(json, "usingComponents");
|
|
1154
|
+
if (isObject(usingComponents)) set(json, "usingComponents", normalizeUsingComponentsByPlatform(usingComponents, platform, options));
|
|
1155
|
+
}
|
|
1156
|
+
const componentGenerics = get(json, "componentGenerics");
|
|
1157
|
+
if (isObject(componentGenerics)) set(json, "componentGenerics", normalizeComponentGenericsByPlatform(componentGenerics, platform));
|
|
1158
|
+
if (Reflect.has(json, "$schema")) delete json.$schema;
|
|
1159
|
+
return stringifyJson$1(json);
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
//#endregion
|
|
1163
|
+
//#region src/runtime/autoImport/service/actions.ts
|
|
1164
|
+
function createAutoImportActions(options) {
|
|
1165
|
+
function bumpVersion() {
|
|
1166
|
+
options.autoImportState.version += 1;
|
|
1167
|
+
}
|
|
1168
|
+
async function awaitOutputWrites() {
|
|
1169
|
+
while (true) {
|
|
1170
|
+
const pending = [
|
|
1171
|
+
...options.pendingRegistrations,
|
|
1172
|
+
options.outputsState.pendingWrite,
|
|
1173
|
+
options.outputsState.pendingTypedWrite,
|
|
1174
|
+
options.outputsState.pendingHtmlCustomDataWrite,
|
|
1175
|
+
options.outputsState.pendingVueComponentsWrite
|
|
1176
|
+
].filter((task) => Boolean(task));
|
|
1177
|
+
if (!pending.length) return;
|
|
1178
|
+
await Promise.all(pending);
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
function setSupportFileResolverComponents(components) {
|
|
1182
|
+
if (!options.resolverHelpers.setSupportFileResolverComponents(components)) return;
|
|
1183
|
+
bumpVersion();
|
|
1184
|
+
options.deferOrSchedule("manifest", true);
|
|
1185
|
+
const { typed, html, vue } = options.getOutputSettingsSnapshot();
|
|
1186
|
+
if (typed.enabled || html.enabled) options.resolverHelpers.syncResolverComponentProps();
|
|
1187
|
+
if (typed.enabled) options.deferOrSchedule("typed", true);
|
|
1188
|
+
if (html.enabled) options.deferOrSchedule("html", true);
|
|
1189
|
+
if (vue.enabled) {
|
|
1190
|
+
options.resolverHelpers.syncResolverComponentProps();
|
|
1191
|
+
options.deferOrSchedule("vue", true);
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
function clearSupportFileResolverComponents() {
|
|
1195
|
+
if (!options.resolverHelpers.clearSupportFileResolverComponents()) return;
|
|
1196
|
+
bumpVersion();
|
|
1197
|
+
options.resolverHelpers.syncResolverComponentProps();
|
|
1198
|
+
}
|
|
1199
|
+
return {
|
|
1200
|
+
reset() {
|
|
1201
|
+
bumpVersion();
|
|
1202
|
+
options.registry.clear();
|
|
1203
|
+
options.normalizedLocalComponents.clear();
|
|
1204
|
+
options.autoImportState.matcher = void 0;
|
|
1205
|
+
options.autoImportState.matcherKey = "";
|
|
1206
|
+
options.autoImportState.preparedGlobsKey = void 0;
|
|
1207
|
+
options.resolvedResolverComponents.clear();
|
|
1208
|
+
options.resolverHelpers.clearResolveCache();
|
|
1209
|
+
options.deferOrSchedule("manifest", true);
|
|
1210
|
+
options.componentMetadataMap.clear();
|
|
1211
|
+
options.resolverComponentNames.clear();
|
|
1212
|
+
const { typed, html, vue } = options.getOutputSettingsSnapshot();
|
|
1213
|
+
if (typed.enabled || html.enabled) options.resolverHelpers.syncResolverComponentProps();
|
|
1214
|
+
options.deferOrSchedule("typed", true);
|
|
1215
|
+
options.deferOrSchedule("html", true);
|
|
1216
|
+
if (vue.enabled) options.resolverHelpers.syncResolverComponentProps();
|
|
1217
|
+
options.deferOrSchedule("vue", true);
|
|
1218
|
+
},
|
|
1219
|
+
async registerPotentialComponent(filePath) {
|
|
1220
|
+
const task = Promise.resolve().then(async () => {
|
|
1221
|
+
await options.registryHelpers.registerLocalComponent(filePath);
|
|
1222
|
+
}).finally(() => {
|
|
1223
|
+
options.pendingRegistrations.delete(task);
|
|
1224
|
+
});
|
|
1225
|
+
options.pendingRegistrations.add(task);
|
|
1226
|
+
await task;
|
|
1227
|
+
},
|
|
1228
|
+
removePotentialComponent(filePath) {
|
|
1229
|
+
bumpVersion();
|
|
1230
|
+
const { removed, removedNames } = options.registryHelpers.removeRegisteredComponent({
|
|
1231
|
+
baseName: removeExtensionDeep(filePath),
|
|
1232
|
+
templatePath: filePath
|
|
1233
|
+
});
|
|
1234
|
+
options.deferOrSchedule("manifest", removed);
|
|
1235
|
+
for (const name of removedNames) if (options.resolverComponentNames.has(name)) options.componentMetadataMap.set(name, {
|
|
1236
|
+
types: /* @__PURE__ */ new Map(),
|
|
1237
|
+
docs: /* @__PURE__ */ new Map()
|
|
1238
|
+
});
|
|
1239
|
+
else options.componentMetadataMap.delete(name);
|
|
1240
|
+
const shouldWriteArtifacts = removed || removedNames.length > 0;
|
|
1241
|
+
options.deferOrSchedule("typed", shouldWriteArtifacts);
|
|
1242
|
+
options.deferOrSchedule("html", shouldWriteArtifacts);
|
|
1243
|
+
options.deferOrSchedule("vue", shouldWriteArtifacts);
|
|
1244
|
+
},
|
|
1245
|
+
setSupportFileResolverComponents,
|
|
1246
|
+
clearSupportFileResolverComponents,
|
|
1247
|
+
async syncSupportFileResolverComponents() {
|
|
1248
|
+
try {
|
|
1249
|
+
setSupportFileResolverComponents(options.resolverHelpers.collectStaticResolverComponentsForSupportFiles());
|
|
1250
|
+
await awaitOutputWrites();
|
|
1251
|
+
} finally {
|
|
1252
|
+
clearSupportFileResolverComponents();
|
|
1253
|
+
}
|
|
1254
|
+
},
|
|
1255
|
+
collectStaticResolverComponentsForSupportFiles() {
|
|
1256
|
+
return options.resolverHelpers.collectStaticResolverComponentsForSupportFiles();
|
|
1257
|
+
},
|
|
1258
|
+
resolve(componentName, importerBaseName) {
|
|
1259
|
+
const local = options.registry.get(componentName) ?? options.normalizedLocalComponents.get(toKebabCaseComponentName(componentName));
|
|
1260
|
+
if (local) return local;
|
|
1261
|
+
const resolvedValue = options.resolverHelpers.resolveWithResolvers(componentName, importerBaseName);
|
|
1262
|
+
if (!resolvedValue) return;
|
|
1263
|
+
const resolverChanged = options.resolvedResolverComponents.get(resolvedValue.name) !== resolvedValue.from;
|
|
1264
|
+
options.resolvedResolverComponents.set(resolvedValue.name, resolvedValue.from);
|
|
1265
|
+
if (resolverChanged) bumpVersion();
|
|
1266
|
+
const resolved = {
|
|
1267
|
+
kind: "resolver",
|
|
1268
|
+
value: resolvedValue
|
|
1269
|
+
};
|
|
1270
|
+
const { typed, html, vue } = options.getOutputSettingsSnapshot();
|
|
1271
|
+
if (typed.enabled || html.enabled) {
|
|
1272
|
+
const metadataMissing = !options.componentMetadataMap.has(resolved.value.name);
|
|
1273
|
+
if (metadataMissing) options.componentMetadataMap.set(resolved.value.name, {
|
|
1274
|
+
types: /* @__PURE__ */ new Map(),
|
|
1275
|
+
docs: /* @__PURE__ */ new Map()
|
|
1276
|
+
});
|
|
1277
|
+
if (typed.enabled && (resolverChanged || metadataMissing)) options.deferOrSchedule("typed", true);
|
|
1278
|
+
if (html.enabled && (resolverChanged || metadataMissing)) options.deferOrSchedule("html", true);
|
|
1279
|
+
} else options.componentMetadataMap.delete(resolved.value.name);
|
|
1280
|
+
if (vue.enabled && resolverChanged) options.deferOrSchedule("vue", true);
|
|
1281
|
+
if (resolverChanged) options.deferOrSchedule("manifest", true);
|
|
1282
|
+
return resolved;
|
|
1283
|
+
},
|
|
1284
|
+
filter(id) {
|
|
1285
|
+
const globMatcher = options.registryHelpers.ensureMatcher();
|
|
1286
|
+
if (!globMatcher) return false;
|
|
1287
|
+
return globMatcher(id);
|
|
1288
|
+
},
|
|
1289
|
+
getRegisteredLocalComponents() {
|
|
1290
|
+
return Array.from(options.registry.values());
|
|
1291
|
+
},
|
|
1292
|
+
hasPendingRegistrations() {
|
|
1293
|
+
return options.pendingRegistrations.size > 0;
|
|
1294
|
+
},
|
|
1295
|
+
awaitPendingRegistrations() {
|
|
1296
|
+
return Promise.all([...options.pendingRegistrations]).then(() => {});
|
|
1297
|
+
},
|
|
1298
|
+
awaitManifestWrites() {
|
|
1299
|
+
return awaitOutputWrites();
|
|
1300
|
+
}
|
|
1301
|
+
};
|
|
1302
|
+
}
|
|
1303
|
+
//#endregion
|
|
1304
|
+
//#region src/ast/index.ts
|
|
1305
|
+
/**
|
|
1306
|
+
* 解析 AST 引擎配置。
|
|
1307
|
+
*/
|
|
1308
|
+
function resolveAstEngine(config) {
|
|
1309
|
+
return config?.ast?.engine ?? "babel";
|
|
1310
|
+
}
|
|
1311
|
+
//#endregion
|
|
1312
|
+
//#region src/context/shared.ts
|
|
1313
|
+
const debug$2 = createDebugger("weapp-vite:context");
|
|
1314
|
+
function hasOwn$6(source, key) {
|
|
1315
|
+
return Object.prototype.hasOwnProperty.call(source, key);
|
|
1316
|
+
}
|
|
1317
|
+
function resolvedComponentName(entry) {
|
|
1318
|
+
const base = path.basename(entry);
|
|
1319
|
+
if (base === "index") {
|
|
1320
|
+
const dirName = path.dirname(entry);
|
|
1321
|
+
if (dirName === ".") return { base };
|
|
1322
|
+
return {
|
|
1323
|
+
componentName: path.basename(dirName),
|
|
1324
|
+
base
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1327
|
+
return {
|
|
1328
|
+
componentName: base,
|
|
1329
|
+
base
|
|
1330
|
+
};
|
|
1331
|
+
}
|
|
1332
|
+
function isEmptyObject$1(obj) {
|
|
1333
|
+
for (const key in obj) if (hasOwn$6(obj, key)) return false;
|
|
1334
|
+
return true;
|
|
1335
|
+
}
|
|
1336
|
+
//#endregion
|
|
1201
1337
|
//#region src/runtime/componentProps.ts
|
|
1202
1338
|
/**
|
|
1203
1339
|
* 提取组件 `properties/props` 的静态类型信息。
|
|
@@ -5129,141 +5265,6 @@ async function resolveEntryPath(input, options) {
|
|
|
5129
5265
|
for (const candidate of buildCandidates(base, extensions)) if (await exists(candidate)) return candidate;
|
|
5130
5266
|
}
|
|
5131
5267
|
//#endregion
|
|
5132
|
-
//#region src/utils/json.ts
|
|
5133
|
-
const ALIPAY_GENERIC_COMPONENT_PLACEHOLDER = "./__weapp_vite_generic_component";
|
|
5134
|
-
const WEAPP_SCOPED_SLOT_GENERIC_COMPONENT_PLACEHOLDER = "./__weapp_vite_scoped_slot_generic_component";
|
|
5135
|
-
const JSON_FILE_JS_EXTENSION_RE = /\.[jt]s$/;
|
|
5136
|
-
const COMPONENT_NAME_LOWER_TO_UPPER_RE = /([a-z0-9])([A-Z])/g;
|
|
5137
|
-
const COMPONENT_NAME_MULTI_UPPER_RE = /([A-Z]+)([A-Z][a-z])/g;
|
|
5138
|
-
const COMPONENT_NAME_HAS_UPPER_RE = /[A-Z]/;
|
|
5139
|
-
const SCOPED_SLOT_GENERIC_KEY_RE$1 = /^scoped-slots-/;
|
|
5140
|
-
function parseCommentJson(json) {
|
|
5141
|
-
return parse$2(json, void 0, true);
|
|
5142
|
-
}
|
|
5143
|
-
function jsonFileRemoveJsExtension(fileName) {
|
|
5144
|
-
return fileName.replace(JSON_FILE_JS_EXTENSION_RE, "");
|
|
5145
|
-
}
|
|
5146
|
-
function stringifyJson$1(value, replacer) {
|
|
5147
|
-
return stringify(value, replacer, 2);
|
|
5148
|
-
}
|
|
5149
|
-
function normalizeAppJson(json) {
|
|
5150
|
-
if (!json || typeof json !== "object" || Array.isArray(json)) return json;
|
|
5151
|
-
const subPackages = Array.isArray(json.subPackages) ? json.subPackages : Array.isArray(json.subpackages) ? json.subpackages : [];
|
|
5152
|
-
const { subpackages: _subpackages, ...rest } = json;
|
|
5153
|
-
return {
|
|
5154
|
-
...rest,
|
|
5155
|
-
subPackages: subPackages.map((subPackage) => ({
|
|
5156
|
-
...subPackage,
|
|
5157
|
-
pages: Array.isArray(subPackage?.pages) ? subPackage.pages : []
|
|
5158
|
-
}))
|
|
5159
|
-
};
|
|
5160
|
-
}
|
|
5161
|
-
function matches(pattern, importee) {
|
|
5162
|
-
if (pattern instanceof RegExp) return pattern.test(importee);
|
|
5163
|
-
if (importee.length < pattern.length) return false;
|
|
5164
|
-
if (importee === pattern) return true;
|
|
5165
|
-
return importee.startsWith(pattern + "/");
|
|
5166
|
-
}
|
|
5167
|
-
function getAliasEntries(options = {}) {
|
|
5168
|
-
if (options === false) return [];
|
|
5169
|
-
const { entries } = options;
|
|
5170
|
-
if (!entries) return [];
|
|
5171
|
-
if (Array.isArray(entries)) return entries.map((entry) => {
|
|
5172
|
-
return {
|
|
5173
|
-
find: entry.find,
|
|
5174
|
-
replacement: entry.replacement
|
|
5175
|
-
};
|
|
5176
|
-
});
|
|
5177
|
-
return Object.entries(entries).map(([key, value]) => {
|
|
5178
|
-
return {
|
|
5179
|
-
find: key,
|
|
5180
|
-
replacement: value
|
|
5181
|
-
};
|
|
5182
|
-
});
|
|
5183
|
-
}
|
|
5184
|
-
function resolveImportee$1(importee, jsonPath, aliasEntries) {
|
|
5185
|
-
if (Array.isArray(aliasEntries)) {
|
|
5186
|
-
if (!jsonPath) return importee;
|
|
5187
|
-
const matchedEntry = aliasEntries.find((x) => matches(x.find, importee));
|
|
5188
|
-
if (!matchedEntry) return importee;
|
|
5189
|
-
const updatedId = importee.replace(matchedEntry.find, matchedEntry.replacement);
|
|
5190
|
-
return toPosixPath(path.relative(path.dirname(jsonPath), updatedId));
|
|
5191
|
-
}
|
|
5192
|
-
return importee;
|
|
5193
|
-
}
|
|
5194
|
-
function toKebabCaseComponentName(name) {
|
|
5195
|
-
return name.replace(COMPONENT_NAME_LOWER_TO_UPPER_RE, "$1-$2").replace(COMPONENT_NAME_MULTI_UPPER_RE, "$1-$2").toLowerCase();
|
|
5196
|
-
}
|
|
5197
|
-
function normalizeUsingComponentPathByPlatform(importee, platform, dependencies, mode) {
|
|
5198
|
-
if (!hasNpmDependencyPrefix(dependencies, importee) && !importee.trim().startsWith("/")) return importee;
|
|
5199
|
-
return normalizeNpmImportPathByPlatform(importee, {
|
|
5200
|
-
platform,
|
|
5201
|
-
dependencies,
|
|
5202
|
-
alipayNpmMode: mode
|
|
5203
|
-
});
|
|
5204
|
-
}
|
|
5205
|
-
function normalizeUsingComponentsByPlatform(usingComponents, platform, options) {
|
|
5206
|
-
if (!shouldNormalizeUsingComponents(platform)) return usingComponents;
|
|
5207
|
-
const normalized = {};
|
|
5208
|
-
for (const [key, value] of Object.entries(usingComponents)) {
|
|
5209
|
-
const nextKey = COMPONENT_NAME_HAS_UPPER_RE.test(key) ? toKebabCaseComponentName(key) : key;
|
|
5210
|
-
const nextValue = normalizeUsingComponentPathByPlatform(value, platform, options?.dependencies, options?.alipayNpmMode);
|
|
5211
|
-
if (!Reflect.has(normalized, nextKey)) normalized[nextKey] = nextValue;
|
|
5212
|
-
}
|
|
5213
|
-
return normalized;
|
|
5214
|
-
}
|
|
5215
|
-
function normalizeComponentGenericsByPlatform(componentGenerics, platform) {
|
|
5216
|
-
if (!shouldFillComponentGenericsDefault(platform) && platform !== "weapp") return componentGenerics;
|
|
5217
|
-
const normalized = {};
|
|
5218
|
-
for (const [key, value] of Object.entries(componentGenerics)) {
|
|
5219
|
-
const placeholder = platform === "weapp" ? SCOPED_SLOT_GENERIC_KEY_RE$1.test(key) ? WEAPP_SCOPED_SLOT_GENERIC_COMPONENT_PLACEHOLDER : void 0 : ALIPAY_GENERIC_COMPONENT_PLACEHOLDER;
|
|
5220
|
-
if (!placeholder) {
|
|
5221
|
-
normalized[key] = value;
|
|
5222
|
-
continue;
|
|
5223
|
-
}
|
|
5224
|
-
if (value === true) {
|
|
5225
|
-
normalized[key] = { default: placeholder };
|
|
5226
|
-
continue;
|
|
5227
|
-
}
|
|
5228
|
-
if (isObject(value)) {
|
|
5229
|
-
const nextValue = { ...value };
|
|
5230
|
-
if (typeof nextValue.default !== "string" || !nextValue.default.trim()) nextValue.default = placeholder;
|
|
5231
|
-
normalized[key] = nextValue;
|
|
5232
|
-
continue;
|
|
5233
|
-
}
|
|
5234
|
-
normalized[key] = value;
|
|
5235
|
-
}
|
|
5236
|
-
return normalized;
|
|
5237
|
-
}
|
|
5238
|
-
function resolveJson(entry, aliasEntries, platform, options) {
|
|
5239
|
-
if (entry.json) {
|
|
5240
|
-
const json = entry.type === "app" ? normalizeAppJson(structuredClone(entry.json)) : structuredClone(entry.json);
|
|
5241
|
-
if (entry.jsonPath && Array.isArray(aliasEntries)) {
|
|
5242
|
-
const usingComponents = get(json, "usingComponents");
|
|
5243
|
-
if (isObject(usingComponents)) {
|
|
5244
|
-
for (const [key, importee] of Object.entries(usingComponents)) {
|
|
5245
|
-
const resolvedId = resolveImportee$1(importee, entry.jsonPath, aliasEntries);
|
|
5246
|
-
set(json, `usingComponents.${key}`, resolvedId);
|
|
5247
|
-
}
|
|
5248
|
-
set(json, "usingComponents", normalizeUsingComponentsByPlatform(usingComponents, platform, options));
|
|
5249
|
-
}
|
|
5250
|
-
if (entry.type === "app") for (const field of ["subPackages", "subpackages"]) {
|
|
5251
|
-
const subPackages = get(json, field);
|
|
5252
|
-
if (Array.isArray(subPackages)) {
|
|
5253
|
-
for (const subPackage of subPackages) if (subPackage.entry) subPackage.entry = changeFileExtension(subPackage.entry, "js");
|
|
5254
|
-
}
|
|
5255
|
-
}
|
|
5256
|
-
} else {
|
|
5257
|
-
const usingComponents = get(json, "usingComponents");
|
|
5258
|
-
if (isObject(usingComponents)) set(json, "usingComponents", normalizeUsingComponentsByPlatform(usingComponents, platform, options));
|
|
5259
|
-
}
|
|
5260
|
-
const componentGenerics = get(json, "componentGenerics");
|
|
5261
|
-
if (isObject(componentGenerics)) set(json, "componentGenerics", normalizeComponentGenericsByPlatform(componentGenerics, platform));
|
|
5262
|
-
if (Reflect.has(json, "$schema")) delete json.$schema;
|
|
5263
|
-
return stringifyJson$1(json);
|
|
5264
|
-
}
|
|
5265
|
-
}
|
|
5266
|
-
//#endregion
|
|
5267
5268
|
//#region src/utils/loadViteConfigFile.ts
|
|
5268
5269
|
const DEFAULT_VITE_CONFIG_FILES = [
|
|
5269
5270
|
"vite.config.ts",
|
|
@@ -5889,6 +5890,33 @@ async function resolveWeappConfigFile(options) {
|
|
|
5889
5890
|
//#endregion
|
|
5890
5891
|
//#region src/runtime/autoImport/service/registry.ts
|
|
5891
5892
|
const JSON_LIKE_FILE_RE = /\.(?:json|jsonc|json5)$/i;
|
|
5893
|
+
function rebuildNormalizedLocalComponents(registry, normalizedLocalComponents) {
|
|
5894
|
+
normalizedLocalComponents.clear();
|
|
5895
|
+
const ambiguousNames = /* @__PURE__ */ new Set();
|
|
5896
|
+
for (const [componentName, match] of registry) {
|
|
5897
|
+
const normalizedName = toKebabCaseComponentName(componentName);
|
|
5898
|
+
if (ambiguousNames.has(normalizedName)) continue;
|
|
5899
|
+
if (normalizedLocalComponents.has(normalizedName)) {
|
|
5900
|
+
normalizedLocalComponents.delete(normalizedName);
|
|
5901
|
+
ambiguousNames.add(normalizedName);
|
|
5902
|
+
continue;
|
|
5903
|
+
}
|
|
5904
|
+
normalizedLocalComponents.set(normalizedName, match);
|
|
5905
|
+
}
|
|
5906
|
+
}
|
|
5907
|
+
function refreshNormalizedLocalComponent(registry, normalizedLocalComponents, normalizedName) {
|
|
5908
|
+
let normalizedMatch;
|
|
5909
|
+
for (const [componentName, match] of registry) {
|
|
5910
|
+
if (toKebabCaseComponentName(componentName) !== normalizedName) continue;
|
|
5911
|
+
if (normalizedMatch) {
|
|
5912
|
+
normalizedLocalComponents.delete(normalizedName);
|
|
5913
|
+
return;
|
|
5914
|
+
}
|
|
5915
|
+
normalizedMatch = match;
|
|
5916
|
+
}
|
|
5917
|
+
if (normalizedMatch) normalizedLocalComponents.set(normalizedName, normalizedMatch);
|
|
5918
|
+
else normalizedLocalComponents.delete(normalizedName);
|
|
5919
|
+
}
|
|
5892
5920
|
function createRegistryHelpers(state) {
|
|
5893
5921
|
function scheduleOutputs(shouldWrite, vueEnabled) {
|
|
5894
5922
|
state.scheduleManifestWrite(shouldWrite);
|
|
@@ -5903,6 +5931,7 @@ function createRegistryHelpers(state) {
|
|
|
5903
5931
|
const { baseName, templatePath, jsEntry, jsonPath } = paths;
|
|
5904
5932
|
let removed = false;
|
|
5905
5933
|
const removedNames = [];
|
|
5934
|
+
const removedNormalizedNames = /* @__PURE__ */ new Set();
|
|
5906
5935
|
for (const [key, value] of state.registry) {
|
|
5907
5936
|
if (value.kind !== "local") continue;
|
|
5908
5937
|
const entry = value.entry;
|
|
@@ -5910,9 +5939,11 @@ function createRegistryHelpers(state) {
|
|
|
5910
5939
|
if (state.registry.delete(key)) {
|
|
5911
5940
|
removed = true;
|
|
5912
5941
|
removedNames.push(key);
|
|
5942
|
+
removedNormalizedNames.add(toKebabCaseComponentName(key));
|
|
5913
5943
|
}
|
|
5914
5944
|
}
|
|
5915
5945
|
}
|
|
5946
|
+
for (const normalizedName of removedNormalizedNames) refreshNormalizedLocalComponent(state.registry, state.normalizedLocalComponents, normalizedName);
|
|
5916
5947
|
return {
|
|
5917
5948
|
removed,
|
|
5918
5949
|
removedNames
|
|
@@ -5984,7 +6015,7 @@ function createRegistryHelpers(state) {
|
|
|
5984
6015
|
}
|
|
5985
6016
|
const sourceWithoutExt = removeExtensionDeep(resolvedJsonPath);
|
|
5986
6017
|
const from = `/${state.ctx.configService.relativeSrcRoot(state.ctx.configService.relativeCwd(sourceWithoutExt))}`;
|
|
5987
|
-
|
|
6018
|
+
const match = {
|
|
5988
6019
|
kind: "local",
|
|
5989
6020
|
entry: {
|
|
5990
6021
|
path: resolvedJsEntry,
|
|
@@ -5998,7 +6029,9 @@ function createRegistryHelpers(state) {
|
|
|
5998
6029
|
from,
|
|
5999
6030
|
resolvedId: resolvedJsEntry
|
|
6000
6031
|
}
|
|
6001
|
-
}
|
|
6032
|
+
};
|
|
6033
|
+
state.registry.set(componentName, match);
|
|
6034
|
+
refreshNormalizedLocalComponent(state.registry, state.normalizedLocalComponents, toKebabCaseComponentName(componentName));
|
|
6002
6035
|
state.scheduleManifestWrite(true);
|
|
6003
6036
|
const typedSettings = getTypedComponentsSettings(state.ctx);
|
|
6004
6037
|
const htmlSettings = getHtmlCustomDataSettings(state.ctx);
|
|
@@ -6383,6 +6416,8 @@ function logWarnOnce(message) {
|
|
|
6383
6416
|
function createAutoImportService(ctx) {
|
|
6384
6417
|
const autoImportState = ctx.runtimeState.autoImport;
|
|
6385
6418
|
const registry = autoImportState.registry;
|
|
6419
|
+
const normalizedLocalComponents = autoImportState.normalizedLocalComponents;
|
|
6420
|
+
rebuildNormalizedLocalComponents(registry, normalizedLocalComponents);
|
|
6386
6421
|
const resolvedResolverComponents = autoImportState.resolvedResolverComponents;
|
|
6387
6422
|
const manifestFileName = DEFAULT_AUTO_IMPORT_MANIFEST_FILENAME;
|
|
6388
6423
|
const manifestCache = /* @__PURE__ */ new Map();
|
|
@@ -6455,6 +6490,7 @@ function createAutoImportService(ctx) {
|
|
|
6455
6490
|
return {
|
|
6456
6491
|
...createAutoImportActions({
|
|
6457
6492
|
registry,
|
|
6493
|
+
normalizedLocalComponents,
|
|
6458
6494
|
autoImportState,
|
|
6459
6495
|
resolvedResolverComponents,
|
|
6460
6496
|
componentMetadataMap,
|
|
@@ -6463,6 +6499,7 @@ function createAutoImportService(ctx) {
|
|
|
6463
6499
|
registryHelpers: createRegistryHelpers({
|
|
6464
6500
|
ctx,
|
|
6465
6501
|
registry,
|
|
6502
|
+
normalizedLocalComponents,
|
|
6466
6503
|
autoImportState,
|
|
6467
6504
|
resolverComponentNames,
|
|
6468
6505
|
componentMetadataMap,
|
|
@@ -9291,6 +9328,7 @@ function createRuntimeState() {
|
|
|
9291
9328
|
},
|
|
9292
9329
|
autoImport: {
|
|
9293
9330
|
registry: /* @__PURE__ */ new Map(),
|
|
9331
|
+
normalizedLocalComponents: /* @__PURE__ */ new Map(),
|
|
9294
9332
|
resolvedResolverComponents: /* @__PURE__ */ new Map(),
|
|
9295
9333
|
matcherKey: "",
|
|
9296
9334
|
preparedGlobsKey: void 0,
|
|
@@ -9317,9 +9355,7 @@ function createRuntimeState() {
|
|
|
9317
9355
|
externalComponentEntryMap: /* @__PURE__ */ new Map(),
|
|
9318
9356
|
entriesMap: /* @__PURE__ */ new Map(),
|
|
9319
9357
|
vueEntryHasTemplate: /* @__PURE__ */ new Map(),
|
|
9320
|
-
|
|
9321
|
-
vueEntryScriptSignatures: /* @__PURE__ */ new Map(),
|
|
9322
|
-
vueEntryStyleIndependentSignatures: /* @__PURE__ */ new Map(),
|
|
9358
|
+
vueEntrySfcSignatures: /* @__PURE__ */ new Map(),
|
|
9323
9359
|
vueEntryTailwindContentSignatures: /* @__PURE__ */ new Map(),
|
|
9324
9360
|
vueEntryTailwindTemplateContentSignatures: /* @__PURE__ */ new Map(),
|
|
9325
9361
|
vueEntryTailwindScriptContentSignatures: /* @__PURE__ */ new Map(),
|
|
@@ -9409,6 +9445,7 @@ function resetRuntimeStateForFreshBuild(runtimeState) {
|
|
|
9409
9445
|
autoRoutes.loadingAppConfig = fresh.autoRoutes.loadingAppConfig;
|
|
9410
9446
|
const autoImport = runtimeState.autoImport;
|
|
9411
9447
|
autoImport.registry.clear();
|
|
9448
|
+
autoImport.normalizedLocalComponents.clear();
|
|
9412
9449
|
autoImport.resolvedResolverComponents.clear();
|
|
9413
9450
|
autoImport.matcher = void 0;
|
|
9414
9451
|
autoImport.matcherKey = fresh.autoImport.matcherKey;
|
|
@@ -12226,7 +12263,7 @@ function collectNativeBridgeContext(ast) {
|
|
|
12226
12263
|
};
|
|
12227
12264
|
}
|
|
12228
12265
|
function hasNativeComponentBridge(source) {
|
|
12229
|
-
return collectNativeBridgeContext(parse(source, BABEL_TS_MODULE_PARSER_OPTIONS)).nativeComponentTags.size > 0;
|
|
12266
|
+
return collectNativeBridgeContext(parse$2(source, BABEL_TS_MODULE_PARSER_OPTIONS)).nativeComponentTags.size > 0;
|
|
12230
12267
|
}
|
|
12231
12268
|
function findFunctionDeclaration(ast, componentName) {
|
|
12232
12269
|
for (const statement of ast.program.body) {
|
|
@@ -12247,7 +12284,7 @@ function findFirstFunctionDeclaration(ast) {
|
|
|
12247
12284
|
}
|
|
12248
12285
|
}
|
|
12249
12286
|
function compileStaticReactPage(source, filename, componentName) {
|
|
12250
|
-
const ast = parse(source, BABEL_TS_MODULE_PARSER_OPTIONS);
|
|
12287
|
+
const ast = parse$2(source, BABEL_TS_MODULE_PARSER_OPTIONS);
|
|
12251
12288
|
const bridgeContext = collectNativeBridgeContext(ast);
|
|
12252
12289
|
try {
|
|
12253
12290
|
const component = componentName ? findFunctionDeclaration(ast, componentName) : findFirstFunctionDeclaration(ast);
|
|
@@ -12508,10 +12545,13 @@ function createStatefulHmrSidecarPlugin() {
|
|
|
12508
12545
|
name: "weapp-vite:stateful-hmr-sidecar",
|
|
12509
12546
|
enforce: "pre",
|
|
12510
12547
|
async load(id) {
|
|
12548
|
+
if (id.includes("\0")) return;
|
|
12511
12549
|
const request = parseSidecarSourceRequest(id);
|
|
12512
|
-
if (!request
|
|
12550
|
+
if (!request) return;
|
|
12513
12551
|
this.addWatchFile(request.sourceId);
|
|
12514
|
-
const
|
|
12552
|
+
const source = await readFile(request.sourceId, "utf8");
|
|
12553
|
+
if (request.kind === "style") return source;
|
|
12554
|
+
const code = createStatefulHmrSidecarModuleCode(id, source);
|
|
12515
12555
|
return code ? {
|
|
12516
12556
|
code,
|
|
12517
12557
|
moduleSideEffects: "no-treeshake"
|
|
@@ -12916,20 +12956,45 @@ function createId() {
|
|
|
12916
12956
|
//#endregion
|
|
12917
12957
|
//#region src/runtime/statefulHmr/viteAdapter.ts
|
|
12918
12958
|
const clientId = "weapp-vite-stateful-hmr";
|
|
12959
|
+
const initialBuildTimeoutMs = 6e4;
|
|
12960
|
+
const require = createRequire(import.meta.url);
|
|
12961
|
+
function resolveViteDevEngine() {
|
|
12962
|
+
try {
|
|
12963
|
+
const vitePackagePath = require.resolve("vite/package.json");
|
|
12964
|
+
const viteRolldown = createRequire(vitePackagePath)("rolldown/experimental");
|
|
12965
|
+
if (typeof viteRolldown.dev === "function") return viteRolldown.dev;
|
|
12966
|
+
} catch {}
|
|
12967
|
+
return dev;
|
|
12968
|
+
}
|
|
12969
|
+
async function withInitialBuildTimeout(task, timeoutMs = initialBuildTimeoutMs) {
|
|
12970
|
+
let timeout;
|
|
12971
|
+
try {
|
|
12972
|
+
return await Promise.race([task, new Promise((_resolve, reject) => {
|
|
12973
|
+
timeout = setTimeout(() => {
|
|
12974
|
+
reject(/* @__PURE__ */ new Error(`stateful-experimental HMR 初始构建超时(>${timeoutMs}ms)。`));
|
|
12975
|
+
}, timeoutMs);
|
|
12976
|
+
})]);
|
|
12977
|
+
} finally {
|
|
12978
|
+
if (timeout) clearTimeout(timeout);
|
|
12979
|
+
}
|
|
12980
|
+
}
|
|
12919
12981
|
var StatefulHmrViteAdapter = class {
|
|
12920
12982
|
config;
|
|
12921
12983
|
server;
|
|
12922
12984
|
callbacks;
|
|
12923
12985
|
watchOptions;
|
|
12924
12986
|
createDevEngine;
|
|
12987
|
+
initialBuildTimeout;
|
|
12925
12988
|
bundledDev;
|
|
12926
12989
|
initialOutputError;
|
|
12927
|
-
|
|
12990
|
+
initialRuntimeValidated = false;
|
|
12991
|
+
constructor(config, server, callbacks, watchOptions = {}, createDevEngine = resolveViteDevEngine(), initialBuildTimeout = initialBuildTimeoutMs) {
|
|
12928
12992
|
this.config = config;
|
|
12929
12993
|
this.server = server;
|
|
12930
12994
|
this.callbacks = callbacks;
|
|
12931
12995
|
this.watchOptions = watchOptions;
|
|
12932
12996
|
this.createDevEngine = createDevEngine;
|
|
12997
|
+
this.initialBuildTimeout = initialBuildTimeout;
|
|
12933
12998
|
}
|
|
12934
12999
|
install() {
|
|
12935
13000
|
const bundledDev = this.server.environments.client.bundledDev;
|
|
@@ -13016,7 +13081,10 @@ var StatefulHmrViteAdapter = class {
|
|
|
13016
13081
|
const original = bundledDev.storeOutputFiles.bind(bundledDev);
|
|
13017
13082
|
bundledDev.storeOutputFiles = (output) => {
|
|
13018
13083
|
try {
|
|
13019
|
-
if (output.some((item) => item.fileName === "app.js"))
|
|
13084
|
+
if (!this.initialRuntimeValidated && output.some((item) => item.fileName === "app.js")) {
|
|
13085
|
+
assertStatefulHmrRuntimeOutput(output);
|
|
13086
|
+
this.initialRuntimeValidated = true;
|
|
13087
|
+
}
|
|
13020
13088
|
original(output);
|
|
13021
13089
|
this.callbacks.onOutput(output);
|
|
13022
13090
|
} catch (error) {
|
|
@@ -13052,10 +13120,10 @@ var StatefulHmrViteAdapter = class {
|
|
|
13052
13120
|
this.callbacks.onError(message);
|
|
13053
13121
|
});
|
|
13054
13122
|
await engine.registerClient(clientId);
|
|
13055
|
-
await engine.ensureCurrentBuildFinish();
|
|
13123
|
+
await withInitialBuildTimeout(engine.ensureCurrentBuildFinish(), this.initialBuildTimeout);
|
|
13056
13124
|
if (this.initialOutputError) throw this.initialOutputError;
|
|
13057
13125
|
if ((await engine.getBundleState()).lastBuildErrored) throw new Error("微信状态保持 HMR 初次构建失败。");
|
|
13058
|
-
await this.callbacks.waitForInitialBundle();
|
|
13126
|
+
await withInitialBuildTimeout(this.callbacks.waitForInitialBundle(), this.initialBuildTimeout);
|
|
13059
13127
|
};
|
|
13060
13128
|
}
|
|
13061
13129
|
handleHmrUpdates(result) {
|
|
@@ -13271,13 +13339,16 @@ var StatefulHmrSession = class {
|
|
|
13271
13339
|
}
|
|
13272
13340
|
handlePatch(files, output) {
|
|
13273
13341
|
if (output.type === "Noop") return false;
|
|
13274
|
-
|
|
13342
|
+
const dirtyReasonSummary = this.ctx.runtimeState.build.hmr.profile.dirtyReasonSummary ?? [];
|
|
13343
|
+
const allowTailwindContentPatch = dirtyReasonSummary.some((reason) => reason.startsWith("tailwind-content:"));
|
|
13344
|
+
if (!isSafeJavaScriptPatch(files, output, dirtyReasonSummary, this.entryIds, this.server.config.root, { allowTailwindContent: allowTailwindContentPatch })) {
|
|
13275
13345
|
if (shouldRestartStatefulHmrServer(files, this.ctx.configService?.configFileDependencies)) this.requestServerRestart();
|
|
13276
13346
|
else if (this.snapshotScheduler.isPending() || files.length > 0 && files.every(isStatefulHmrAssetFile) || shouldUseStatefulHmrSnapshotOnly(this.ctx.runtimeState.build.hmr.profile.dirtyReasonSummary ?? [])) {
|
|
13277
13347
|
if (!this.snapshotScheduler.isPending()) this.requestSnapshotRefresh(files);
|
|
13278
13348
|
} else this.requestFullBuild(files);
|
|
13279
13349
|
return false;
|
|
13280
13350
|
}
|
|
13351
|
+
if (allowTailwindContentPatch) this.requestSnapshotRefresh(files);
|
|
13281
13352
|
this.adapter.registerPatchModules(output.code).then(async () => {
|
|
13282
13353
|
const code = await transformJavaScript(output.code, output.filename);
|
|
13283
13354
|
if (shouldResetStatefulHmrRetention(this.transport.retainedDeltaCount, this.transport.retainedDeltaBytes, Buffer.byteLength(code))) {
|
|
@@ -13402,20 +13473,21 @@ function redirectNativeComponentRegistration(code) {
|
|
|
13402
13473
|
} });
|
|
13403
13474
|
return changed ? magicString.toString() : code;
|
|
13404
13475
|
}
|
|
13405
|
-
function isSafeJavaScriptPatch(files, output, dirtyReasonSummary = [], entryIds, root) {
|
|
13476
|
+
function isSafeJavaScriptPatch(files, output, dirtyReasonSummary = [], entryIds, root, options = {}) {
|
|
13406
13477
|
const normalizedEntryIds = entryIds ? new Set(Array.from(entryIds, (entryId) => normalizeFsResolvedId(entryId))) : void 0;
|
|
13407
13478
|
return output.type === "Patch" && files.every((file) => /\.(?:[cm]?[jt]sx?|vue)$/.test(file)) && (!normalizedEntryIds || files.every((file) => {
|
|
13408
13479
|
const absoluteFile = path.isAbsolute(file) || !root ? file : path.resolve(root, file);
|
|
13409
13480
|
return normalizedEntryIds.has(normalizeFsResolvedId(absoluteFile));
|
|
13410
|
-
})) && !output.changedIds?.some(isNonJavaScriptSidecarId) && !dirtyReasonSummary.some(isUnsafeStatefulHmrReason);
|
|
13481
|
+
})) && !output.changedIds?.some(isNonJavaScriptSidecarId) && !dirtyReasonSummary.some((reason) => isUnsafeStatefulHmrReason(reason, options.allowTailwindContent === true));
|
|
13411
13482
|
}
|
|
13412
13483
|
function requiresStatefulHmrSnapshot(file, dirtyReasonSummary = []) {
|
|
13413
|
-
return /\.(?:jsx|tsx)$/.test(file) || !/\.(?:[cm]?[jt]sx?|vue)$/.test(file) || dirtyReasonSummary.some(isUnsafeStatefulHmrReason);
|
|
13484
|
+
return /\.(?:jsx|tsx)$/.test(file) || !/\.(?:[cm]?[jt]sx?|vue)$/.test(file) || dirtyReasonSummary.some((reason) => isUnsafeStatefulHmrReason(reason));
|
|
13414
13485
|
}
|
|
13415
13486
|
function isStatefulHmrAssetFile(file) {
|
|
13416
13487
|
return !/\.(?:[cm]?[jt]sx?|vue)$/.test(file);
|
|
13417
13488
|
}
|
|
13418
|
-
function isUnsafeStatefulHmrReason(reason) {
|
|
13489
|
+
function isUnsafeStatefulHmrReason(reason, allowTailwindContent = false) {
|
|
13490
|
+
if (allowTailwindContent && reason.startsWith("tailwind-content:")) return false;
|
|
13419
13491
|
return /^(?:entry-json-only|entry-local-asset|entry-style-only|react-template|tailwind-content):/.test(reason);
|
|
13420
13492
|
}
|
|
13421
13493
|
function shouldUseStatefulHmrSnapshotOnly(dirtyReasonSummary) {
|
|
@@ -13591,6 +13663,11 @@ async function runAutoImportBatch(autoImportService, task) {
|
|
|
13591
13663
|
if (typeof autoImportService?.runInBatch === "function") return await autoImportService.runInBatch(task);
|
|
13592
13664
|
return await task();
|
|
13593
13665
|
}
|
|
13666
|
+
function findMatchingComponentName(components, componentName) {
|
|
13667
|
+
if (hasOwn$4(components, componentName)) return componentName;
|
|
13668
|
+
const normalizedComponentName = toKebabCaseComponentName(componentName);
|
|
13669
|
+
for (const candidateName in components) if (hasOwn$4(components, candidateName) && toKebabCaseComponentName(candidateName) === normalizedComponentName) return candidateName;
|
|
13670
|
+
}
|
|
13594
13671
|
async function refreshAutoImportImporters(ctx, filePath) {
|
|
13595
13672
|
const { wxmlService, configService, autoImportService } = ctx;
|
|
13596
13673
|
if (!wxmlService || !configService) return;
|
|
@@ -13599,9 +13676,10 @@ async function refreshAutoImportImporters(ctx, filePath) {
|
|
|
13599
13676
|
const touchedImporters = /* @__PURE__ */ new Set();
|
|
13600
13677
|
const entries = Array.from(wxmlService.wxmlComponentsMap.entries());
|
|
13601
13678
|
for (const [baseName, components] of entries) {
|
|
13602
|
-
|
|
13679
|
+
const matchingComponentName = findMatchingComponentName(components, componentName);
|
|
13680
|
+
if (!matchingComponentName) continue;
|
|
13603
13681
|
const pendingEntriesByImporter = ctx.runtimeState?.autoImport?.pendingEntriesByImporter;
|
|
13604
|
-
const pendingEntry = (autoImportService?.resolve(
|
|
13682
|
+
const pendingEntry = (autoImportService?.resolve(matchingComponentName, baseName))?.value.from;
|
|
13605
13683
|
if (pendingEntriesByImporter && pendingEntry) {
|
|
13606
13684
|
const pendingEntries = pendingEntriesByImporter.get(baseName) ?? /* @__PURE__ */ new Set();
|
|
13607
13685
|
pendingEntries.add(pendingEntry);
|
|
@@ -14887,7 +14965,7 @@ const TRAILING_SLASH_PATTERN = /\/+$/;
|
|
|
14887
14965
|
function hasDependency(packageJson, name) {
|
|
14888
14966
|
return Boolean(packageJson?.dependencies?.[name] || packageJson?.devDependencies?.[name] || packageJson?.peerDependencies?.[name]);
|
|
14889
14967
|
}
|
|
14890
|
-
function unique(values) {
|
|
14968
|
+
function unique$1(values) {
|
|
14891
14969
|
return [...new Set(values)];
|
|
14892
14970
|
}
|
|
14893
14971
|
function rebaseManagedPathValue(root, managedDir, value) {
|
|
@@ -14918,7 +14996,7 @@ function getManagedTypeScriptConfig(ctx) {
|
|
|
14918
14996
|
async function readLegacyManagedTsconfigFile(filePath) {
|
|
14919
14997
|
try {
|
|
14920
14998
|
const content = await fs$1.readFile(filePath, "utf8");
|
|
14921
|
-
const parsed = parse
|
|
14999
|
+
const parsed = parse(content, void 0, true);
|
|
14922
15000
|
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return;
|
|
14923
15001
|
return parsed;
|
|
14924
15002
|
} catch {
|
|
@@ -14964,7 +15042,7 @@ function getAppTypes(ctx, legacyConfig) {
|
|
|
14964
15042
|
if (config.web && config.web.enable !== false) types.push("vite/client");
|
|
14965
15043
|
if (Array.isArray(legacyTypes) && legacyTypes.length > 0) types.push(...legacyTypes);
|
|
14966
15044
|
if (Array.isArray(userTypes) && userTypes.length > 0) types.push(...userTypes);
|
|
14967
|
-
return unique(types);
|
|
15045
|
+
return unique$1(types);
|
|
14968
15046
|
}
|
|
14969
15047
|
function getAppPaths(ctx, legacyConfig) {
|
|
14970
15048
|
const configService = requireConfigService(ctx, "生成 app paths 前必须初始化 configService。");
|
|
@@ -15025,13 +15103,13 @@ function createAppTsconfig(ctx, legacyConfig) {
|
|
|
15025
15103
|
...legacyConfig?.app?.vueCompilerOptions ?? {},
|
|
15026
15104
|
...userConfig?.app?.vueCompilerOptions ?? {}
|
|
15027
15105
|
};
|
|
15028
|
-
const include = unique([
|
|
15106
|
+
const include = unique$1([
|
|
15029
15107
|
...createDefaultAppInclude(requireConfigService(ctx, "生成 app include 前必须初始化 configService。").srcRoot),
|
|
15030
15108
|
...legacyConfig?.app?.include ?? [],
|
|
15031
15109
|
...userConfig?.app?.include ?? []
|
|
15032
15110
|
]);
|
|
15033
|
-
const exclude = unique([...legacyConfig?.app?.exclude ?? [], ...userConfig?.app?.exclude ?? []]);
|
|
15034
|
-
const files = unique([...legacyConfig?.app?.files ?? [], ...userConfig?.app?.files ?? []]);
|
|
15111
|
+
const exclude = unique$1([...legacyConfig?.app?.exclude ?? [], ...userConfig?.app?.exclude ?? []]);
|
|
15112
|
+
const files = unique$1([...legacyConfig?.app?.files ?? [], ...userConfig?.app?.files ?? []]);
|
|
15035
15113
|
return {
|
|
15036
15114
|
extends: "./tsconfig.shared.json",
|
|
15037
15115
|
compilerOptions,
|
|
@@ -15051,13 +15129,13 @@ function createNodeTsconfig(ctx, legacyConfig) {
|
|
|
15051
15129
|
...omitDeprecatedCompilerOptions(legacyConfig?.node?.compilerOptions) ?? {},
|
|
15052
15130
|
...omitDeprecatedCompilerOptions(userConfig?.node?.compilerOptions) ?? {}
|
|
15053
15131
|
};
|
|
15054
|
-
const include = unique([
|
|
15132
|
+
const include = unique$1([
|
|
15055
15133
|
...DEFAULT_NODE_INCLUDE,
|
|
15056
15134
|
...legacyConfig?.node?.include ?? [],
|
|
15057
15135
|
...userConfig?.node?.include ?? []
|
|
15058
15136
|
]);
|
|
15059
|
-
const exclude = unique([...legacyConfig?.node?.exclude ?? [], ...userConfig?.node?.exclude ?? []]);
|
|
15060
|
-
const files = unique([...legacyConfig?.node?.files ?? [], ...userConfig?.node?.files ?? []]);
|
|
15137
|
+
const exclude = unique$1([...legacyConfig?.node?.exclude ?? [], ...userConfig?.node?.exclude ?? []]);
|
|
15138
|
+
const files = unique$1([...legacyConfig?.node?.files ?? [], ...userConfig?.node?.files ?? []]);
|
|
15061
15139
|
return {
|
|
15062
15140
|
extends: "./tsconfig.shared.json",
|
|
15063
15141
|
compilerOptions,
|
|
@@ -15076,9 +15154,9 @@ function createServerTsconfig(ctx, legacyConfig) {
|
|
|
15076
15154
|
...omitDeprecatedCompilerOptions(legacyConfig?.server?.compilerOptions) ?? {},
|
|
15077
15155
|
...omitDeprecatedCompilerOptions(userConfig?.server?.compilerOptions) ?? {}
|
|
15078
15156
|
};
|
|
15079
|
-
const files = unique([...legacyConfig?.server?.files ?? [], ...userConfig?.server?.files ?? []]);
|
|
15080
|
-
const include = unique([...legacyConfig?.server?.include ?? [], ...userConfig?.server?.include ?? []]);
|
|
15081
|
-
const exclude = unique([...legacyConfig?.server?.exclude ?? [], ...userConfig?.server?.exclude ?? []]);
|
|
15157
|
+
const files = unique$1([...legacyConfig?.server?.files ?? [], ...userConfig?.server?.files ?? []]);
|
|
15158
|
+
const include = unique$1([...legacyConfig?.server?.include ?? [], ...userConfig?.server?.include ?? []]);
|
|
15159
|
+
const exclude = unique$1([...legacyConfig?.server?.exclude ?? [], ...userConfig?.server?.exclude ?? []]);
|
|
15082
15160
|
return {
|
|
15083
15161
|
extends: "./tsconfig.shared.json",
|
|
15084
15162
|
compilerOptions,
|
|
@@ -15158,7 +15236,7 @@ async function readTsconfigData(filePath) {
|
|
|
15158
15236
|
const content = await fs$1.readFile(filePath, "utf8").catch(() => void 0);
|
|
15159
15237
|
if (!content) return;
|
|
15160
15238
|
try {
|
|
15161
|
-
const parsed = parse
|
|
15239
|
+
const parsed = parse(content, void 0, true);
|
|
15162
15240
|
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : void 0;
|
|
15163
15241
|
} catch {
|
|
15164
15242
|
return;
|
|
@@ -15243,7 +15321,7 @@ async function syncManagedTsconfigBootstrapFiles(cwd) {
|
|
|
15243
15321
|
function parseJsonObject(content) {
|
|
15244
15322
|
if (!content) return;
|
|
15245
15323
|
try {
|
|
15246
|
-
const parsed = parse
|
|
15324
|
+
const parsed = parse(content, void 0, true);
|
|
15247
15325
|
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : void 0;
|
|
15248
15326
|
} catch {
|
|
15249
15327
|
return;
|
|
@@ -15781,6 +15859,19 @@ function toStatefulHmrOutput(output) {
|
|
|
15781
15859
|
if (!Array.isArray(output) && !("output" in output)) throw new TypeError("stateful HMR snapshot build unexpectedly returned a watcher");
|
|
15782
15860
|
return (Array.isArray(output) ? output : [output]).flatMap((result) => result.output);
|
|
15783
15861
|
}
|
|
15862
|
+
function collectStatefulHmrEntryIds(initialEntryIds, snapshot, cwd, srcRoot) {
|
|
15863
|
+
const entryIds = new Set(Array.from(initialEntryIds, (id) => normalizeFsResolvedId(id)));
|
|
15864
|
+
const normalizedSrcRoot = normalizeFsResolvedId(srcRoot).replace(/\/$/, "");
|
|
15865
|
+
for (const item of snapshot) {
|
|
15866
|
+
if (item.type !== "chunk") continue;
|
|
15867
|
+
for (const moduleId of Object.keys(item.modules ?? {})) {
|
|
15868
|
+
const sourceId = moduleId.split("?")[0];
|
|
15869
|
+
const normalizedId = normalizeFsResolvedId(path.isAbsolute(sourceId) ? sourceId : path.resolve(cwd, sourceId));
|
|
15870
|
+
if (normalizedId.startsWith(`${normalizedSrcRoot}/`) && /\.(?:[cm]?[jt]sx?|vue)$/.test(normalizedId)) entryIds.add(normalizedId);
|
|
15871
|
+
}
|
|
15872
|
+
}
|
|
15873
|
+
return entryIds;
|
|
15874
|
+
}
|
|
15784
15875
|
function resolveSnapshotSidecarDirtySummary(filePath, affectedEntries) {
|
|
15785
15876
|
const normalizedFile = normalizeFsResolvedId(filePath);
|
|
15786
15877
|
if (configSuffixes.find((suffix) => normalizedFile.endsWith(suffix))) return "json-sidecar:1";
|
|
@@ -16546,7 +16637,7 @@ function createBuildService(ctx) {
|
|
|
16546
16637
|
}
|
|
16547
16638
|
};
|
|
16548
16639
|
const initialSnapshot = toStatefulHmrOutput(await build(snapshotBuildOptions));
|
|
16549
|
-
const initialEntryIds =
|
|
16640
|
+
const initialEntryIds = collectStatefulHmrEntryIds(ctx.runtimeState.build.hmr.resolvedEntryMap.keys(), initialSnapshot, configService.cwd, configService.absoluteSrcRoot);
|
|
16550
16641
|
const skylineFiles = findSkylineRendererFiles(initialSnapshot);
|
|
16551
16642
|
if (skylineFiles.length > 0) await applySkylineHmrFallback({
|
|
16552
16643
|
compileHotReLoad,
|
|
@@ -18009,7 +18100,7 @@ async function inspectTsconfigPathsState(filePath, visited) {
|
|
|
18009
18100
|
}
|
|
18010
18101
|
let parsed;
|
|
18011
18102
|
try {
|
|
18012
|
-
parsed = parse
|
|
18103
|
+
parsed = parse(content);
|
|
18013
18104
|
} catch {
|
|
18014
18105
|
return {
|
|
18015
18106
|
root: false,
|
|
@@ -20994,7 +21085,11 @@ function collectAutoImportGlobExtensions(glob) {
|
|
|
20994
21085
|
return AUTO_IMPORT_LOCAL_EXTENSIONS.filter((ext) => glob.includes(`.${ext}`));
|
|
20995
21086
|
}
|
|
20996
21087
|
function collectLocalCandidatePaths(componentName, globs, absoluteSrcRoot) {
|
|
20997
|
-
const names = /* @__PURE__ */ new Set([
|
|
21088
|
+
const names = /* @__PURE__ */ new Set([
|
|
21089
|
+
componentName,
|
|
21090
|
+
toPascalTagName(componentName),
|
|
21091
|
+
toKebabCaseComponentName(componentName)
|
|
21092
|
+
]);
|
|
20998
21093
|
const candidates = /* @__PURE__ */ new Set();
|
|
20999
21094
|
for (const glob of globs) {
|
|
21000
21095
|
const extensions = collectAutoImportGlobExtensions(glob);
|
|
@@ -21209,191 +21304,16 @@ function createJsonEmitManager(configService) {
|
|
|
21209
21304
|
};
|
|
21210
21305
|
}
|
|
21211
21306
|
//#endregion
|
|
21212
|
-
//#region src/
|
|
21213
|
-
|
|
21214
|
-
|
|
21215
|
-
|
|
21216
|
-
|
|
21217
|
-
|
|
21218
|
-
|
|
21219
|
-
|
|
21220
|
-
|
|
21221
|
-
|
|
21222
|
-
if (!shouldUseNativeVueSfcSignature()) return;
|
|
21223
|
-
if (binding !== void 0) return binding || void 0;
|
|
21224
|
-
try {
|
|
21225
|
-
const modulePath = resolveNativeAstModulePath();
|
|
21226
|
-
binding = require(modulePath);
|
|
21227
|
-
} catch {
|
|
21228
|
-
binding = false;
|
|
21229
|
-
}
|
|
21230
|
-
return binding || void 0;
|
|
21231
|
-
}
|
|
21232
|
-
//#endregion
|
|
21233
|
-
//#region src/utils/file/vueSfcSignature.ts
|
|
21234
|
-
const JSON_MACRO_HINT_RE = /\bdefine(?:App|Page|Component|Sitemap|Theme)Json\s*\(/;
|
|
21235
|
-
const JS_STRING_LITERALS_RE = /"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`/g;
|
|
21236
|
-
const SCRIPT_CALL_EXPRESSION_RE = /\b[$a-z_][\w$]*\s*\((?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`|[^()"'`])*\)/gi;
|
|
21237
|
-
const CLASS_LIKE_TEMPLATE_ATTR_RE = /(?:^|[\s<])(?:[\w-]*class[\w-]*|v-bind(?::[\w-]*class[\w-]*)?|:[\w-]*class[\w-]*)(?:\.[\w-]+)*\s*=\s*(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|`(?:\\.|[^`\\])*`|[^\s>]+)/g;
|
|
21238
|
-
const VUE_DYNAMIC_CLASS_LIKE_BINDING_RE = /(?:^|[\s<])(?:v-bind(?::[\w-]*class[\w-]*)?|:[\w-]*class[\w-]*)(?:\.[\w-]+)*\s*=/;
|
|
21239
|
-
const SCRIPT_DYNAMIC_CLASS_HINT_RE = /\b(?:import|export)\b|\b[$a-z_][\w$]*\s*\(/i;
|
|
21240
|
-
const signaturePayloadCache = /* @__PURE__ */ new Map();
|
|
21241
|
-
function hashPayload(payload) {
|
|
21242
|
-
return createHash("sha256").update(JSON.stringify(payload)).digest("hex").slice(0, 16);
|
|
21243
|
-
}
|
|
21244
|
-
function serializeAttrs(attrs) {
|
|
21245
|
-
return Object.fromEntries(Object.entries(attrs).sort(([a], [b]) => a.localeCompare(b)));
|
|
21246
|
-
}
|
|
21247
|
-
function serializeBlock(block, content) {
|
|
21248
|
-
if (!block) return null;
|
|
21249
|
-
return {
|
|
21250
|
-
type: block.type,
|
|
21251
|
-
attrs: serializeAttrs(block.attrs),
|
|
21252
|
-
content: content ?? block.content
|
|
21253
|
-
};
|
|
21254
|
-
}
|
|
21255
|
-
function stripJsonMacrosFromScriptContent(content, filename) {
|
|
21256
|
-
try {
|
|
21257
|
-
return stripJsonMacroCallsFromCode(content, filename);
|
|
21258
|
-
} catch {
|
|
21259
|
-
return content;
|
|
21260
|
-
}
|
|
21261
|
-
}
|
|
21262
|
-
function buildNonJsonDescriptorPayload(descriptor, filename) {
|
|
21263
|
-
const scriptSetupContent = descriptor.scriptSetup ? stripJsonMacrosFromScriptContent(descriptor.scriptSetup.content, filename) : void 0;
|
|
21264
|
-
return {
|
|
21265
|
-
script: serializeBlock(descriptor.script),
|
|
21266
|
-
scriptSetup: serializeBlock(descriptor.scriptSetup, scriptSetupContent),
|
|
21267
|
-
template: serializeBlock(descriptor.template),
|
|
21268
|
-
styles: descriptor.styles.map((style) => serializeBlock(style)),
|
|
21269
|
-
customBlocks: descriptor.customBlocks.filter((block) => block.type !== "json").map((block) => serializeBlock(block))
|
|
21270
|
-
};
|
|
21271
|
-
}
|
|
21272
|
-
function buildScriptDescriptorPayload(descriptor, filename) {
|
|
21273
|
-
const scriptSetupContent = descriptor.scriptSetup ? stripJsonMacrosFromScriptContent(descriptor.scriptSetup.content, filename) : void 0;
|
|
21274
|
-
return {
|
|
21275
|
-
script: serializeBlock(descriptor.script),
|
|
21276
|
-
scriptSetup: serializeBlock(descriptor.scriptSetup, scriptSetupContent)
|
|
21277
|
-
};
|
|
21278
|
-
}
|
|
21279
|
-
function buildStyleIndependentDescriptorPayload(descriptor, filename) {
|
|
21280
|
-
const scriptSetupContent = descriptor.scriptSetup ? stripJsonMacrosFromScriptContent(descriptor.scriptSetup.content, filename) : void 0;
|
|
21281
|
-
return {
|
|
21282
|
-
script: serializeBlock(descriptor.script),
|
|
21283
|
-
scriptSetup: serializeBlock(descriptor.scriptSetup, scriptSetupContent),
|
|
21284
|
-
template: serializeBlock(descriptor.template),
|
|
21285
|
-
customBlocks: descriptor.customBlocks.filter((block) => block.type !== "json").map((block) => serializeBlock(block))
|
|
21286
|
-
};
|
|
21287
|
-
}
|
|
21288
|
-
function collectScriptLiteralCandidates(content) {
|
|
21289
|
-
const candidates = [];
|
|
21290
|
-
for (const match of content.matchAll(JS_STRING_LITERALS_RE)) candidates.push(match[0]);
|
|
21291
|
-
return candidates;
|
|
21292
|
-
}
|
|
21293
|
-
function collectScriptCallLiteralCandidates(content) {
|
|
21294
|
-
const candidates = /* @__PURE__ */ new Set();
|
|
21295
|
-
for (const callMatch of content.matchAll(SCRIPT_CALL_EXPRESSION_RE)) for (const literalMatch of callMatch[0].matchAll(JS_STRING_LITERALS_RE)) candidates.add(literalMatch[0]);
|
|
21296
|
-
return Array.from(candidates).sort();
|
|
21297
|
-
}
|
|
21298
|
-
function collectTemplateTailwindCandidates(content) {
|
|
21299
|
-
const candidates = /* @__PURE__ */ new Set();
|
|
21300
|
-
for (const match of content.matchAll(CLASS_LIKE_TEMPLATE_ATTR_RE)) candidates.add(match[0].trim());
|
|
21301
|
-
return Array.from(candidates).sort();
|
|
21302
|
-
}
|
|
21303
|
-
function hasScriptDynamicClassHint(content) {
|
|
21304
|
-
return SCRIPT_DYNAMIC_CLASS_HINT_RE.test(content);
|
|
21305
|
-
}
|
|
21306
|
-
function normalizeTailwindContentPayload(payload) {
|
|
21307
|
-
if (!payload || typeof payload !== "object" || Array.isArray(payload)) return payload;
|
|
21308
|
-
const content = payload;
|
|
21309
|
-
const template = typeof content.template === "string" ? content.template : "";
|
|
21310
|
-
const scriptLiterals = VUE_DYNAMIC_CLASS_LIKE_BINDING_RE.test(template) ? content.scriptLiterals : content.hasScriptTailwindClassHint === true ? content.scriptCallLiterals : [];
|
|
21311
|
-
return {
|
|
21312
|
-
...content,
|
|
21313
|
-
template: collectTemplateTailwindCandidates(template),
|
|
21314
|
-
scriptLiterals,
|
|
21315
|
-
scriptCallLiterals: []
|
|
21316
|
-
};
|
|
21317
|
-
}
|
|
21318
|
-
function hashTailwindContentPayload(payload) {
|
|
21319
|
-
return hashPayload(normalizeTailwindContentPayload(payload));
|
|
21320
|
-
}
|
|
21321
|
-
function hashTailwindTemplateContentPayload(payload) {
|
|
21322
|
-
const normalized = normalizeTailwindContentPayload(payload);
|
|
21323
|
-
if (!normalized || typeof normalized !== "object" || Array.isArray(normalized)) return hashPayload(normalized);
|
|
21324
|
-
return hashPayload({ template: normalized.template });
|
|
21325
|
-
}
|
|
21326
|
-
function hashTailwindScriptContentPayload(payload) {
|
|
21327
|
-
const normalized = normalizeTailwindContentPayload(payload);
|
|
21328
|
-
if (!normalized || typeof normalized !== "object" || Array.isArray(normalized)) return hashPayload(normalized);
|
|
21329
|
-
return hashPayload({ scriptLiterals: normalized.scriptLiterals });
|
|
21330
|
-
}
|
|
21331
|
-
function buildTailwindContentPayload(descriptor, filename) {
|
|
21332
|
-
const script = descriptor.script ? stripJsonMacrosFromScriptContent(descriptor.script.content, filename) : "";
|
|
21333
|
-
const scriptSetup = descriptor.scriptSetup ? stripJsonMacrosFromScriptContent(descriptor.scriptSetup.content, filename) : "";
|
|
21334
|
-
const scriptLiterals = [...collectScriptLiteralCandidates(script), ...collectScriptLiteralCandidates(scriptSetup)];
|
|
21335
|
-
const scriptCallLiterals = [...collectScriptCallLiteralCandidates(script), ...collectScriptCallLiteralCandidates(scriptSetup)];
|
|
21336
|
-
return {
|
|
21337
|
-
template: descriptor.template?.content ?? "",
|
|
21338
|
-
scriptLiterals,
|
|
21339
|
-
scriptCallLiterals,
|
|
21340
|
-
hasScriptTailwindClassHint: hasScriptDynamicClassHint(`${script}\n${scriptSetup}`)
|
|
21341
|
-
};
|
|
21342
|
-
}
|
|
21343
|
-
function buildVueSfcSignaturePayloadWithTs(source, filename) {
|
|
21344
|
-
const { descriptor, errors } = parse$1(source, { filename });
|
|
21345
|
-
if (errors.length) return;
|
|
21346
|
-
return {
|
|
21347
|
-
nonJson: buildNonJsonDescriptorPayload(descriptor, filename),
|
|
21348
|
-
script: buildScriptDescriptorPayload(descriptor, filename),
|
|
21349
|
-
styleIndependent: buildStyleIndependentDescriptorPayload(descriptor, filename),
|
|
21350
|
-
tailwindContent: buildTailwindContentPayload(descriptor, filename),
|
|
21351
|
-
hasTemplate: Boolean(descriptor.template?.content.trim())
|
|
21352
|
-
};
|
|
21353
|
-
}
|
|
21354
|
-
function buildVueSfcSignaturePayloadWithNative(source) {
|
|
21355
|
-
if (JSON_MACRO_HINT_RE.test(source)) return;
|
|
21356
|
-
const binding = loadVueSfcSignatureNativeBindingSync();
|
|
21357
|
-
if (!binding) return;
|
|
21358
|
-
const payload = binding.getVueSfcSignaturePayloadNative(source);
|
|
21359
|
-
if (!payload) return;
|
|
21360
|
-
try {
|
|
21361
|
-
const parsed = JSON.parse(payload);
|
|
21362
|
-
const tailwindContent = parsed.tailwindContent;
|
|
21363
|
-
if (!tailwindContent || typeof tailwindContent !== "object" || Array.isArray(tailwindContent) || !("hasScriptTailwindClassHint" in tailwindContent) || !("scriptCallLiterals" in tailwindContent)) return;
|
|
21364
|
-
return parsed;
|
|
21365
|
-
} catch {
|
|
21366
|
-
return;
|
|
21367
|
-
}
|
|
21368
|
-
}
|
|
21369
|
-
function buildVueSfcSignaturePayload(source, filename) {
|
|
21370
|
-
const cacheKey = `${filename}\0${source}\0${shouldUseNativeVueSfcSignature() ? "native" : "ts"}`;
|
|
21371
|
-
if (signaturePayloadCache.has(cacheKey)) return signaturePayloadCache.get(cacheKey);
|
|
21372
|
-
const nativePayload = buildVueSfcSignaturePayloadWithNative(source);
|
|
21373
|
-
if (nativePayload) {
|
|
21374
|
-
signaturePayloadCache.set(cacheKey, nativePayload);
|
|
21375
|
-
return nativePayload;
|
|
21376
|
-
}
|
|
21377
|
-
const tsPayload = buildVueSfcSignaturePayloadWithTs(source, filename);
|
|
21378
|
-
signaturePayloadCache.set(cacheKey, tsPayload);
|
|
21379
|
-
return tsPayload;
|
|
21380
|
-
}
|
|
21381
|
-
function resolveVueSfcStyleIndependentSignature(source, filename) {
|
|
21382
|
-
const payload = buildVueSfcSignaturePayload(source, filename);
|
|
21383
|
-
return payload ? hashPayload(payload.styleIndependent) : void 0;
|
|
21384
|
-
}
|
|
21385
|
-
function resolveVueSfcHmrSignatures(source, filename) {
|
|
21386
|
-
const payload = buildVueSfcSignaturePayload(source, filename);
|
|
21387
|
-
if (!payload) return {};
|
|
21388
|
-
return {
|
|
21389
|
-
nonJsonSignature: hashPayload(payload.nonJson),
|
|
21390
|
-
scriptSignature: hashPayload(payload.script),
|
|
21391
|
-
styleIndependentSignature: hashPayload(payload.styleIndependent),
|
|
21392
|
-
tailwindContentSignature: hashTailwindContentPayload(payload.tailwindContent),
|
|
21393
|
-
tailwindTemplateContentSignature: hashTailwindTemplateContentPayload(payload.tailwindContent),
|
|
21394
|
-
tailwindScriptContentSignature: hashTailwindScriptContentPayload(payload.tailwindContent),
|
|
21395
|
-
hasTemplate: payload.hasTemplate
|
|
21396
|
-
};
|
|
21307
|
+
//#region src/runtime/storeVueSfcHmrSignatures.ts
|
|
21308
|
+
/**
|
|
21309
|
+
* 把编译器生成的 SFC 语义快照注册到 Vite HMR 运行状态。
|
|
21310
|
+
*/
|
|
21311
|
+
function storeVueSfcHmrSignatures(hmr, filename, signatures) {
|
|
21312
|
+
if (signatures.blockSignatures) hmr.vueEntrySfcSignatures.set(filename, signatures.blockSignatures);
|
|
21313
|
+
if (signatures.tailwindContentSignature) hmr.vueEntryTailwindContentSignatures.set(filename, signatures.tailwindContentSignature);
|
|
21314
|
+
if (signatures.tailwindTemplateContentSignature) hmr.vueEntryTailwindTemplateContentSignatures.set(filename, signatures.tailwindTemplateContentSignature);
|
|
21315
|
+
if (signatures.tailwindScriptContentSignature) hmr.vueEntryTailwindScriptContentSignatures.set(filename, signatures.tailwindScriptContentSignature);
|
|
21316
|
+
if (signatures.hasTemplate !== void 0) hmr.vueEntryHasTemplate.set(filename, signatures.hasTemplate);
|
|
21397
21317
|
}
|
|
21398
21318
|
//#endregion
|
|
21399
21319
|
//#region src/plugins/utils/analyze.ts
|
|
@@ -23475,12 +23395,7 @@ function createEntryLoader(options) {
|
|
|
23475
23395
|
const signatures = resolveVueSfcHmrSignatures(vueSource, vueEntryPath);
|
|
23476
23396
|
recordEntryDuration("entryVueSignatureMs", signatureStartedAt);
|
|
23477
23397
|
appVueNonJsonSignature = signatures.nonJsonSignature;
|
|
23478
|
-
|
|
23479
|
-
if (signatures.scriptSignature) ctx.runtimeState.build.hmr.vueEntryScriptSignatures.set(normalizedVueEntryPath, signatures.scriptSignature);
|
|
23480
|
-
if (signatures.tailwindContentSignature) ctx.runtimeState.build.hmr.vueEntryTailwindContentSignatures.set(normalizedVueEntryPath, signatures.tailwindContentSignature);
|
|
23481
|
-
if (signatures.tailwindTemplateContentSignature) ctx.runtimeState.build.hmr.vueEntryTailwindTemplateContentSignatures?.set(normalizedVueEntryPath, signatures.tailwindTemplateContentSignature);
|
|
23482
|
-
if (signatures.tailwindScriptContentSignature) ctx.runtimeState.build.hmr.vueEntryTailwindScriptContentSignatures?.set(normalizedVueEntryPath, signatures.tailwindScriptContentSignature);
|
|
23483
|
-
if (signatures.hasTemplate !== void 0) ctx.runtimeState.build.hmr.vueEntryHasTemplate.set(normalizedVueEntryPath, signatures.hasTemplate);
|
|
23398
|
+
storeVueSfcHmrSignatures(ctx.runtimeState.build.hmr, normalizedVueEntryPath, signatures);
|
|
23484
23399
|
}
|
|
23485
23400
|
}
|
|
23486
23401
|
if (vueEntryPath && ctx.autoRoutesService?.isEnabled?.() && !ctx.runtimeState.autoRoutes.loadingAppConfig) {
|
|
@@ -23615,12 +23530,7 @@ function createEntryLoader(options) {
|
|
|
23615
23530
|
const signatureStartedAt = performance$1.now();
|
|
23616
23531
|
const signatures = resolveVueSfcHmrSignatures(vueSource, vueEntryPath);
|
|
23617
23532
|
recordEntryDuration("entryVueSignatureMs", signatureStartedAt);
|
|
23618
|
-
|
|
23619
|
-
if (signatures.scriptSignature) ctx.runtimeState.build.hmr.vueEntryScriptSignatures.set(normalizedId, signatures.scriptSignature);
|
|
23620
|
-
if (signatures.tailwindContentSignature) ctx.runtimeState.build.hmr.vueEntryTailwindContentSignatures.set(normalizedId, signatures.tailwindContentSignature);
|
|
23621
|
-
if (signatures.tailwindTemplateContentSignature) ctx.runtimeState.build.hmr.vueEntryTailwindTemplateContentSignatures?.set(normalizedId, signatures.tailwindTemplateContentSignature);
|
|
23622
|
-
if (signatures.tailwindScriptContentSignature) ctx.runtimeState.build.hmr.vueEntryTailwindScriptContentSignatures?.set(normalizedId, signatures.tailwindScriptContentSignature);
|
|
23623
|
-
if (signatures.hasTemplate !== void 0) ctx.runtimeState.build.hmr.vueEntryHasTemplate.set(normalizedId, signatures.hasTemplate);
|
|
23533
|
+
storeVueSfcHmrSignatures(ctx.runtimeState.build.hmr, normalizedId, signatures);
|
|
23624
23534
|
}
|
|
23625
23535
|
}
|
|
23626
23536
|
const autoImportStartedAt = performance$1.now();
|
|
@@ -26125,10 +26035,73 @@ function injectSharedStyleImports(css, modulePath, fileName, sharedStyles, confi
|
|
|
26125
26035
|
return prependSharedStyleImports(css, statements);
|
|
26126
26036
|
}
|
|
26127
26037
|
//#endregion
|
|
26038
|
+
//#region src/plugins/tailwindcssMarker.ts
|
|
26039
|
+
const MANAGED_TAILWINDCSS_ENTRY_MARKER_PREFIX = ".__weapp_vite_managed_tailwindcss_entry_";
|
|
26040
|
+
const MANAGED_TAILWINDCSS_ENTRY_MARKER_SUFFIX = "__{--weapp-vite-managed-tailwindcss-entry:1}";
|
|
26041
|
+
const MANAGED_TAILWINDCSS_OUTPUT_MARKER_PREFIX = "/*! weapp-vite managed-tailwindcss-output:";
|
|
26042
|
+
const MANAGED_TAILWINDCSS_OUTPUT_MARKER_RE = /\/\*! weapp-vite managed-tailwindcss-output:\d+ \*\/\s*/g;
|
|
26043
|
+
const managedTailwindcssEntries = /* @__PURE__ */ new WeakMap();
|
|
26044
|
+
function normalizeManagedTailwindcssEntryPath(id) {
|
|
26045
|
+
const normalized = normalizeFsResolvedId(id);
|
|
26046
|
+
try {
|
|
26047
|
+
return normalizeFsResolvedId(fs.realpathSync.native(normalized));
|
|
26048
|
+
} catch {
|
|
26049
|
+
return normalized;
|
|
26050
|
+
}
|
|
26051
|
+
}
|
|
26052
|
+
function registerManagedTailwindcssEntries(ctx, entries) {
|
|
26053
|
+
managedTailwindcssEntries.set(ctx, new Set(entries.map(normalizeManagedTailwindcssEntryPath)));
|
|
26054
|
+
}
|
|
26055
|
+
function isManagedTailwindcssEntry(ctx, id) {
|
|
26056
|
+
return managedTailwindcssEntries.get(ctx)?.has(normalizeManagedTailwindcssEntryPath(id)) === true;
|
|
26057
|
+
}
|
|
26058
|
+
function createManagedTailwindcssEntryMarker(index) {
|
|
26059
|
+
return `${MANAGED_TAILWINDCSS_ENTRY_MARKER_PREFIX}${index}${MANAGED_TAILWINDCSS_ENTRY_MARKER_SUFFIX}`;
|
|
26060
|
+
}
|
|
26061
|
+
function findManagedTailwindcssEntryMarker(css) {
|
|
26062
|
+
return css.indexOf(MANAGED_TAILWINDCSS_ENTRY_MARKER_PREFIX);
|
|
26063
|
+
}
|
|
26064
|
+
function createManagedTailwindcssOutputMarker(index) {
|
|
26065
|
+
return `${MANAGED_TAILWINDCSS_OUTPUT_MARKER_PREFIX}${index} */`;
|
|
26066
|
+
}
|
|
26067
|
+
function hasManagedTailwindcssOutputMarker(css) {
|
|
26068
|
+
return css.includes(MANAGED_TAILWINDCSS_OUTPUT_MARKER_PREFIX);
|
|
26069
|
+
}
|
|
26070
|
+
function stripManagedTailwindcssOutputMarkers(css) {
|
|
26071
|
+
return css.replace(MANAGED_TAILWINDCSS_OUTPUT_MARKER_RE, "");
|
|
26072
|
+
}
|
|
26073
|
+
//#endregion
|
|
26128
26074
|
//#region src/plugins/css.ts
|
|
26129
26075
|
const LEADING_BLANK_LINES_RE = /^(?:[ \t]*\r?\n)+/;
|
|
26130
26076
|
const TAILWIND_CONTENT_HMR_NONCE_RE = /\n\/\* weapp-vite tailwind-content [^*\n]+ \*\/$/;
|
|
26131
26077
|
const VITE_PREPROCESS_STYLE_RE = /\.(?:acss|css|less|sass|scss|styl|stylus|pcss|postcss|sss)$/;
|
|
26078
|
+
const TAILWIND_GENERATOR_PLACEHOLDER = "/*! weapp-tailwindcss generator-placeholder */";
|
|
26079
|
+
const pendingOwnerStyleSources = /* @__PURE__ */ new WeakMap();
|
|
26080
|
+
function consumePendingOwnerStyleSources(ctx) {
|
|
26081
|
+
const sources = pendingOwnerStyleSources.get(ctx);
|
|
26082
|
+
pendingOwnerStyleSources.delete(ctx);
|
|
26083
|
+
return sources;
|
|
26084
|
+
}
|
|
26085
|
+
function findGeneratorBoundary(css) {
|
|
26086
|
+
const externalIndex = css.indexOf(TAILWIND_GENERATOR_PLACEHOLDER);
|
|
26087
|
+
const managedIndex = findManagedTailwindcssEntryMarker(css);
|
|
26088
|
+
if (externalIndex < 0) return managedIndex;
|
|
26089
|
+
if (managedIndex < 0) return externalIndex;
|
|
26090
|
+
return Math.min(externalIndex, managedIndex);
|
|
26091
|
+
}
|
|
26092
|
+
function extractPendingOwnerStyleSource(css) {
|
|
26093
|
+
const boundary = findGeneratorBoundary(css);
|
|
26094
|
+
return (boundary < 0 ? css : css.slice(0, boundary)).trim();
|
|
26095
|
+
}
|
|
26096
|
+
function recordPendingOwnerStyleSource(ctx, fileName, css) {
|
|
26097
|
+
const authorCss = extractPendingOwnerStyleSource(css);
|
|
26098
|
+
if (!authorCss) return;
|
|
26099
|
+
const sources = pendingOwnerStyleSources.get(ctx) ?? /* @__PURE__ */ new Map();
|
|
26100
|
+
const fragments = sources.get(fileName) ?? [];
|
|
26101
|
+
if (!fragments.includes(authorCss)) fragments.push(authorCss);
|
|
26102
|
+
sources.set(fileName, fragments);
|
|
26103
|
+
pendingOwnerStyleSources.set(ctx, sources);
|
|
26104
|
+
}
|
|
26132
26105
|
function stripLeadingBlankLines(code) {
|
|
26133
26106
|
return code.replace(LEADING_BLANK_LINES_RE, "");
|
|
26134
26107
|
}
|
|
@@ -26166,6 +26139,9 @@ function shouldSkipUnchangedStyleHmrBundle(ctx, bundle) {
|
|
|
26166
26139
|
function shouldPreprocessWithVite(fileName) {
|
|
26167
26140
|
return VITE_PREPROCESS_STYLE_RE.test(fileName);
|
|
26168
26141
|
}
|
|
26142
|
+
function hasViteStyleAssetPlaceholder(source) {
|
|
26143
|
+
return source.includes("__VITE_ASSET__") || source.includes("__VITE_PUBLIC_ASSET__");
|
|
26144
|
+
}
|
|
26169
26145
|
async function preprocessStyleSource(code, fileName, resolvedConfig, options) {
|
|
26170
26146
|
const normalizedCss = stripLeadingBlankLines(code);
|
|
26171
26147
|
if (!resolvedConfig || options?.enabled === false || !shouldPreprocessWithVite(fileName)) return {
|
|
@@ -26298,6 +26274,7 @@ async function emitStyleSidecarAsset(ctx, pluginCtx, bundle, stylePath, resolved
|
|
|
26298
26274
|
const { configService } = ctx;
|
|
26299
26275
|
const fileName = resolveOutputStyleFileName(configService, stylePath);
|
|
26300
26276
|
if (!fileName) return false;
|
|
26277
|
+
if (isManagedTailwindcssEntry(ctx, stylePath)) return false;
|
|
26301
26278
|
const rawCss = await resolveMemoryStyleSource(ctx, stylePath) ?? await fs$1.readFile(stylePath, "utf8");
|
|
26302
26279
|
const { css, dependencies } = await preprocessStyleSource(rawCss, stylePath, resolvedConfig);
|
|
26303
26280
|
syncCssImportDependencies(ctx, stylePath, rawCss, dependencies);
|
|
@@ -26322,31 +26299,46 @@ async function handleBundleEntry(ctx, bundle, bundleKey, asset, configService, s
|
|
|
26322
26299
|
let cached = preparedStyleAssets.get(cacheKey);
|
|
26323
26300
|
if (!cached) {
|
|
26324
26301
|
cached = (async () => {
|
|
26325
|
-
const
|
|
26326
|
-
|
|
26302
|
+
const graphSource = await readStyleGraphSource(preprocessId, rawCss);
|
|
26303
|
+
const { css, dependencies } = await preprocessStyleSource(shouldPreprocess && hasViteStyleAssetPlaceholder(rawCss) ? graphSource : rawCss, preprocessId, resolvedConfig, { enabled: shouldPreprocess });
|
|
26304
|
+
syncCssImportDependencies(ctx, preprocessId, graphSource, dependencies);
|
|
26327
26305
|
if (typeof this.addWatchFile === "function") for (const dependency of dependencies) this.addWatchFile(normalizeWatchPath(dependency));
|
|
26328
|
-
return { processedCss: await processCssWithCache(css, configService) };
|
|
26306
|
+
return { processedCss: stripManagedTailwindcssOutputMarkers(await processCssWithCache(css, configService)) };
|
|
26329
26307
|
})();
|
|
26330
26308
|
preparedStyleAssets.set(cacheKey, cached);
|
|
26331
26309
|
}
|
|
26332
26310
|
return cached;
|
|
26333
26311
|
};
|
|
26334
|
-
const
|
|
26312
|
+
const prepareOwnedStyleAsset = async (owner, preprocessId, shouldPreprocess) => {
|
|
26335
26313
|
const fileName = resolveOutputStyleFileName(configService, owner);
|
|
26336
26314
|
if (!fileName) return;
|
|
26337
|
-
const normalizedFileName = toPosixPath(fileName);
|
|
26338
26315
|
const rawCss = asset.source.toString();
|
|
26339
26316
|
const { processedCss } = await prepareStyleAssetForOwner(rawCss, preprocessId, shouldPreprocess);
|
|
26340
|
-
|
|
26341
|
-
|
|
26342
|
-
|
|
26343
|
-
|
|
26317
|
+
return {
|
|
26318
|
+
fileName,
|
|
26319
|
+
modulePath: owner,
|
|
26320
|
+
normalizedFileName: toPosixPath(fileName),
|
|
26321
|
+
processedCss
|
|
26322
|
+
};
|
|
26323
|
+
};
|
|
26324
|
+
const emitStyleAssetForOwner = async (owner, preprocessId, shouldPreprocess) => {
|
|
26325
|
+
const prepared = await prepareOwnedStyleAsset(owner, preprocessId, shouldPreprocess);
|
|
26326
|
+
if (!prepared) return;
|
|
26327
|
+
const cssWithImports = injectSharedStyleImportsCached(prepared.processedCss, prepared.modulePath, prepared.fileName, sharedStyles, configService, sharedStyleImportCache);
|
|
26328
|
+
emitCssAssetIfChanged(ctx, this, bundle, prepared.fileName, cssWithImports);
|
|
26329
|
+
emitted.add(prepared.normalizedFileName);
|
|
26330
|
+
return prepared.normalizedFileName;
|
|
26344
26331
|
};
|
|
26345
26332
|
const isCssAsset = bundleKey.endsWith(".css");
|
|
26346
26333
|
const isFinalStyleAsset = bundleKey.endsWith(`.${configService.outputExtensions.wxss}`) && (!isCssAsset || path.posix.basename(bundleKey, ".css") === "app");
|
|
26347
26334
|
const isSourceStyleAssetKey = isSourceStyleAsset(bundleKey);
|
|
26335
|
+
const originalStylePath = resolveOriginalStylePath();
|
|
26336
|
+
if (isManagedTailwindcssEntry(ctx, originalStylePath) && !hasManagedTailwindcssOutputMarker(asset.source.toString())) {
|
|
26337
|
+
delete bundle[bundleKey];
|
|
26338
|
+
return;
|
|
26339
|
+
}
|
|
26348
26340
|
if (isFinalStyleAsset) {
|
|
26349
|
-
const absOriginal =
|
|
26341
|
+
const absOriginal = originalStylePath;
|
|
26350
26342
|
const fileName = resolveOutputStyleFileName(configService, absOriginal);
|
|
26351
26343
|
if (fileName) emitted.add(toPosixPath(fileName));
|
|
26352
26344
|
if (fileName) {
|
|
@@ -26355,11 +26347,13 @@ async function handleBundleEntry(ctx, bundle, bundleKey, asset, configService, s
|
|
|
26355
26347
|
const normalizedFileName = toPosixPath(fileName);
|
|
26356
26348
|
const freshHmrStyleSourcePath = resolveFreshHmrStyleSourcePath(ctx, normalizedFileName);
|
|
26357
26349
|
const preprocessId = freshHmrStyleSourcePath ?? absOriginal;
|
|
26358
|
-
const
|
|
26359
|
-
const
|
|
26360
|
-
|
|
26350
|
+
const shouldPreprocess = shouldPreprocessWithVite(preprocessId);
|
|
26351
|
+
const graphSource = await readStyleGraphSource(preprocessId, canonicalSource);
|
|
26352
|
+
const preprocessInput = freshHmrStyleSourcePath ? await resolveMemoryStyleSource(ctx, freshHmrStyleSourcePath) ?? graphSource : shouldPreprocess && hasViteStyleAssetPlaceholder(canonicalSource) ? graphSource : canonicalSource;
|
|
26353
|
+
const { css, dependencies } = await preprocessStyleSource(preprocessInput, preprocessId, resolvedConfig, { enabled: shouldPreprocess });
|
|
26354
|
+
syncCssImportDependencies(ctx, preprocessId, freshHmrStyleSourcePath ? preprocessInput : graphSource, dependencies);
|
|
26361
26355
|
if (typeof this.addWatchFile === "function") for (const dependency of dependencies) this.addWatchFile(normalizeWatchPath(dependency));
|
|
26362
|
-
const processedCss = await processCssWithCache(css, configService);
|
|
26356
|
+
const processedCss = stripManagedTailwindcssOutputMarkers(await processCssWithCache(css, configService));
|
|
26363
26357
|
if (fileName !== bundleKey) {
|
|
26364
26358
|
delete bundle[bundleKey];
|
|
26365
26359
|
emitCssAssetIfChanged(ctx, this, bundle, fileName, processedCss);
|
|
@@ -26383,11 +26377,12 @@ async function handleBundleEntry(ctx, bundle, bundleKey, asset, configService, s
|
|
|
26383
26377
|
delete bundle[bundleKey];
|
|
26384
26378
|
return;
|
|
26385
26379
|
}
|
|
26386
|
-
const
|
|
26387
|
-
return await
|
|
26388
|
-
}));
|
|
26380
|
+
const preparedOwners = (await Promise.all(Array.from(owners).map(async (owner) => {
|
|
26381
|
+
return await prepareOwnedStyleAsset(owner, resolveOriginalStylePath(), !isCssAsset);
|
|
26382
|
+
}))).filter((prepared) => prepared !== void 0);
|
|
26389
26383
|
const normalizedBundleKey = toPosixPath(bundleKey);
|
|
26390
|
-
if (!isCssAsset || !
|
|
26384
|
+
if (!isCssAsset || !preparedOwners.some((prepared) => prepared.normalizedFileName === normalizedBundleKey)) delete bundle[bundleKey];
|
|
26385
|
+
return preparedOwners;
|
|
26391
26386
|
}
|
|
26392
26387
|
async function emitSharedStyleEntries(ctx, sharedStyles, emitted, configService, bundle, resolvedConfig) {
|
|
26393
26388
|
if (!sharedStyles.size) return;
|
|
@@ -26468,6 +26463,7 @@ async function emitSharedStyleImportsForChunks(ctx, sharedStyles, emitted, confi
|
|
|
26468
26463
|
}
|
|
26469
26464
|
}
|
|
26470
26465
|
async function generateBundleSharedCss(ctx, configService, bundle, analysis, resolvedConfig) {
|
|
26466
|
+
pendingOwnerStyleSources.delete(ctx);
|
|
26471
26467
|
const sharedStyles = collectSharedStyleEntries(ctx, configService);
|
|
26472
26468
|
const { facadeChunks, ownersByCssAsset, styleAssets } = analysis;
|
|
26473
26469
|
if (!sharedStyles.size && !styleAssets.length) return;
|
|
@@ -26476,7 +26472,29 @@ async function generateBundleSharedCss(ctx, configService, bundle, analysis, res
|
|
|
26476
26472
|
const tasks = styleAssets.map(({ bundleKey, asset }) => {
|
|
26477
26473
|
return handleBundleEntry.call(this, ctx, bundle, bundleKey, asset, configService, sharedStyles, ownersByCssAsset, emitted, sharedStyleImportCache, resolvedConfig);
|
|
26478
26474
|
});
|
|
26479
|
-
await Promise.all(tasks);
|
|
26475
|
+
const preparedOwnerStyles = (await Promise.all(tasks)).flatMap((result) => result ?? []);
|
|
26476
|
+
const ownerStyleGroups = /* @__PURE__ */ new Map();
|
|
26477
|
+
for (const prepared of preparedOwnerStyles) {
|
|
26478
|
+
let group = ownerStyleGroups.get(prepared.normalizedFileName);
|
|
26479
|
+
if (!group) {
|
|
26480
|
+
group = {
|
|
26481
|
+
fileName: prepared.fileName,
|
|
26482
|
+
fragments: [],
|
|
26483
|
+
modulePath: prepared.modulePath
|
|
26484
|
+
};
|
|
26485
|
+
ownerStyleGroups.set(prepared.normalizedFileName, group);
|
|
26486
|
+
}
|
|
26487
|
+
group.fragments.push(prepared.processedCss);
|
|
26488
|
+
}
|
|
26489
|
+
for (const [normalizedFileName, group] of ownerStyleGroups) {
|
|
26490
|
+
const cssWithImports = injectSharedStyleImportsCached(group.fragments.join("\n"), group.modulePath, group.fileName, sharedStyles, configService, sharedStyleImportCache);
|
|
26491
|
+
if (group.fragments.some((fragment) => findGeneratorBoundary(fragment) >= 0)) {
|
|
26492
|
+
const ownerCssWithImports = injectSharedStyleImportsCached(group.fragments.map(extractPendingOwnerStyleSource).filter(Boolean).join("\n"), group.modulePath, group.fileName, sharedStyles, configService, sharedStyleImportCache);
|
|
26493
|
+
recordPendingOwnerStyleSource(ctx, group.fileName, ownerCssWithImports);
|
|
26494
|
+
}
|
|
26495
|
+
emitCssAssetIfChanged(ctx, this, bundle, group.fileName, cssWithImports);
|
|
26496
|
+
emitted.add(normalizedFileName);
|
|
26497
|
+
}
|
|
26480
26498
|
await emitSharedStyleEntries.call(this, ctx, sharedStyles, emitted, configService, bundle, resolvedConfig);
|
|
26481
26499
|
await emitSharedStyleImportsForChunks.call(this, ctx, sharedStyles, emitted, configService, bundle, facadeChunks, sharedStyleImportCache);
|
|
26482
26500
|
}
|
|
@@ -26496,13 +26514,13 @@ function css(ctx) {
|
|
|
26496
26514
|
configResolved(config) {
|
|
26497
26515
|
resolvedConfig = config;
|
|
26498
26516
|
},
|
|
26499
|
-
async
|
|
26517
|
+
generateBundle: { async handler(_opts, bundle) {
|
|
26500
26518
|
const rolldownBundle = bundle;
|
|
26501
26519
|
if (shouldSkipUnchangedStyleHmrBundle(ctx, rolldownBundle)) return;
|
|
26502
26520
|
const styleAnalysis = analyzeBundleStyles(rolldownBundle);
|
|
26503
26521
|
await generateBundleSharedCss.call(this, ctx, configService, bundle, styleAnalysis, resolvedConfig);
|
|
26504
26522
|
await emitCollectedStyleSidecars.call(this, ctx, rolldownBundle, resolvedConfig);
|
|
26505
|
-
}
|
|
26523
|
+
} }
|
|
26506
26524
|
}, {
|
|
26507
26525
|
name: "weapp-vite:css-sidecar-source",
|
|
26508
26526
|
async transform(code, id) {
|
|
@@ -26956,8 +26974,7 @@ function toEmittedAsset(output) {
|
|
|
26956
26974
|
fileName: output.fileName,
|
|
26957
26975
|
source: output.source,
|
|
26958
26976
|
...name ? { name } : {},
|
|
26959
|
-
...originalFileName ? { originalFileName } : {}
|
|
26960
|
-
needsCodeReference: output.needsCodeReference
|
|
26977
|
+
...originalFileName ? { originalFileName } : {}
|
|
26961
26978
|
};
|
|
26962
26979
|
}
|
|
26963
26980
|
function getBundleOutputs(output) {
|
|
@@ -27001,20 +27018,30 @@ const TEMPLATE_STATIC_REWRITE_MARKERS = [
|
|
|
27001
27018
|
];
|
|
27002
27019
|
const TEMPLATE_DIRECTIVE_PREFIXES = getSupportedMiniProgramDirectivePrefixes();
|
|
27003
27020
|
const GRAPH_ONLY_OUTPUT_MARKERS = [WEAPP_VITE_LOGICAL_ENTRY_RESOLVED_PREFIX, WEAPP_VITE_SIDECAR_RESOLVED_PREFIX];
|
|
27004
|
-
function
|
|
27021
|
+
function parseGraphOnlyAssetModuleId(fileName) {
|
|
27005
27022
|
for (const marker of GRAPH_ONLY_OUTPUT_MARKERS) {
|
|
27006
27023
|
const markerIndex = fileName.indexOf(marker);
|
|
27007
27024
|
if (markerIndex < 0) continue;
|
|
27008
27025
|
const request = fileName.slice(markerIndex);
|
|
27009
27026
|
const extension = path.extname(request);
|
|
27010
|
-
|
|
27011
|
-
return parseLogicalEntryId(moduleId)?.sourceId ?? parseSidecarModuleId(moduleId)?.ownerId;
|
|
27027
|
+
return `${extension ? request.slice(0, -extension.length) : request}.js`;
|
|
27012
27028
|
}
|
|
27013
27029
|
}
|
|
27030
|
+
function parseGraphOnlyAssetOwner(fileName) {
|
|
27031
|
+
const moduleId = parseGraphOnlyAssetModuleId(fileName);
|
|
27032
|
+
return moduleId ? parseLogicalEntryId(moduleId)?.sourceId ?? parseSidecarModuleId(moduleId)?.ownerId : void 0;
|
|
27033
|
+
}
|
|
27014
27034
|
function normalizeGraphOnlyAssets(ctx, bundle, emitAsset) {
|
|
27015
27035
|
for (const [bundleFileName, output] of Object.entries(bundle)) {
|
|
27016
27036
|
if (output?.type !== "asset") continue;
|
|
27017
|
-
const
|
|
27037
|
+
const fileName = output.fileName || bundleFileName;
|
|
27038
|
+
const moduleId = parseGraphOnlyAssetModuleId(fileName);
|
|
27039
|
+
const sidecar = moduleId ? parseSidecarModuleId(moduleId) : void 0;
|
|
27040
|
+
if (sidecar?.kind === "style" && isManagedTailwindcssEntry(ctx, sidecar.sourceId) && !hasManagedTailwindcssOutputMarker(output.source.toString())) {
|
|
27041
|
+
delete bundle[bundleFileName];
|
|
27042
|
+
continue;
|
|
27043
|
+
}
|
|
27044
|
+
const ownerId = parseGraphOnlyAssetOwner(fileName);
|
|
27018
27045
|
if (!ownerId) continue;
|
|
27019
27046
|
delete bundle[bundleFileName];
|
|
27020
27047
|
const outputFileName = ctx.configService.relativeOutputPath(changeFileExtension(ownerId, ctx.configService.outputExtensions.wxss));
|
|
@@ -27057,6 +27084,18 @@ function outputSourceToString(output) {
|
|
|
27057
27084
|
const source = output.source;
|
|
27058
27085
|
return typeof source === "string" ? source : Buffer.from(source).toString("base64");
|
|
27059
27086
|
}
|
|
27087
|
+
function mergePendingOwnerStyleSources(ctx, bundle) {
|
|
27088
|
+
const pending = consumePendingOwnerStyleSources(ctx);
|
|
27089
|
+
if (!pending) return;
|
|
27090
|
+
for (const [fileName, fragments] of pending) {
|
|
27091
|
+
const output = bundle[fileName] ?? Object.values(bundle).find((candidate) => candidate.type === "asset" && candidate.fileName === fileName);
|
|
27092
|
+
if (output?.type !== "asset") continue;
|
|
27093
|
+
const source = output.source.toString();
|
|
27094
|
+
const missing = fragments.filter((fragment) => !source.includes(fragment));
|
|
27095
|
+
if (!missing.length) continue;
|
|
27096
|
+
output.source = `${source.trimEnd()}\n${missing.join("\n")}\n`;
|
|
27097
|
+
}
|
|
27098
|
+
}
|
|
27060
27099
|
function mayNeedTemplateNormalization(code, platform) {
|
|
27061
27100
|
let lowerCode;
|
|
27062
27101
|
const readLowerCode = () => {
|
|
@@ -27181,6 +27220,7 @@ function createOutputFinalizerPlugin(ctx, subPackageMeta) {
|
|
|
27181
27220
|
order: "post",
|
|
27182
27221
|
async handler(_options, bundle) {
|
|
27183
27222
|
const outputBundle = bundle;
|
|
27223
|
+
mergePendingOwnerStyleSources(ctx, outputBundle);
|
|
27184
27224
|
rewriteWevuInternalRuntimeImports(bundle, wevuRuntimeRewriteOptions);
|
|
27185
27225
|
stabilizeWevuRuntimeChunkAccess(bundle);
|
|
27186
27226
|
restoreNativePageLayoutOutputs(ctx, outputBundle);
|
|
@@ -29834,6 +29874,7 @@ function createVueEntryUpdateInspector(state, normalizedId, options = {}) {
|
|
|
29834
29874
|
const readFile = options.readFile ?? fs$1.readFile;
|
|
29835
29875
|
let sourcePromise;
|
|
29836
29876
|
let signatures;
|
|
29877
|
+
let changedBlocks;
|
|
29837
29878
|
async function loadSource() {
|
|
29838
29879
|
sourcePromise ??= readFile(normalizedId, "utf-8").catch(() => void 0);
|
|
29839
29880
|
return await sourcePromise;
|
|
@@ -29841,10 +29882,21 @@ function createVueEntryUpdateInspector(state, normalizedId, options = {}) {
|
|
|
29841
29882
|
async function resolveSignatures() {
|
|
29842
29883
|
const source = await loadSource();
|
|
29843
29884
|
if (source === void 0) return;
|
|
29844
|
-
|
|
29885
|
+
signatures ??= resolveVueSfcHmrSignatures(source, normalizedId);
|
|
29845
29886
|
return signatures;
|
|
29846
29887
|
}
|
|
29888
|
+
async function resolveChangedBlocks() {
|
|
29889
|
+
if (changedBlocks) return changedBlocks;
|
|
29890
|
+
const previous = state.ctx.runtimeState.build.hmr.vueEntrySfcSignatures.get(normalizedId);
|
|
29891
|
+
const current = (await resolveSignatures())?.blockSignatures;
|
|
29892
|
+
if (!previous || !current) return;
|
|
29893
|
+
changedBlocks = classifyVueSfcBlockChanges(previous, current);
|
|
29894
|
+
return changedBlocks;
|
|
29895
|
+
}
|
|
29847
29896
|
return {
|
|
29897
|
+
async getChangedBlocks() {
|
|
29898
|
+
return await resolveChangedBlocks();
|
|
29899
|
+
},
|
|
29848
29900
|
async isAppShellTopologyUpdate() {
|
|
29849
29901
|
if (!isAppVueFile(normalizedId)) return false;
|
|
29850
29902
|
const previous = state.ctx.runtimeState.build.hmr.vueEntryHasTemplate.get(normalizedId);
|
|
@@ -29853,19 +29905,16 @@ function createVueEntryUpdateInspector(state, normalizedId, options = {}) {
|
|
|
29853
29905
|
return current !== void 0 && current !== previous;
|
|
29854
29906
|
},
|
|
29855
29907
|
async isJsonOnlyUpdate() {
|
|
29856
|
-
const
|
|
29857
|
-
|
|
29858
|
-
return (await resolveSignatures())?.nonJsonSignature === previous;
|
|
29908
|
+
const blocks = await resolveChangedBlocks();
|
|
29909
|
+
return blocks?.length === 1 && blocks[0] === "config";
|
|
29859
29910
|
},
|
|
29860
29911
|
async isLocalAssetOnlyUpdate() {
|
|
29861
|
-
const
|
|
29862
|
-
|
|
29863
|
-
return (await resolveSignatures())?.scriptSignature === previous;
|
|
29912
|
+
const blocks = await resolveChangedBlocks();
|
|
29913
|
+
return Boolean(blocks && !blocks.includes("script"));
|
|
29864
29914
|
},
|
|
29865
29915
|
async isStyleOnlyUpdate() {
|
|
29866
|
-
const
|
|
29867
|
-
|
|
29868
|
-
return (await resolveSignatures())?.styleIndependentSignature === previous;
|
|
29916
|
+
const blocks = await resolveChangedBlocks();
|
|
29917
|
+
return blocks?.length === 1 && blocks[0] === "style";
|
|
29869
29918
|
},
|
|
29870
29919
|
async isTailwindContentUpdate() {
|
|
29871
29920
|
const previousTemplate = state.ctx.runtimeState.build.hmr.vueEntryTailwindTemplateContentSignatures?.get(normalizedId);
|
|
@@ -29895,7 +29944,7 @@ const tailwindContentExtensions = /* @__PURE__ */ new Set([
|
|
|
29895
29944
|
".mjs",
|
|
29896
29945
|
".cjs"
|
|
29897
29946
|
]);
|
|
29898
|
-
const TAILWIND_APP_STYLE_RE = /@import\s+['"]tailwindcss['"]
|
|
29947
|
+
const TAILWIND_APP_STYLE_RE = /@import\s+['"]tailwindcss['"]|weapp-tailwindcss|tailwindcss\/vite/;
|
|
29899
29948
|
function resolveWatchPathKind(normalizedId) {
|
|
29900
29949
|
const extension = path.extname(normalizedId);
|
|
29901
29950
|
let configSuffix;
|
|
@@ -30122,9 +30171,7 @@ async function processChangedFile(state, id, event) {
|
|
|
30122
30171
|
};
|
|
30123
30172
|
if (isDeletedMissingSelf) {
|
|
30124
30173
|
ctx.runtimeState.build.hmr.vueEntryHasTemplate.delete(normalizedId);
|
|
30125
|
-
ctx.runtimeState.build.hmr.
|
|
30126
|
-
ctx.runtimeState.build.hmr.vueEntryScriptSignatures.delete(normalizedId);
|
|
30127
|
-
ctx.runtimeState.build.hmr.vueEntryStyleIndependentSignatures.delete(normalizedId);
|
|
30174
|
+
ctx.runtimeState.build.hmr.vueEntrySfcSignatures.delete(normalizedId);
|
|
30128
30175
|
ctx.runtimeState.build.hmr.vueEntryTailwindContentSignatures?.delete(normalizedId);
|
|
30129
30176
|
ctx.runtimeState.build.hmr.vueEntryTailwindTemplateContentSignatures?.delete(normalizedId);
|
|
30130
30177
|
ctx.runtimeState.build.hmr.vueEntryTailwindScriptContentSignatures?.delete(normalizedId);
|
|
@@ -30554,19 +30601,36 @@ function weappVite(ctx, subPackageMeta) {
|
|
|
30554
30601
|
//#region src/plugins/preflight.ts
|
|
30555
30602
|
const debug = createDebugger("weapp-vite:preflight");
|
|
30556
30603
|
const removePlugins = ["vite:build-import-analysis", "native:import-analysis-build"];
|
|
30604
|
+
const EXTERNAL_TAILWINDCSS_PLUGIN_PREFIX = "weapp-tailwindcss:";
|
|
30605
|
+
const BUILTIN_TAILWINDCSS_VERSION = "6.24.0";
|
|
30557
30606
|
function createPluginPruner() {
|
|
30607
|
+
let warnedExternalTailwindcss = false;
|
|
30558
30608
|
return {
|
|
30559
30609
|
name: "weapp-vite:preflight",
|
|
30560
30610
|
enforce: "pre",
|
|
30561
30611
|
configResolved(config) {
|
|
30562
30612
|
if (!config.plugins?.length) return;
|
|
30563
30613
|
for (const removePlugin of removePlugins) {
|
|
30564
|
-
const
|
|
30614
|
+
const plugins = config.plugins;
|
|
30615
|
+
const idx = plugins.findIndex((plugin) => plugin.name === removePlugin);
|
|
30565
30616
|
if (idx > -1) {
|
|
30566
|
-
const [plugin] =
|
|
30617
|
+
const [plugin] = plugins.splice(idx, 1);
|
|
30567
30618
|
plugin && debug?.("remove plugin", plugin.name);
|
|
30568
30619
|
}
|
|
30569
30620
|
}
|
|
30621
|
+
if (config.plugins.filter((plugin) => plugin.name.startsWith(EXTERNAL_TAILWINDCSS_PLUGIN_PREFIX)).length === 0) return;
|
|
30622
|
+
const plugins = config.plugins;
|
|
30623
|
+
for (let index = plugins.length - 1; index >= 0; index--) {
|
|
30624
|
+
const plugin = plugins[index];
|
|
30625
|
+
if (plugin?.name.startsWith(EXTERNAL_TAILWINDCSS_PLUGIN_PREFIX)) {
|
|
30626
|
+
plugins.splice(index, 1);
|
|
30627
|
+
debug?.("remove plugin", plugin.name);
|
|
30628
|
+
}
|
|
30629
|
+
}
|
|
30630
|
+
if (!warnedExternalTailwindcss) {
|
|
30631
|
+
warnedExternalTailwindcss = true;
|
|
30632
|
+
logger_default.warn(`[weapp-vite] 检测到已注册 \`weapp-tailwindcss/vite\` 插件,已由内置集成接管并禁用外部插件。自 weapp-vite@${BUILTIN_TAILWINDCSS_VERSION} 起无需单独安装或注册 weapp-tailwindcss,请删除对应 import 和 plugins 配置。`);
|
|
30633
|
+
}
|
|
30570
30634
|
}
|
|
30571
30635
|
};
|
|
30572
30636
|
}
|
|
@@ -30584,6 +30648,364 @@ function preflight(ctx) {
|
|
|
30584
30648
|
return [createPluginPruner(), createEnvSynchronizer(ctx)];
|
|
30585
30649
|
}
|
|
30586
30650
|
//#endregion
|
|
30651
|
+
//#region src/plugins/tailwindcss.ts
|
|
30652
|
+
const CORE_NODE_RANGE = "^22.18.0 || >=24.11.0";
|
|
30653
|
+
const MANAGED_PLUGIN_NAME = "weapp-vite:tailwindcss";
|
|
30654
|
+
const VIRTUAL_ENTRY_PREFIX = "\0weapp-vite:managed-tailwindcss-entry:";
|
|
30655
|
+
const TAILWIND_IMPORT_RE = /@import\s+(?:url\(\s*)?['"]tailwindcss['"]\s*\)?(?:\s|;|$)/;
|
|
30656
|
+
const TAILWIND_SOURCE_DIRECTIVE_RE = /@(?:config|custom-variant|layer|plugin|reference|source|tailwind|theme|utility|variant)\b/;
|
|
30657
|
+
function unique(values) {
|
|
30658
|
+
return [...new Set(values)];
|
|
30659
|
+
}
|
|
30660
|
+
function resolveCssEntries(ctx, options, basedir) {
|
|
30661
|
+
const entries = unique([
|
|
30662
|
+
...options.cssEntries ?? [],
|
|
30663
|
+
...options.tailwindcss?.v4?.cssEntries ?? [],
|
|
30664
|
+
...options.tailwindcssRuntimeOptions?.tailwindcss?.v4?.cssEntries ?? []
|
|
30665
|
+
]).map((entry) => path.isAbsolute(entry) ? path.normalize(entry) : path.resolve(basedir, entry));
|
|
30666
|
+
return entries.length > 0 ? entries : [path.resolve(ctx.configService.absoluteSrcRoot, "app.css")];
|
|
30667
|
+
}
|
|
30668
|
+
function resolveManagedTailwindcssOptions(ctx) {
|
|
30669
|
+
const input = ctx.configService.weappViteConfig?.tailwindcss;
|
|
30670
|
+
if (input === void 0) {
|
|
30671
|
+
const version = safeGetPackageInfoSync("tailwindcss", { paths: [ctx.configService.cwd] })?.version;
|
|
30672
|
+
if (!version || Number.parseInt(version.split(".")[0] ?? "", 10) !== 4) return;
|
|
30673
|
+
return {
|
|
30674
|
+
basedir: ctx.configService.cwd,
|
|
30675
|
+
cssEntries: [],
|
|
30676
|
+
generatorTarget: "weapp",
|
|
30677
|
+
autoDetected: true,
|
|
30678
|
+
options: {
|
|
30679
|
+
appType: "weapp-vite",
|
|
30680
|
+
platform: ctx.configService.platform,
|
|
30681
|
+
tailwindcssBasedir: ctx.configService.cwd
|
|
30682
|
+
}
|
|
30683
|
+
};
|
|
30684
|
+
}
|
|
30685
|
+
if (input === false) return;
|
|
30686
|
+
const userOptions = input === true ? {} : input;
|
|
30687
|
+
if (userOptions.disabled === true || typeof userOptions.disabled === "object" && userOptions.disabled.plugin === true) return;
|
|
30688
|
+
const cwd = ctx.configService.cwd;
|
|
30689
|
+
const basedir = userOptions.tailwindcssBasedir ? path.resolve(cwd, userOptions.tailwindcssBasedir) : cwd;
|
|
30690
|
+
const cssEntries = resolveCssEntries(ctx, userOptions, basedir);
|
|
30691
|
+
return {
|
|
30692
|
+
basedir,
|
|
30693
|
+
cssEntries,
|
|
30694
|
+
generatorTarget: typeof userOptions.generator === "object" && userOptions.generator.target ? userOptions.generator.target : "weapp",
|
|
30695
|
+
autoDetected: false,
|
|
30696
|
+
options: {
|
|
30697
|
+
...userOptions,
|
|
30698
|
+
appType: "weapp-vite",
|
|
30699
|
+
cssEntries,
|
|
30700
|
+
platform: userOptions.platform ?? ctx.configService.platform,
|
|
30701
|
+
tailwindcssBasedir: basedir
|
|
30702
|
+
}
|
|
30703
|
+
};
|
|
30704
|
+
}
|
|
30705
|
+
function outputAssetSource(asset) {
|
|
30706
|
+
return typeof asset.source === "string" ? asset.source : Buffer.from(asset.source).toString("utf8");
|
|
30707
|
+
}
|
|
30708
|
+
function createVirtualEntryId(index, source) {
|
|
30709
|
+
const queryIndex = source.indexOf("?");
|
|
30710
|
+
const query = queryIndex >= 0 ? source.slice(queryIndex) : "";
|
|
30711
|
+
return `${VIRTUAL_ENTRY_PREFIX}${index}.css${query}`;
|
|
30712
|
+
}
|
|
30713
|
+
function parseVirtualEntryIndex(id) {
|
|
30714
|
+
if (!id.startsWith(VIRTUAL_ENTRY_PREFIX)) return;
|
|
30715
|
+
const value = Number.parseInt(id.slice(38), 10);
|
|
30716
|
+
return Number.isInteger(value) ? value : void 0;
|
|
30717
|
+
}
|
|
30718
|
+
function parseManagedEntryIndex(id, entries) {
|
|
30719
|
+
const sourceId = normalizeFsResolvedId(id.split("?")[0], { stripLeadingNullByte: true });
|
|
30720
|
+
return entries.get(normalizeManagedTailwindcssEntryPath(sourceId));
|
|
30721
|
+
}
|
|
30722
|
+
function isVueStyleModuleId(id) {
|
|
30723
|
+
return id.includes("?weapp-vite-vue&type=style&");
|
|
30724
|
+
}
|
|
30725
|
+
function resolveManagedEntryIndex(id, code, entries) {
|
|
30726
|
+
const directIndex = parseManagedEntryIndex(id, entries);
|
|
30727
|
+
if (directIndex !== void 0 || !isVueStyleModuleId(id)) return directIndex;
|
|
30728
|
+
for (const [entry, index] of entries) try {
|
|
30729
|
+
if (fs.readFileSync(entry, "utf8") === code) return index;
|
|
30730
|
+
} catch {}
|
|
30731
|
+
}
|
|
30732
|
+
function createTailwindV4SourceOptions(resolved, entry) {
|
|
30733
|
+
const tailwindcss = resolved.options.tailwindcss;
|
|
30734
|
+
const v4 = tailwindcss?.v4;
|
|
30735
|
+
return {
|
|
30736
|
+
projectRoot: resolved.basedir,
|
|
30737
|
+
cwd: tailwindcss?.cwd,
|
|
30738
|
+
base: v4?.base,
|
|
30739
|
+
cssSources: v4?.cssSources,
|
|
30740
|
+
cssEntries: [entry],
|
|
30741
|
+
packageName: tailwindcss?.packageName ?? "tailwindcss"
|
|
30742
|
+
};
|
|
30743
|
+
}
|
|
30744
|
+
function createCompilerRootId(index, entry) {
|
|
30745
|
+
return `weapp-vite:tailwindcss:${index}:${normalizeManagedTailwindcssEntryPath(entry)}`;
|
|
30746
|
+
}
|
|
30747
|
+
function assertRuntimeRequirements(resolved) {
|
|
30748
|
+
const [major = 0, minor = 0] = process.versions.node.split(".").map(Number);
|
|
30749
|
+
if (!(major === 22 && minor >= 18 || major >= 24 && (major > 24 || minor >= 11))) throw new Error(`weapp.tailwindcss requires Node ${CORE_NODE_RANGE}; current version is ${process.versions.node}.`);
|
|
30750
|
+
for (const entry of resolved.cssEntries) if (!fs.existsSync(entry)) throw new Error(`weapp.tailwindcss CSS entry does not exist: ${entry}`);
|
|
30751
|
+
}
|
|
30752
|
+
function hasTailwindImport(code) {
|
|
30753
|
+
return TAILWIND_IMPORT_RE.test(code);
|
|
30754
|
+
}
|
|
30755
|
+
function createTailwindcssPlugin(ctx) {
|
|
30756
|
+
const managedOptions = resolveManagedTailwindcssOptions(ctx);
|
|
30757
|
+
if (!managedOptions) return [];
|
|
30758
|
+
const resolved = managedOptions;
|
|
30759
|
+
registerManagedTailwindcssEntries(ctx, resolved.cssEntries);
|
|
30760
|
+
const entryIndex = new Map(resolved.cssEntries.map((entry, index) => [normalizeManagedTailwindcssEntryPath(entry), index]));
|
|
30761
|
+
const previousEntrySources = /* @__PURE__ */ new Map();
|
|
30762
|
+
const resolvedEntryIndexes = /* @__PURE__ */ new Set();
|
|
30763
|
+
const loadedEntryIndexes = /* @__PURE__ */ new Set();
|
|
30764
|
+
const previousGeneratedCss = /* @__PURE__ */ new Map();
|
|
30765
|
+
const generatedOutputEntries = /* @__PURE__ */ new Map();
|
|
30766
|
+
const compilerRootIds = /* @__PURE__ */ new Map();
|
|
30767
|
+
const compilerSourceOptions = /* @__PURE__ */ new Map();
|
|
30768
|
+
const compilerSnapshots = /* @__PURE__ */ new Map();
|
|
30769
|
+
let generatedEntriesPromise;
|
|
30770
|
+
let coreModulePromise;
|
|
30771
|
+
let compilerPromise;
|
|
30772
|
+
let resolvedConfig;
|
|
30773
|
+
let loaded = false;
|
|
30774
|
+
let compilerDisposed = false;
|
|
30775
|
+
function resolveAutoEntryIndex(id, code) {
|
|
30776
|
+
if (!resolved.autoDetected || !hasTailwindImport(code)) return;
|
|
30777
|
+
const sourceId = normalizeFsResolvedId(id.split("?")[0], { stripLeadingNullByte: true });
|
|
30778
|
+
if (!sourceId || !/\.(?:css|pcss|postcss|sss|scss|sass|less|styl|stylus)$/.test(sourceId)) return;
|
|
30779
|
+
const normalizedEntry = normalizeManagedTailwindcssEntryPath(sourceId);
|
|
30780
|
+
const existingIndex = entryIndex.get(normalizedEntry);
|
|
30781
|
+
if (existingIndex !== void 0) return existingIndex;
|
|
30782
|
+
const index = resolved.cssEntries.length;
|
|
30783
|
+
resolved.cssEntries.push(sourceId);
|
|
30784
|
+
entryIndex.set(normalizedEntry, index);
|
|
30785
|
+
registerManagedTailwindcssEntries(ctx, resolved.cssEntries);
|
|
30786
|
+
return index;
|
|
30787
|
+
}
|
|
30788
|
+
function getCoreModule() {
|
|
30789
|
+
coreModulePromise ??= import("weapp-tailwindcss/core");
|
|
30790
|
+
return coreModulePromise;
|
|
30791
|
+
}
|
|
30792
|
+
async function getCompiler() {
|
|
30793
|
+
compilerPromise ??= getCoreModule().then(({ createCompiler }) => createCompiler(resolved.options));
|
|
30794
|
+
const compiler = await compilerPromise;
|
|
30795
|
+
if (!loaded) {
|
|
30796
|
+
loaded = true;
|
|
30797
|
+
resolved.options.onLoad?.();
|
|
30798
|
+
}
|
|
30799
|
+
return compiler;
|
|
30800
|
+
}
|
|
30801
|
+
async function stripResidualTailwindSourceDirectives(css) {
|
|
30802
|
+
if (!TAILWIND_SOURCE_DIRECTIVE_RE.test(css)) return css;
|
|
30803
|
+
const { postcss, removeTailwindSourceDirectivesRoot } = await getCoreModule();
|
|
30804
|
+
const root = postcss.parse(css);
|
|
30805
|
+
removeTailwindSourceDirectivesRoot(root);
|
|
30806
|
+
return root.toString();
|
|
30807
|
+
}
|
|
30808
|
+
async function generateEntryCss(compiler, index, entry) {
|
|
30809
|
+
const sourceOptions = compilerSourceOptions.get(index) ?? createTailwindV4SourceOptions(resolved, entry);
|
|
30810
|
+
compilerSourceOptions.set(index, sourceOptions);
|
|
30811
|
+
const id = compilerRootIds.get(index) ?? createCompilerRootId(index, entry);
|
|
30812
|
+
compilerRootIds.set(index, id);
|
|
30813
|
+
const generated = await compiler.generate({
|
|
30814
|
+
id,
|
|
30815
|
+
sourceOptions,
|
|
30816
|
+
target: resolved.generatorTarget,
|
|
30817
|
+
scanSources: true,
|
|
30818
|
+
bareArbitraryValues: resolved.options.arbitraryValues?.bareArbitraryValues,
|
|
30819
|
+
styleOptions: typeof resolved.options.generator === "object" ? resolved.options.generator.styleOptions : void 0
|
|
30820
|
+
});
|
|
30821
|
+
compilerSnapshots.set(index, generated.snapshot);
|
|
30822
|
+
return generated;
|
|
30823
|
+
}
|
|
30824
|
+
async function disposeCompiler() {
|
|
30825
|
+
if (compilerDisposed) return;
|
|
30826
|
+
compilerDisposed = true;
|
|
30827
|
+
await compilerPromise?.then((compiler) => compiler.dispose());
|
|
30828
|
+
}
|
|
30829
|
+
async function invalidateCompilerForFile(id, event) {
|
|
30830
|
+
const compiler = await getCompiler();
|
|
30831
|
+
const normalizedId = normalizeFsResolvedId(id.split("?")[0], { stripLeadingNullByte: true });
|
|
30832
|
+
const index = entryIndex.get(normalizeManagedTailwindcssEntryPath(normalizedId));
|
|
30833
|
+
generatedEntriesPromise = void 0;
|
|
30834
|
+
if (event === "delete" && index !== void 0) {
|
|
30835
|
+
const rootId = compilerRootIds.get(index);
|
|
30836
|
+
if (rootId) await compiler.remove(rootId);
|
|
30837
|
+
compilerSourceOptions.delete(index);
|
|
30838
|
+
return;
|
|
30839
|
+
}
|
|
30840
|
+
compiler.invalidate([normalizedId]);
|
|
30841
|
+
}
|
|
30842
|
+
async function transformBundle(bundle, options = {}) {
|
|
30843
|
+
if (resolved.autoDetected && resolved.cssEntries.length === 0) return;
|
|
30844
|
+
const transformStyles = options.styles !== false;
|
|
30845
|
+
const transformTemplates = options.templates !== false;
|
|
30846
|
+
const compiler = await getCompiler();
|
|
30847
|
+
const generatedEntries = resolved.options.generator === false ? [] : await (generatedEntriesPromise ??= Promise.all(resolved.cssEntries.map((entry, index) => generateEntryCss(compiler, index, entry))));
|
|
30848
|
+
const snapshots = generatedEntries.length > 0 ? generatedEntries.map((generated, index) => compilerSnapshots.get(index) ?? generated.snapshot) : [compiler.createSnapshot({
|
|
30849
|
+
id: `${MANAGED_PLUGIN_NAME}:disabled`,
|
|
30850
|
+
classSet: [],
|
|
30851
|
+
target: resolved.generatorTarget
|
|
30852
|
+
})];
|
|
30853
|
+
const snapshot = compiler.mergeSnapshots(snapshots);
|
|
30854
|
+
const seenEntries = /* @__PURE__ */ new Set();
|
|
30855
|
+
const styleExtension = ctx.configService.outputExtensions.wxss;
|
|
30856
|
+
const templateExtension = ctx.configService.outputExtensions.wxml;
|
|
30857
|
+
const scriptSourceMap = Boolean(resolvedConfig?.build.sourcemap);
|
|
30858
|
+
for (const output of Object.values(bundle)) {
|
|
30859
|
+
if (!transformStyles) break;
|
|
30860
|
+
if (output.type !== "asset") continue;
|
|
30861
|
+
let source = outputAssetSource(output);
|
|
30862
|
+
let hasManagedEntry = false;
|
|
30863
|
+
let isMainChunk = output.fileName === `app.${styleExtension}`;
|
|
30864
|
+
for (let index = 0; index < generatedEntries.length; index++) {
|
|
30865
|
+
const marker = createManagedTailwindcssEntryMarker(index);
|
|
30866
|
+
const outputMarker = createManagedTailwindcssOutputMarker(index);
|
|
30867
|
+
const hasEntryMarker = source.includes(marker);
|
|
30868
|
+
const hasOutputMarker = source.includes(outputMarker);
|
|
30869
|
+
const previousCss = previousGeneratedCss.get(index);
|
|
30870
|
+
const isTrackedOutput = generatedOutputEntries.get(output.fileName)?.has(index) === true;
|
|
30871
|
+
const expectedOutputFile = typeof ctx.configService.relativeOutputPath === "function" ? ctx.configService.relativeOutputPath(changeFileExtension(resolved.cssEntries[index], styleExtension)) : void 0;
|
|
30872
|
+
const isCanonicalOutput = expectedOutputFile !== void 0 && normalizeManagedTailwindcssEntryPath(expectedOutputFile) === normalizeManagedTailwindcssEntryPath(output.fileName);
|
|
30873
|
+
if (!hasEntryMarker && !hasOutputMarker && !isTrackedOutput && !isCanonicalOutput) continue;
|
|
30874
|
+
const generated = generatedEntries[index];
|
|
30875
|
+
hasManagedEntry = true;
|
|
30876
|
+
isMainChunk ||= normalizeManagedTailwindcssEntryPath(resolved.cssEntries[index]) === normalizeManagedTailwindcssEntryPath(path.resolve(ctx.configService.absoluteSrcRoot, "app.css"));
|
|
30877
|
+
seenEntries.add(index);
|
|
30878
|
+
const replacement = `${outputMarker}\n${generated.css}`;
|
|
30879
|
+
if (hasEntryMarker) {
|
|
30880
|
+
const markerIndex = source.indexOf(marker);
|
|
30881
|
+
source = source.slice(0, markerIndex) + replacement + source.slice(markerIndex + marker.length).replaceAll(marker, "");
|
|
30882
|
+
} else if (previousCss !== void 0) source = source.includes(outputMarker) ? source.replace(`${outputMarker}\n${previousCss}`, replacement) : `${replacement}\n${source}`;
|
|
30883
|
+
else if (isCanonicalOutput) source = `${replacement}\n${source}`;
|
|
30884
|
+
else source = source.replace(outputMarker, replacement);
|
|
30885
|
+
previousGeneratedCss.set(index, generated.css);
|
|
30886
|
+
const trackedEntries = generatedOutputEntries.get(output.fileName) ?? /* @__PURE__ */ new Set();
|
|
30887
|
+
trackedEntries.add(index);
|
|
30888
|
+
generatedOutputEntries.set(output.fileName, trackedEntries);
|
|
30889
|
+
for (const dependency of generated.dependencies) this.addWatchFile(dependency);
|
|
30890
|
+
}
|
|
30891
|
+
if (!hasManagedEntry && !output.fileName.endsWith(`.${styleExtension}`)) continue;
|
|
30892
|
+
output.source = stripManagedTailwindcssOutputMarkers(await stripResidualTailwindSourceDirectives((await compiler.transformCss(source, snapshot, { isMainChunk })).css));
|
|
30893
|
+
}
|
|
30894
|
+
if (transformStyles && !ctx.configService.isDev && resolved.options.generator !== false) {
|
|
30895
|
+
const stages = resolved.cssEntries.filter((_entry, index) => resolvedEntryIndexes.has(index) || loadedEntryIndexes.has(index)).filter((entry) => !seenEntries.has(resolved.cssEntries.indexOf(entry))).map((entry) => {
|
|
30896
|
+
const index = resolved.cssEntries.indexOf(entry);
|
|
30897
|
+
return `${entry} (resolved: ${resolvedEntryIndexes.has(index)}, loaded: ${loadedEntryIndexes.has(index)})`;
|
|
30898
|
+
});
|
|
30899
|
+
if (stages.length > 0) throw new Error(`weapp.tailwindcss CSS entries must be imported by the build graph: ${stages.join(", ")}`);
|
|
30900
|
+
}
|
|
30901
|
+
if (!transformTemplates) return;
|
|
30902
|
+
for (const output of Object.values(bundle)) {
|
|
30903
|
+
if (output.type === "asset" && output.fileName.endsWith(`.${templateExtension}`)) {
|
|
30904
|
+
output.source = await compiler.transformTemplate(outputAssetSource(output), snapshot, { filename: output.fileName });
|
|
30905
|
+
continue;
|
|
30906
|
+
}
|
|
30907
|
+
if (output.type !== "chunk" || !output.fileName.endsWith(".js")) continue;
|
|
30908
|
+
const transformed = await compiler.transformJavaScript(output.code, snapshot, {
|
|
30909
|
+
filename: output.fileName,
|
|
30910
|
+
generateMap: scriptSourceMap
|
|
30911
|
+
});
|
|
30912
|
+
if (transformed.error) throw transformed.error;
|
|
30913
|
+
applyOutputChunkTransform(output, transformed.code, transformed.map);
|
|
30914
|
+
}
|
|
30915
|
+
}
|
|
30916
|
+
return [{
|
|
30917
|
+
name: MANAGED_PLUGIN_NAME,
|
|
30918
|
+
enforce: "pre",
|
|
30919
|
+
generateBundle: {
|
|
30920
|
+
order: "pre",
|
|
30921
|
+
async handler(_options, bundle) {
|
|
30922
|
+
generatedEntriesPromise = void 0;
|
|
30923
|
+
resolved.options.onStart?.();
|
|
30924
|
+
try {
|
|
30925
|
+
await transformBundle.call(this, bundle, { templates: false });
|
|
30926
|
+
} finally {
|
|
30927
|
+
resolved.options.onEnd?.();
|
|
30928
|
+
}
|
|
30929
|
+
}
|
|
30930
|
+
},
|
|
30931
|
+
async buildStart() {
|
|
30932
|
+
generatedEntriesPromise = void 0;
|
|
30933
|
+
assertRuntimeRequirements(resolved);
|
|
30934
|
+
if (ctx.configService.isDev) {
|
|
30935
|
+
const pendingChanges = ctx.moduleGraphService?.getPendingChanges?.() ?? [];
|
|
30936
|
+
if (pendingChanges.length > 0) await Promise.all(pendingChanges.map((change) => invalidateCompilerForFile(change.file, change.event)));
|
|
30937
|
+
}
|
|
30938
|
+
resolvedEntryIndexes.clear();
|
|
30939
|
+
loadedEntryIndexes.clear();
|
|
30940
|
+
for (const entry of resolved.cssEntries) this.addWatchFile(entry);
|
|
30941
|
+
},
|
|
30942
|
+
configResolved(config) {
|
|
30943
|
+
resolvedConfig = config;
|
|
30944
|
+
},
|
|
30945
|
+
resolveId(source) {
|
|
30946
|
+
if (resolved.options.generator === false) return null;
|
|
30947
|
+
const sidecar = parseSidecarSourceRequest(source);
|
|
30948
|
+
if (!sidecar || sidecar.kind !== "style") return null;
|
|
30949
|
+
let index = entryIndex.get(normalizeManagedTailwindcssEntryPath(sidecar.sourceId));
|
|
30950
|
+
if (index === void 0 && resolved.autoDetected) try {
|
|
30951
|
+
index = resolveAutoEntryIndex(sidecar.sourceId, fs.readFileSync(sidecar.sourceId, "utf8"));
|
|
30952
|
+
} catch {}
|
|
30953
|
+
if (index === void 0) return null;
|
|
30954
|
+
resolvedEntryIndexes.add(index);
|
|
30955
|
+
return createVirtualEntryId(index, source);
|
|
30956
|
+
},
|
|
30957
|
+
load(id) {
|
|
30958
|
+
if (resolved.options.generator === false) return null;
|
|
30959
|
+
const virtualIndex = parseVirtualEntryIndex(id);
|
|
30960
|
+
const normalizedId = virtualIndex === void 0 ? normalizeFsResolvedId(id.split("?")[0]) : normalizeFsResolvedId(resolved.cssEntries[virtualIndex] ?? "");
|
|
30961
|
+
const index = virtualIndex ?? entryIndex.get(normalizedId);
|
|
30962
|
+
if (index === void 0) return null;
|
|
30963
|
+
loadedEntryIndexes.add(index);
|
|
30964
|
+
const code = fs.readFileSync(normalizedId, "utf8");
|
|
30965
|
+
const previous = previousEntrySources.get(normalizedId);
|
|
30966
|
+
if (previous !== void 0 && previous !== code) resolved.options.onUpdate?.(normalizedId, previous, code);
|
|
30967
|
+
previousEntrySources.set(normalizedId, code);
|
|
30968
|
+
return createManagedTailwindcssEntryMarker(index);
|
|
30969
|
+
},
|
|
30970
|
+
transform(code, id) {
|
|
30971
|
+
if (resolved.options.generator === false) return null;
|
|
30972
|
+
const index = resolveManagedEntryIndex(id, code, entryIndex) ?? resolveAutoEntryIndex(id, code);
|
|
30973
|
+
if (index === void 0) return null;
|
|
30974
|
+
loadedEntryIndexes.add(index);
|
|
30975
|
+
return {
|
|
30976
|
+
code: createManagedTailwindcssEntryMarker(index),
|
|
30977
|
+
map: null
|
|
30978
|
+
};
|
|
30979
|
+
},
|
|
30980
|
+
async watchChange(id, change) {
|
|
30981
|
+
await invalidateCompilerForFile(id, change.event);
|
|
30982
|
+
},
|
|
30983
|
+
async handleHotUpdate({ file }) {
|
|
30984
|
+
await invalidateCompilerForFile(file, "update");
|
|
30985
|
+
},
|
|
30986
|
+
async closeWatcher() {
|
|
30987
|
+
await disposeCompiler();
|
|
30988
|
+
}
|
|
30989
|
+
}, {
|
|
30990
|
+
name: `${MANAGED_PLUGIN_NAME}:output`,
|
|
30991
|
+
enforce: "post",
|
|
30992
|
+
generateBundle: {
|
|
30993
|
+
order: "post",
|
|
30994
|
+
async handler(_options, bundle) {
|
|
30995
|
+
resolved.options.onStart?.();
|
|
30996
|
+
try {
|
|
30997
|
+
await transformBundle.call(this, bundle, { styles: false });
|
|
30998
|
+
} finally {
|
|
30999
|
+
resolved.options.onEnd?.();
|
|
31000
|
+
}
|
|
31001
|
+
}
|
|
31002
|
+
},
|
|
31003
|
+
async closeBundle() {
|
|
31004
|
+
if (!ctx.configService.isDev) await disposeCompiler();
|
|
31005
|
+
}
|
|
31006
|
+
}];
|
|
31007
|
+
}
|
|
31008
|
+
//#endregion
|
|
30587
31009
|
//#region src/plugins/uniApp.ts
|
|
30588
31010
|
const SUPPORTED_SOURCE_RE = /(?:\.vue|\.[cm]?[jt]sx?|\.(?:css|less|sass|scss|styl|stylus))(?:\?.*)?$/i;
|
|
30589
31011
|
function resolveVirtualBlockType(id) {
|
|
@@ -32043,14 +32465,7 @@ async function finalizeTransformCompiledResult(options) {
|
|
|
32043
32465
|
const normalizedFilename = normalizeFsResolvedId(filename);
|
|
32044
32466
|
const hmr = ctx.runtimeState?.build?.hmr;
|
|
32045
32467
|
const signatures = resolveVueSfcHmrSignatures(source, filename);
|
|
32046
|
-
if (
|
|
32047
|
-
if (signatures.scriptSignature && hmr?.vueEntryScriptSignatures) hmr.vueEntryScriptSignatures.set(normalizedFilename, signatures.scriptSignature);
|
|
32048
|
-
if (signatures.tailwindContentSignature && hmr?.vueEntryTailwindContentSignatures) hmr.vueEntryTailwindContentSignatures.set(normalizedFilename, signatures.tailwindContentSignature);
|
|
32049
|
-
if (signatures.tailwindTemplateContentSignature && hmr?.vueEntryTailwindTemplateContentSignatures) hmr.vueEntryTailwindTemplateContentSignatures.set(normalizedFilename, signatures.tailwindTemplateContentSignature);
|
|
32050
|
-
if (signatures.tailwindScriptContentSignature && hmr?.vueEntryTailwindScriptContentSignatures) hmr.vueEntryTailwindScriptContentSignatures.set(normalizedFilename, signatures.tailwindScriptContentSignature);
|
|
32051
|
-
const nextStyleIndependentSignature = styleIndependentSignature ?? signatures.styleIndependentSignature;
|
|
32052
|
-
if (nextStyleIndependentSignature && hmr?.vueEntryStyleIndependentSignatures) hmr.vueEntryStyleIndependentSignatures.set(normalizedFilename, nextStyleIndependentSignature);
|
|
32053
|
-
if (signatures.hasTemplate !== void 0 && hmr?.vueEntryHasTemplate) hmr.vueEntryHasTemplate.set(normalizedFilename, signatures.hasTemplate);
|
|
32468
|
+
if (hmr) storeVueSfcHmrSignatures(hmr, normalizedFilename, signatures);
|
|
32054
32469
|
}
|
|
32055
32470
|
const relativeBase = resolveVueOutputBase(configService, filename);
|
|
32056
32471
|
if (relativeBase) emitScopedSlotChunks(pluginCtx, relativeBase, result, scopedSlotModules, emittedScopedSlotChunks, configService.outputExtensions);
|
|
@@ -32148,6 +32563,8 @@ async function compileVueLikeFile(options) {
|
|
|
32148
32563
|
await registerResolvedPageLayoutDependencies(ctx, filename, resolvedLayoutPlan.layouts);
|
|
32149
32564
|
}
|
|
32150
32565
|
}
|
|
32566
|
+
const hmr = ctx.runtimeState?.build?.hmr;
|
|
32567
|
+
if (configService.isDev && hmr) storeVueSfcHmrSignatures(hmr, normalizeFsResolvedId(filename), resolveVueSfcHmrSignatures(source, filename));
|
|
32151
32568
|
return result;
|
|
32152
32569
|
}
|
|
32153
32570
|
const result = await compileJsxFile(source, filename, compileOptions);
|
|
@@ -32233,7 +32650,7 @@ async function refreshCompiledVueEntryCacheInDev(options) {
|
|
|
32233
32650
|
cached.source = source;
|
|
32234
32651
|
cached.styleIndependentSignature = currentStyleIndependentSignature;
|
|
32235
32652
|
cached.refreshToken = 0;
|
|
32236
|
-
ctx.runtimeState
|
|
32653
|
+
storeVueSfcHmrSignatures(ctx.runtimeState.build.hmr, filename, resolveVueSfcHmrSignatures(source, filename));
|
|
32237
32654
|
dirtyVueEntryIds?.delete(dirtyEntryId);
|
|
32238
32655
|
return cached.result;
|
|
32239
32656
|
}
|
|
@@ -32253,7 +32670,6 @@ async function refreshCompiledVueEntryCacheInDev(options) {
|
|
|
32253
32670
|
cached.autoRoutesSignature = transformed.signature;
|
|
32254
32671
|
cached.styleIndependentSignature = nextStyleIndependentSignature;
|
|
32255
32672
|
cached.refreshToken = 0;
|
|
32256
|
-
if (nextStyleIndependentSignature) ctx.runtimeState?.build?.hmr?.vueEntryStyleIndependentSignatures?.set(filename, nextStyleIndependentSignature);
|
|
32257
32673
|
if (dirtyEntryId) dirtyVueEntryIds?.delete(dirtyEntryId);
|
|
32258
32674
|
cached.result = compiled;
|
|
32259
32675
|
return compiled;
|
|
@@ -33726,8 +34142,12 @@ function vitePluginWeapp(ctx, subPackageMeta) {
|
|
|
33726
34142
|
if (autoRoutesEnabled && !libModeEnabled) groups.push(autoRoutes(ctx));
|
|
33727
34143
|
groups.push(autoImport(ctx));
|
|
33728
34144
|
}
|
|
33729
|
-
|
|
34145
|
+
const tailwindcssPlugins = createTailwindcssPlugin(ctx);
|
|
34146
|
+
groups.push(i18n(ctx, subPackageMeta), weappVite(ctx, subPackageMeta), wxs(ctx));
|
|
34147
|
+
if (tailwindcssPlugins.length > 0) groups.push([tailwindcssPlugins[0]]);
|
|
34148
|
+
groups.push(css(ctx));
|
|
33730
34149
|
groups.push([createOutputFinalizerPlugin(ctx, subPackageMeta)]);
|
|
34150
|
+
if (tailwindcssPlugins.length > 1) groups.push([tailwindcssPlugins[1]]);
|
|
33731
34151
|
const assembled = attachRuntimePlugins(ctx, flatten(groups));
|
|
33732
34152
|
if (subPackageMeta) return assembled;
|
|
33733
34153
|
return applyInspect(ctx, assembled);
|
|
@@ -33797,7 +34217,7 @@ function createAbsolutePathPattern(value) {
|
|
|
33797
34217
|
function hasTsconfigReference(tsconfig, target) {
|
|
33798
34218
|
if (!existsSync(tsconfig)) return false;
|
|
33799
34219
|
try {
|
|
33800
|
-
const parsed = parse
|
|
34220
|
+
const parsed = parse(readFileSync(tsconfig, "utf8"), void 0, true);
|
|
33801
34221
|
const references = Array.isArray(parsed.references) ? parsed.references : [];
|
|
33802
34222
|
const tsconfigDir = path.dirname(tsconfig);
|
|
33803
34223
|
return references.some((reference) => {
|
|
@@ -34750,7 +35170,7 @@ async function loadAppEntry(ctx, scanState) {
|
|
|
34750
35170
|
const { path: appEntryPath } = appEntry;
|
|
34751
35171
|
let configFromVue;
|
|
34752
35172
|
if (!appConfigFile && vueAppPath) {
|
|
34753
|
-
const { extractConfigFromVue } = await import("./file-
|
|
35173
|
+
const { extractConfigFromVue } = await import("./file-XlRiJP3-.mjs");
|
|
34754
35174
|
configFromVue = await extractConfigFromVue(vueAppPath);
|
|
34755
35175
|
if (configFromVue) appConfigFile = vueAppPath;
|
|
34756
35176
|
}
|
|
@@ -35766,4 +36186,4 @@ async function createCompilerContext(options) {
|
|
|
35766
36186
|
return ctx;
|
|
35767
36187
|
}
|
|
35768
36188
|
//#endregion
|
|
35769
|
-
export { getDefaultIdeProjectRoot as A, collectPreloadPages as C, loadViteConfigFile as D, suggestPreloadRules as E, isPathInside as M,
|
|
36189
|
+
export { getDefaultIdeProjectRoot as A, collectPreloadPages as C, loadViteConfigFile as D, suggestPreloadRules as E, isPathInside as M, createCjsConfigLoadError as O, getProjectConfigFileName as S, resolvePreloadPackageIdentifier as T, SHARED_CHUNK_VIRTUAL_PREFIX as _, createGlassEaselAnalyzeResult as a, resolveWeappConfigFile as b, getSupportedWeappVitePlatforms as c, resolveWeappViteTarget as d, getBackendForCapability as f, createSharedBuildConfig as g, syncManagedTsconfigBootstrapFiles as h, setActiveCompilerContextKey as i, shouldPassPlatformArgToIdeOpen as j, parseCommentJson as k, getSupportedWeappViteTargetDescriptors as l, syncProjectSupportFiles as m, getCompilerContext as n, formatBytes as o, resolveBackendExecution as p, resetCompilerContext as r, WEB_PLATFORM_ALIASES as s, createCompilerContext as t, isWebPlatform as u, resolveHmrProfileJsonPath as v, findPreloadRuleKey as w, checkRuntime as x, getRouteRuntimeGlobalKeys as y };
|