@marko/run 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapter/dev-server.d.ts +10 -1
- package/dist/adapter/index.cjs +77 -13
- package/dist/adapter/index.d.ts +3 -1
- package/dist/adapter/index.js +71 -11
- package/dist/adapter/load-dev-worker.mjs +6 -5
- package/dist/adapter/middleware.cjs +34 -61
- package/dist/adapter/middleware.d.ts +1 -3
- package/dist/adapter/middleware.js +30 -61
- package/dist/cli/index.mjs +215 -108
- package/dist/components/dev-error-page.marko +14 -0
- package/dist/vite/codegen/index.d.ts +2 -0
- package/dist/vite/constants.d.ts +0 -2
- package/dist/vite/index.cjs +217 -108
- package/dist/vite/index.js +213 -108
- package/dist/vite/types.d.ts +2 -2
- package/package.json +7 -4
- package/dist/vite/routes/routeTrie.d.ts +0 -2
package/dist/vite/index.cjs
CHANGED
|
@@ -19,6 +19,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
19
|
return to;
|
|
20
20
|
};
|
|
21
21
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
22
26
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
23
27
|
mod
|
|
24
28
|
));
|
|
@@ -68,14 +72,15 @@ var import_path2 = __toESM(require("path"), 1);
|
|
|
68
72
|
var import_crypto = __toESM(require("crypto"), 1);
|
|
69
73
|
var import_fs2 = __toESM(require("fs"), 1);
|
|
70
74
|
var import_glob = __toESM(require("glob"), 1);
|
|
75
|
+
var import_url2 = require("url");
|
|
76
|
+
var import_browserslist = __toESM(require("browserslist"), 1);
|
|
77
|
+
var import_esbuild_plugin_browserslist = require("esbuild-plugin-browserslist");
|
|
71
78
|
var import_vite = require("vite");
|
|
72
79
|
var import_vite2 = __toESM(require("@marko/vite"), 1);
|
|
73
80
|
|
|
74
81
|
// src/vite/constants.ts
|
|
75
82
|
var markoRunFilePrefix = "__marko-run__";
|
|
76
83
|
var virtualFilePrefix = "virtual:marko-run";
|
|
77
|
-
var virtualRoutesPrefix = `${virtualFilePrefix}/routes`;
|
|
78
|
-
var virtualRuntimePrefix = `${virtualFilePrefix}/internal`;
|
|
79
84
|
var httpVerbs = ["get", "post", "put", "delete"];
|
|
80
85
|
var serverEntryQuery = "?marko-server-entry";
|
|
81
86
|
var RoutableFileTypes = {
|
|
@@ -90,7 +95,7 @@ var RoutableFileTypes = {
|
|
|
90
95
|
|
|
91
96
|
// src/vite/routes/vdir.ts
|
|
92
97
|
var _dirs, _pathlessDirs;
|
|
93
|
-
var _VDir = class {
|
|
98
|
+
var _VDir = class _VDir {
|
|
94
99
|
constructor(parent, segment, source) {
|
|
95
100
|
__privateAdd(this, _dirs, void 0);
|
|
96
101
|
__privateAdd(this, _pathlessDirs, void 0);
|
|
@@ -227,9 +232,9 @@ var _VDir = class {
|
|
|
227
232
|
return dirs;
|
|
228
233
|
}
|
|
229
234
|
};
|
|
230
|
-
var VDir = _VDir;
|
|
231
235
|
_dirs = new WeakMap();
|
|
232
236
|
_pathlessDirs = new WeakMap();
|
|
237
|
+
var VDir = _VDir;
|
|
233
238
|
|
|
234
239
|
// src/vite/routes/parse.ts
|
|
235
240
|
function parseFlatRoute(pattern) {
|
|
@@ -750,23 +755,35 @@ function renderRouteTemplate(route) {
|
|
|
750
755
|
if (!route.page) {
|
|
751
756
|
throw new Error(`Route ${route.key} has no page to render`);
|
|
752
757
|
}
|
|
758
|
+
return renderEntryTemplate(
|
|
759
|
+
route.entryName,
|
|
760
|
+
[...route.layouts, route.page].map((file) => `./${file.importPath}`)
|
|
761
|
+
);
|
|
762
|
+
}
|
|
763
|
+
function renderEntryTemplate(name, files) {
|
|
764
|
+
if (!name) {
|
|
765
|
+
throw new Error(`Invalid argument - 'name' cannot be empty`);
|
|
766
|
+
}
|
|
767
|
+
if (!files.length) {
|
|
768
|
+
throw new Error(`Invalid argument - 'files' cannot be empty`);
|
|
769
|
+
}
|
|
753
770
|
const writer = createStringWriter();
|
|
754
|
-
writer.writeLines(`// ${virtualFilePrefix}/${
|
|
771
|
+
writer.writeLines(`// ${virtualFilePrefix}/${name}.marko`);
|
|
755
772
|
writer.branch("imports");
|
|
756
773
|
writer.writeLines("");
|
|
757
|
-
|
|
774
|
+
writeEntryTemplateTag(writer, files);
|
|
758
775
|
return writer.end();
|
|
759
776
|
}
|
|
760
|
-
function
|
|
777
|
+
function writeEntryTemplateTag(writer, [file, ...rest], index = 1) {
|
|
761
778
|
if (file) {
|
|
762
779
|
const isLast = !rest.length;
|
|
763
780
|
const tag = isLast ? "page" : `layout${index}`;
|
|
764
|
-
writer.branch("imports").writeLines(`import ${tag} from '
|
|
781
|
+
writer.branch("imports").writeLines(`import ${tag} from '${file}';`);
|
|
765
782
|
if (isLast) {
|
|
766
|
-
writer.writeLines(`<${tag} ...input
|
|
783
|
+
writer.writeLines(`<${tag} ...input/>`);
|
|
767
784
|
} else {
|
|
768
785
|
writer.writeBlockStart(`<${tag} ...input>`);
|
|
769
|
-
|
|
786
|
+
writeEntryTemplateTag(writer, rest, index + 1);
|
|
770
787
|
writer.writeBlockEnd(`</>`);
|
|
771
788
|
}
|
|
772
789
|
}
|
|
@@ -798,7 +815,9 @@ function renderRouteEntry(route) {
|
|
|
798
815
|
}
|
|
799
816
|
if (runtimeImports.length) {
|
|
800
817
|
imports.writeLines(
|
|
801
|
-
`import { ${runtimeImports.join(
|
|
818
|
+
`import { ${runtimeImports.join(
|
|
819
|
+
", "
|
|
820
|
+
)} } from '${virtualFilePrefix}/runtime/internal';`
|
|
802
821
|
);
|
|
803
822
|
}
|
|
804
823
|
if (middleware.length) {
|
|
@@ -912,6 +931,45 @@ function writeRouteEntryHandler(writer, route, verb) {
|
|
|
912
931
|
continuations.join();
|
|
913
932
|
writer.writeBlockEnd("}");
|
|
914
933
|
}
|
|
934
|
+
function renderErrorRouter(error, options = {
|
|
935
|
+
trailingSlashes: "RedirectWithout"
|
|
936
|
+
}) {
|
|
937
|
+
const writer = createStringWriter();
|
|
938
|
+
writer.write(`
|
|
939
|
+
// @marko/run/router
|
|
940
|
+
import { createContext } from '${virtualFilePrefix}/runtime/internal';
|
|
941
|
+
import errorPage from '${virtualFilePrefix}/${markoRunFilePrefix}error.marko${serverEntryQuery}';
|
|
942
|
+
|
|
943
|
+
const error = new Error(\`${error.message}\`);
|
|
944
|
+
error.name = '${error.name}';`);
|
|
945
|
+
if (error.stack) {
|
|
946
|
+
writer.write(`
|
|
947
|
+
error.stack = \`${error.stack}\`;`);
|
|
948
|
+
}
|
|
949
|
+
writer.write(`
|
|
950
|
+
|
|
951
|
+
globalThis.__marko_run__ = { match, fetch, invoke };
|
|
952
|
+
|
|
953
|
+
export function match() {
|
|
954
|
+
return { handler: errorPage, params: {}, meta: {}, path: '/*' }; // /$$
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
export async function invoke(route, request, platform, url) {
|
|
958
|
+
const [context, buildInput] = createContext(route, request, platform, url);
|
|
959
|
+
if (context.request.headers.get('Accept')?.includes('text/html')) {
|
|
960
|
+
return new Response(errorPage.stream(buildInput({ error })), {
|
|
961
|
+
status: 500,
|
|
962
|
+
headers: { "content-type": "text/html;charset=UTF-8" },
|
|
963
|
+
});
|
|
964
|
+
}
|
|
965
|
+
return new Response(error, {
|
|
966
|
+
status: 500,
|
|
967
|
+
});
|
|
968
|
+
}
|
|
969
|
+
`);
|
|
970
|
+
renderFetch(writer, options);
|
|
971
|
+
return writer.end();
|
|
972
|
+
}
|
|
915
973
|
function renderRouter(routes, options = {
|
|
916
974
|
trailingSlashes: "RedirectWithout"
|
|
917
975
|
}) {
|
|
@@ -919,7 +977,7 @@ function renderRouter(routes, options = {
|
|
|
919
977
|
writer.writeLines(`// @marko/run/router`);
|
|
920
978
|
const imports = writer.branch("imports");
|
|
921
979
|
imports.writeLines(
|
|
922
|
-
`import { NotHandled, NotMatched, createContext } from '
|
|
980
|
+
`import { NotHandled, NotMatched, createContext } from '${virtualFilePrefix}/runtime/internal';`
|
|
923
981
|
);
|
|
924
982
|
for (const route of routes.list) {
|
|
925
983
|
const verbs = getVerbs(route);
|
|
@@ -955,24 +1013,24 @@ globalThis.__marko_run__ = { match, fetch, invoke };
|
|
|
955
1013
|
}
|
|
956
1014
|
}
|
|
957
1015
|
writer.writeBlockEnd("}").writeLines("return null;").writeBlockEnd("}");
|
|
958
|
-
writer.
|
|
959
|
-
export async function invoke(route, request, platform, url) {
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
1016
|
+
writer.writeLines("").writeBlockStart(
|
|
1017
|
+
"export async function invoke(route, request, platform, url) {"
|
|
1018
|
+
).writeLines(
|
|
1019
|
+
"const [context, buildInput] = createContext(route, request, platform, url);"
|
|
1020
|
+
);
|
|
1021
|
+
const hasErrorPage = Boolean(routes.special[RoutableFileTypes.Error]);
|
|
1022
|
+
if (hasErrorPage) {
|
|
1023
|
+
writer.writeBlockStart("try {");
|
|
1024
|
+
}
|
|
1025
|
+
writer.writeBlockStart("if (route) {").writeBlockStart("try {").writeLines(
|
|
1026
|
+
"const response = await route.handler(context, buildInput);",
|
|
1027
|
+
"if (response) return response;"
|
|
1028
|
+
).indent--;
|
|
1029
|
+
writer.writeBlockStart("} catch (error) {").writeLines(
|
|
1030
|
+
"if (error === NotHandled) return;",
|
|
1031
|
+
"if (error !== NotMatched) throw error;"
|
|
1032
|
+
).writeBlockEnd("}").writeBlockEnd("}");
|
|
974
1033
|
if (routes.special[RoutableFileTypes.NotFound]) {
|
|
975
|
-
writer.indent = 2;
|
|
976
1034
|
imports.writeLines(
|
|
977
1035
|
`
|
|
978
1036
|
const page404ResponseInit = {
|
|
@@ -980,33 +1038,31 @@ const page404ResponseInit = {
|
|
|
980
1038
|
headers: { "content-type": "text/html;charset=UTF-8" },
|
|
981
1039
|
};`
|
|
982
1040
|
);
|
|
983
|
-
writer.write(
|
|
984
|
-
` } else {
|
|
985
|
-
}
|
|
1041
|
+
writer.write(`
|
|
986
1042
|
if (context.request.headers.get('Accept')?.includes('text/html')) {
|
|
987
1043
|
return new Response(page404.stream(buildInput()), page404ResponseInit);
|
|
988
1044
|
}
|
|
989
|
-
`
|
|
990
|
-
);
|
|
991
|
-
} else {
|
|
992
|
-
writer.indent = 3;
|
|
993
|
-
writer.writeBlockEnd("}");
|
|
1045
|
+
`);
|
|
994
1046
|
}
|
|
995
1047
|
writer.indent--;
|
|
996
|
-
|
|
997
|
-
if (routes.special[RoutableFileTypes.Error]) {
|
|
1048
|
+
if (hasErrorPage) {
|
|
998
1049
|
imports.writeLines(`
|
|
999
1050
|
const page500ResponseInit = {
|
|
1000
1051
|
status: 500,
|
|
1001
1052
|
headers: { "content-type": "text/html;charset=UTF-8" },
|
|
1002
1053
|
};`);
|
|
1003
|
-
writer.writeBlockStart(
|
|
1054
|
+
writer.writeBlockStart(`} catch (error) {`).writeBlockStart(
|
|
1004
1055
|
`if (context.request.headers.get('Accept')?.includes('text/html')) {`
|
|
1005
1056
|
).writeLines(
|
|
1006
1057
|
`return new Response(page500.stream(buildInput({ error })), page500ResponseInit);`
|
|
1007
|
-
).writeBlockEnd("}");
|
|
1058
|
+
).writeBlockEnd("}").writeLines("throw error;").writeBlockEnd("}");
|
|
1008
1059
|
}
|
|
1009
|
-
writer.
|
|
1060
|
+
writer.writeBlockEnd("}");
|
|
1061
|
+
renderFetch(writer, options);
|
|
1062
|
+
return writer.end();
|
|
1063
|
+
}
|
|
1064
|
+
function renderFetch(writer, options) {
|
|
1065
|
+
writer.write(`
|
|
1010
1066
|
export async function fetch(request, platform) {
|
|
1011
1067
|
try {
|
|
1012
1068
|
const url = new URL(request.url);
|
|
@@ -1052,7 +1108,6 @@ export async function fetch(request, platform) {
|
|
|
1052
1108
|
});
|
|
1053
1109
|
}
|
|
1054
1110
|
}`);
|
|
1055
|
-
return writer.end();
|
|
1056
1111
|
}
|
|
1057
1112
|
function writeRouterVerb(writer, trie, verb, level = 0, offset = 1) {
|
|
1058
1113
|
const { route, dynamic, catchAll } = trie;
|
|
@@ -1174,7 +1229,12 @@ function writeRouterVerb(writer, trie, verb, level = 0, offset = 1) {
|
|
|
1174
1229
|
}
|
|
1175
1230
|
if (catchAll) {
|
|
1176
1231
|
writer.writeLines(
|
|
1177
|
-
`return ${renderMatch(
|
|
1232
|
+
`return ${renderMatch(
|
|
1233
|
+
verb,
|
|
1234
|
+
catchAll.route,
|
|
1235
|
+
catchAll.path,
|
|
1236
|
+
String(offset)
|
|
1237
|
+
)}; // ${catchAll.path.path}`
|
|
1178
1238
|
);
|
|
1179
1239
|
} else if (level === 0) {
|
|
1180
1240
|
writer.writeLines("return null;");
|
|
@@ -1216,7 +1276,9 @@ function renderMiddleware(middleware) {
|
|
|
1216
1276
|
`// ${virtualFilePrefix}/${markoRunFilePrefix}middleware.js`
|
|
1217
1277
|
);
|
|
1218
1278
|
const imports = writer.branch("imports");
|
|
1219
|
-
imports.writeLines(
|
|
1279
|
+
imports.writeLines(
|
|
1280
|
+
`import { normalize } from '${virtualFilePrefix}/runtime/internal';`
|
|
1281
|
+
);
|
|
1220
1282
|
writer.writeLines("");
|
|
1221
1283
|
for (const { id, importPath } of middleware) {
|
|
1222
1284
|
const importName = `middleware${id}`;
|
|
@@ -1622,7 +1684,6 @@ var setExternalPluginOptions = (viteConfig, value) => setConfig(viteConfig, Plug
|
|
|
1622
1684
|
var getExternalAdapterOptions = (viteConfig) => getConfig(viteConfig, AdapterConfigKey);
|
|
1623
1685
|
|
|
1624
1686
|
// src/vite/plugin.ts
|
|
1625
|
-
var import_url2 = require("url");
|
|
1626
1687
|
var __dirname = import_path2.default.dirname((0, import_url2.fileURLToPath)(__importMetaURL));
|
|
1627
1688
|
var PLUGIN_NAME_PREFIX = "marko-run-vite";
|
|
1628
1689
|
var POSIX_SEP = "/";
|
|
@@ -1655,14 +1716,14 @@ function markoRun(opts = {}) {
|
|
|
1655
1716
|
routesBuild: 0,
|
|
1656
1717
|
routesRender: 0
|
|
1657
1718
|
};
|
|
1658
|
-
async function writeTypesFile() {
|
|
1659
|
-
if (tsConfigExists ?? (tsConfigExists = await globFileExists(
|
|
1719
|
+
async function writeTypesFile(routes2) {
|
|
1720
|
+
if (routes2 && (tsConfigExists ?? (tsConfigExists = await globFileExists(
|
|
1660
1721
|
root,
|
|
1661
1722
|
"{.tsconfig*,tsconfig*.json}"
|
|
1662
|
-
))) {
|
|
1723
|
+
)))) {
|
|
1663
1724
|
const filepath = import_path2.default.join(typesDir, "routes.d.ts");
|
|
1664
1725
|
const data = await renderRouteTypeInfo(
|
|
1665
|
-
|
|
1726
|
+
routes2,
|
|
1666
1727
|
normalizePath(import_path2.default.relative(typesDir, resolvedRoutesDir)),
|
|
1667
1728
|
adapter
|
|
1668
1729
|
);
|
|
@@ -1672,65 +1733,95 @@ function markoRun(opts = {}) {
|
|
|
1672
1733
|
}
|
|
1673
1734
|
}
|
|
1674
1735
|
}
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1736
|
+
const buildVirtualFiles = single(async (render) => {
|
|
1737
|
+
var _a;
|
|
1738
|
+
const routerOptions = {
|
|
1739
|
+
trailingSlashes: opts.trailingSlashes || "RedirectWithout"
|
|
1740
|
+
};
|
|
1741
|
+
if (!render) {
|
|
1742
|
+
virtualFiles.clear();
|
|
1743
|
+
isRendered = false;
|
|
1744
|
+
}
|
|
1745
|
+
try {
|
|
1746
|
+
if (isStale) {
|
|
1747
|
+
const buildStartTime = performance.now();
|
|
1748
|
+
routes = await buildRoutes(
|
|
1749
|
+
createFSWalker(resolvedRoutesDir),
|
|
1750
|
+
routesDir
|
|
1751
|
+
);
|
|
1752
|
+
times.routesBuild = performance.now() - buildStartTime;
|
|
1753
|
+
if (!routes.list.length) {
|
|
1754
|
+
throw new Error("No routes generated");
|
|
1755
|
+
}
|
|
1756
|
+
}
|
|
1757
|
+
const renderStartTime = performance.now();
|
|
1758
|
+
for (const route of routes.list) {
|
|
1759
|
+
if (render && route.handler) {
|
|
1760
|
+
route.handler.verbs = await extractVerbs(route.handler.filePath);
|
|
1761
|
+
if (!route.handler.verbs.length) {
|
|
1762
|
+
throw new Error(
|
|
1763
|
+
`Did not find any valid exports in middleware entry file:'${route.handler.filePath}' - expected to find any of 'GET', 'POST', 'PUT' or 'DELETE'`
|
|
1764
|
+
);
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
if (route.page) {
|
|
1768
|
+
virtualFiles.set(
|
|
1769
|
+
import_path2.default.posix.join(root, `${route.entryName}.marko`),
|
|
1770
|
+
render ? renderRouteTemplate(route) : ""
|
|
1682
1771
|
);
|
|
1683
1772
|
}
|
|
1773
|
+
virtualFiles.set(
|
|
1774
|
+
import_path2.default.posix.join(root, `${route.entryName}.js`),
|
|
1775
|
+
render ? renderRouteEntry(route) : ""
|
|
1776
|
+
);
|
|
1684
1777
|
}
|
|
1685
|
-
|
|
1778
|
+
for (const route of Object.values(routes.special)) {
|
|
1686
1779
|
virtualFiles.set(
|
|
1687
1780
|
import_path2.default.posix.join(root, `${route.entryName}.marko`),
|
|
1688
1781
|
render ? renderRouteTemplate(route) : ""
|
|
1689
1782
|
);
|
|
1690
1783
|
}
|
|
1784
|
+
if (routes.middleware.length) {
|
|
1785
|
+
virtualFiles.set(
|
|
1786
|
+
import_path2.default.posix.join(root, `${markoRunFilePrefix}middleware.js`),
|
|
1787
|
+
render ? renderMiddleware(routes.middleware) : ""
|
|
1788
|
+
);
|
|
1789
|
+
}
|
|
1691
1790
|
virtualFiles.set(
|
|
1692
|
-
|
|
1693
|
-
render ?
|
|
1791
|
+
"@marko/run/router",
|
|
1792
|
+
render ? renderRouter(routes, routerOptions) : ""
|
|
1694
1793
|
);
|
|
1695
|
-
|
|
1696
|
-
|
|
1794
|
+
times.routesRender = performance.now() - renderStartTime;
|
|
1795
|
+
if (render) {
|
|
1796
|
+
await writeTypesFile(routes);
|
|
1797
|
+
if (!isBuild) {
|
|
1798
|
+
await ((_a = opts == null ? void 0 : opts.emitRoutes) == null ? void 0 : _a.call(opts, routes.list));
|
|
1799
|
+
}
|
|
1800
|
+
isRendered = true;
|
|
1801
|
+
}
|
|
1802
|
+
} catch (err) {
|
|
1803
|
+
if (isBuild) {
|
|
1804
|
+
throw err;
|
|
1805
|
+
}
|
|
1806
|
+
console.error(err);
|
|
1697
1807
|
virtualFiles.set(
|
|
1698
|
-
import_path2.default.posix.join(root, `${
|
|
1699
|
-
|
|
1808
|
+
import_path2.default.posix.join(root, `${markoRunFilePrefix}error.marko`),
|
|
1809
|
+
renderEntryTemplate(`${markoRunFilePrefix}error`, ["<dev-error-page>"])
|
|
1700
1810
|
);
|
|
1811
|
+
virtualFiles.set(
|
|
1812
|
+
"@marko/run/router",
|
|
1813
|
+
renderErrorRouter(err, routerOptions)
|
|
1814
|
+
);
|
|
1815
|
+
isRendered = true;
|
|
1701
1816
|
}
|
|
1702
|
-
virtualFiles.set(
|
|
1703
|
-
"@marko/run/router",
|
|
1704
|
-
render ? renderRouter(routes, {
|
|
1705
|
-
trailingSlashes: opts.trailingSlashes || "RedirectWithout"
|
|
1706
|
-
}) : ""
|
|
1707
|
-
);
|
|
1708
|
-
virtualFiles.set(
|
|
1709
|
-
import_path2.default.posix.join(root, `${markoRunFilePrefix}middleware.js`),
|
|
1710
|
-
render ? renderMiddleware(routes.middleware) : ""
|
|
1711
|
-
);
|
|
1712
|
-
}
|
|
1713
|
-
const buildVirtualFiles = single(async () => {
|
|
1714
|
-
const startTime = performance.now();
|
|
1715
|
-
routes = await buildRoutes(createFSWalker(resolvedRoutesDir), routesDir);
|
|
1716
|
-
times.routesBuild = performance.now() - startTime;
|
|
1717
|
-
await setVirtualFiles(false);
|
|
1718
1817
|
isStale = false;
|
|
1719
|
-
isRendered = false;
|
|
1720
|
-
});
|
|
1721
|
-
const renderVirtualFiles = single(async () => {
|
|
1722
|
-
const startTime = performance.now();
|
|
1723
|
-
await setVirtualFiles(true);
|
|
1724
|
-
await writeTypesFile();
|
|
1725
|
-
times.routesRender = performance.now() - startTime;
|
|
1726
|
-
isRendered = true;
|
|
1727
1818
|
});
|
|
1728
1819
|
return [
|
|
1729
1820
|
{
|
|
1730
1821
|
name: `${PLUGIN_NAME_PREFIX}:pre`,
|
|
1731
1822
|
enforce: "pre",
|
|
1732
1823
|
async config(config2, env) {
|
|
1733
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1824
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1734
1825
|
const externalPluginOptions = getExternalPluginOptions(config2);
|
|
1735
1826
|
if (externalPluginOptions) {
|
|
1736
1827
|
opts = (0, import_vite.mergeConfig)(opts, externalPluginOptions);
|
|
@@ -1756,6 +1847,11 @@ function markoRun(opts = {}) {
|
|
|
1756
1847
|
}
|
|
1757
1848
|
compiler ?? (compiler = await import(opts.compiler || "@marko/compiler"));
|
|
1758
1849
|
compiler.taglib.register("@marko/run", {
|
|
1850
|
+
"<dev-error-page>": {
|
|
1851
|
+
template: normalizePath(
|
|
1852
|
+
import_path2.default.resolve(__dirname, "../components/dev-error-page.marko")
|
|
1853
|
+
)
|
|
1854
|
+
},
|
|
1759
1855
|
"<*>": {
|
|
1760
1856
|
transform: import_path2.default.resolve(
|
|
1761
1857
|
__dirname,
|
|
@@ -1820,11 +1916,26 @@ function markoRun(opts = {}) {
|
|
|
1820
1916
|
noExternal: /@marko\/run/
|
|
1821
1917
|
},
|
|
1822
1918
|
build: {
|
|
1919
|
+
target: isBuild && !((_g = config2.build) == null ? void 0 : _g.target) ? (0, import_esbuild_plugin_browserslist.resolveToEsbuildTarget)(
|
|
1920
|
+
(0, import_browserslist.default)(void 0, {
|
|
1921
|
+
path: root
|
|
1922
|
+
}),
|
|
1923
|
+
{ printUnknownTargets: false }
|
|
1924
|
+
) : void 0,
|
|
1823
1925
|
emptyOutDir: isSSRBuild,
|
|
1926
|
+
// Avoid server & client deleting files from each other.
|
|
1824
1927
|
rollupOptions: {
|
|
1825
1928
|
output: rollupOutputOptions
|
|
1826
1929
|
}
|
|
1827
1930
|
},
|
|
1931
|
+
optimizeDeps: {
|
|
1932
|
+
entries: !((_h = config2.optimizeDeps) == null ? void 0 : _h.entries) ? [
|
|
1933
|
+
"src/pages/**/*+{page,layout}.marko",
|
|
1934
|
+
"!**/__snapshots__/**",
|
|
1935
|
+
`!**/__tests__/**`,
|
|
1936
|
+
`!**/coverage/**`
|
|
1937
|
+
] : void 0
|
|
1938
|
+
},
|
|
1828
1939
|
resolve: isBuild ? {
|
|
1829
1940
|
browserField: isSSRBuild ? false : void 0,
|
|
1830
1941
|
conditions: [
|
|
@@ -1909,40 +2020,38 @@ function markoRun(opts = {}) {
|
|
|
1909
2020
|
},
|
|
1910
2021
|
async resolveId(importee, importer) {
|
|
1911
2022
|
let resolved;
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
{ skipSelf: true }
|
|
1917
|
-
);
|
|
1918
|
-
} else if (importee.startsWith(virtualFilePrefix)) {
|
|
1919
|
-
importee = import_path2.default.resolve(
|
|
1920
|
-
root,
|
|
1921
|
-
importee.slice(virtualFilePrefix.length + 1)
|
|
1922
|
-
);
|
|
2023
|
+
let virtualFilePath;
|
|
2024
|
+
if (importee.startsWith(virtualFilePrefix)) {
|
|
2025
|
+
virtualFilePath = importee.slice(virtualFilePrefix.length + 1);
|
|
2026
|
+
importee = import_path2.default.resolve(root, virtualFilePath);
|
|
1923
2027
|
} else if (!isBuild && importer && (importer === devEntryFile || normalizePath(importer) === devEntryFilePosix) && importee.startsWith(`/${markoRunFilePrefix}`)) {
|
|
1924
2028
|
importee = import_path2.default.resolve(root, "." + importee);
|
|
1925
2029
|
}
|
|
1926
2030
|
importee = normalizePath(importee);
|
|
1927
2031
|
if (isStale) {
|
|
1928
|
-
await buildVirtualFiles();
|
|
2032
|
+
await buildVirtualFiles(false);
|
|
1929
2033
|
}
|
|
1930
2034
|
if (virtualFiles.has(importee)) {
|
|
1931
2035
|
resolved = importee;
|
|
2036
|
+
} else if (virtualFilePath) {
|
|
2037
|
+
const resolution = await this.resolve(
|
|
2038
|
+
import_path2.default.resolve(__dirname, "..", virtualFilePath),
|
|
2039
|
+
importer,
|
|
2040
|
+
{
|
|
2041
|
+
skipSelf: true
|
|
2042
|
+
}
|
|
2043
|
+
);
|
|
2044
|
+
return resolution;
|
|
1932
2045
|
}
|
|
1933
2046
|
return resolved || null;
|
|
1934
2047
|
},
|
|
1935
2048
|
async load(id) {
|
|
1936
|
-
var _a;
|
|
1937
2049
|
if (id.endsWith(serverEntryQuery)) {
|
|
1938
2050
|
id = id.slice(0, -serverEntryQuery.length);
|
|
1939
2051
|
}
|
|
1940
2052
|
if (virtualFiles.has(id)) {
|
|
1941
2053
|
if (!isRendered) {
|
|
1942
|
-
await
|
|
1943
|
-
if (!isBuild) {
|
|
1944
|
-
await ((_a = opts == null ? void 0 : opts.emitRoutes) == null ? void 0 : _a.call(opts, routes.list));
|
|
1945
|
-
}
|
|
2054
|
+
await buildVirtualFiles(true);
|
|
1946
2055
|
}
|
|
1947
2056
|
return virtualFiles.get(id);
|
|
1948
2057
|
}
|
|
@@ -1985,12 +2094,12 @@ function markoRun(opts = {}) {
|
|
|
1985
2094
|
}
|
|
1986
2095
|
await store.set(routeDataFilename, JSON.stringify(routeData));
|
|
1987
2096
|
await ((_a = opts == null ? void 0 : opts.emitRoutes) == null ? void 0 : _a.call(opts, routes.list));
|
|
1988
|
-
} else
|
|
2097
|
+
} else {
|
|
1989
2098
|
logRoutesTable(routes, bundle, options);
|
|
1990
2099
|
}
|
|
1991
2100
|
},
|
|
1992
2101
|
async closeBundle() {
|
|
1993
|
-
if (isBuild && !isSSRBuild && (adapter == null ? void 0 : adapter.buildEnd)) {
|
|
2102
|
+
if (isBuild && !isSSRBuild && (adapter == null ? void 0 : adapter.buildEnd) && routes) {
|
|
1994
2103
|
await adapter.buildEnd(
|
|
1995
2104
|
resolvedConfig,
|
|
1996
2105
|
routes.list,
|