@marko/run 0.4.4 → 0.4.6
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 +2 -2
- package/dist/adapter/index.cjs +183 -142
- package/dist/adapter/index.d.ts +1 -1
- package/dist/adapter/index.js +186 -143
- package/dist/adapter/middleware.cjs +16 -10
- package/dist/adapter/middleware.d.ts +0 -1
- package/dist/adapter/middleware.js +16 -10
- package/dist/adapter/polyfill.d.ts +0 -1
- package/dist/adapter/utils.d.ts +16 -0
- package/dist/cli/index.mjs +227 -220
- package/dist/runtime/internal.cjs +7 -5
- package/dist/runtime/internal.d.ts +1 -0
- package/dist/runtime/internal.js +5 -4
- package/dist/runtime/router.d.ts +2 -2
- package/dist/vite/index.cjs +226 -219
- package/dist/vite/index.js +227 -220
- package/dist/vite/utils/ast.d.ts +1 -0
- package/dist/vite/utils/server.d.ts +0 -3
- package/package.json +30 -30
- package/dist/components/src-attributes-transformer.cjs +0 -122
package/dist/vite/index.js
CHANGED
|
@@ -1,27 +1,13 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
return value;
|
|
6
|
-
};
|
|
7
|
-
var __accessCheck = (obj, member, msg) => {
|
|
8
|
-
if (!member.has(obj))
|
|
9
|
-
throw TypeError("Cannot " + msg);
|
|
10
|
-
};
|
|
11
|
-
var __privateGet = (obj, member, getter) => {
|
|
12
|
-
__accessCheck(obj, member, "read from private field");
|
|
13
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
14
|
-
};
|
|
15
|
-
var __privateAdd = (obj, member, value) => {
|
|
16
|
-
if (member.has(obj))
|
|
17
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
18
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
19
|
-
};
|
|
20
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
21
|
-
__accessCheck(obj, member, "write to private field");
|
|
22
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
23
|
-
return value;
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
24
4
|
};
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
9
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
25
11
|
|
|
26
12
|
// src/vite/plugin.ts
|
|
27
13
|
import path3 from "path";
|
|
@@ -30,7 +16,7 @@ import { glob } from "glob";
|
|
|
30
16
|
import { fileURLToPath } from "url";
|
|
31
17
|
import browserslist from "browserslist";
|
|
32
18
|
import { resolveToEsbuildTarget } from "esbuild-plugin-browserslist";
|
|
33
|
-
import { mergeConfig } from "vite";
|
|
19
|
+
import { buildErrorMessage, mergeConfig } from "vite";
|
|
34
20
|
import markoVitePlugin from "@marko/vite";
|
|
35
21
|
|
|
36
22
|
// src/vite/constants.ts
|
|
@@ -52,8 +38,8 @@ var RoutableFileTypes = {
|
|
|
52
38
|
var _dirs, _pathlessDirs;
|
|
53
39
|
var _VDir = class _VDir {
|
|
54
40
|
constructor(parent, segment, source) {
|
|
55
|
-
__privateAdd(this, _dirs
|
|
56
|
-
__privateAdd(this, _pathlessDirs
|
|
41
|
+
__privateAdd(this, _dirs);
|
|
42
|
+
__privateAdd(this, _pathlessDirs);
|
|
57
43
|
__publicField(this, "parent");
|
|
58
44
|
__publicField(this, "source");
|
|
59
45
|
__publicField(this, "path");
|
|
@@ -193,8 +179,7 @@ var VDir = _VDir;
|
|
|
193
179
|
|
|
194
180
|
// src/vite/routes/parse.ts
|
|
195
181
|
function parseFlatRoute(pattern) {
|
|
196
|
-
if (!pattern)
|
|
197
|
-
throw new Error("Empty pattern");
|
|
182
|
+
if (!pattern) throw new Error("Empty pattern");
|
|
198
183
|
const len = pattern.length;
|
|
199
184
|
let i = 0;
|
|
200
185
|
return parse2([
|
|
@@ -900,45 +885,6 @@ function writeRouteEntryHandler(writer, route, verb) {
|
|
|
900
885
|
continuations.join();
|
|
901
886
|
writer.writeBlockEnd("}");
|
|
902
887
|
}
|
|
903
|
-
function renderErrorRouter(error, options = {
|
|
904
|
-
trailingSlashes: "RedirectWithout"
|
|
905
|
-
}) {
|
|
906
|
-
const writer = createStringWriter();
|
|
907
|
-
writer.write(`
|
|
908
|
-
// @marko/run/router
|
|
909
|
-
import { createContext } from '${virtualFilePrefix}/runtime/internal';
|
|
910
|
-
import errorPage from '${virtualFilePrefix}/${markoRunFilePrefix}error.marko${serverEntryQuery}';
|
|
911
|
-
|
|
912
|
-
const error = new Error(\`${error.message}\`);
|
|
913
|
-
error.name = '${error.name}';`);
|
|
914
|
-
if (error.stack) {
|
|
915
|
-
writer.write(`
|
|
916
|
-
error.stack = \`${error.stack}\`;`);
|
|
917
|
-
}
|
|
918
|
-
writer.write(`
|
|
919
|
-
|
|
920
|
-
globalThis.__marko_run__ = { match, fetch, invoke };
|
|
921
|
-
|
|
922
|
-
export function match() {
|
|
923
|
-
return { handler: errorPage, params: {}, meta: {}, path: '/*' }; // /$$
|
|
924
|
-
}
|
|
925
|
-
|
|
926
|
-
export async function invoke(route, request, platform, url) {
|
|
927
|
-
const [context, buildInput] = createContext(route, request, platform, url);
|
|
928
|
-
if (context.request.headers.get('Accept')?.includes('text/html')) {
|
|
929
|
-
return new Response(errorPage.stream(buildInput({ error })), {
|
|
930
|
-
status: 500,
|
|
931
|
-
headers: { "content-type": "text/html;charset=UTF-8" },
|
|
932
|
-
});
|
|
933
|
-
}
|
|
934
|
-
return new Response(error, {
|
|
935
|
-
status: 500,
|
|
936
|
-
});
|
|
937
|
-
}
|
|
938
|
-
`);
|
|
939
|
-
renderFetch(writer, options);
|
|
940
|
-
return writer.end();
|
|
941
|
-
}
|
|
942
888
|
function renderRouter(routes, options = {
|
|
943
889
|
trailingSlashes: "RedirectWithout"
|
|
944
890
|
}) {
|
|
@@ -1071,15 +1017,7 @@ export async function fetch(request, platform) {
|
|
|
1071
1017
|
return await invoke(route, request, platform, url);
|
|
1072
1018
|
} catch (error) {
|
|
1073
1019
|
if (import.meta.env.DEV) {
|
|
1074
|
-
|
|
1075
|
-
if (error.cause) {
|
|
1076
|
-
body = error.cause.stack || error.cause.message || error.cause;
|
|
1077
|
-
} else {
|
|
1078
|
-
body = error.stack || error.message || "Internal Server Error";
|
|
1079
|
-
}
|
|
1080
|
-
return new Response(body, {
|
|
1081
|
-
status: 500
|
|
1082
|
-
});
|
|
1020
|
+
throw error;
|
|
1083
1021
|
}
|
|
1084
1022
|
return new Response(null, {
|
|
1085
1023
|
status: 500
|
|
@@ -1519,6 +1457,29 @@ function getExportIdentifiers(astProgramNode) {
|
|
|
1519
1457
|
}
|
|
1520
1458
|
return result;
|
|
1521
1459
|
}
|
|
1460
|
+
function getViteSSRExportIdentifiers(astProgramNode, exportObjectName = "__vite_ssr_exports__") {
|
|
1461
|
+
const result = [];
|
|
1462
|
+
if (t.isProgram(astProgramNode)) {
|
|
1463
|
+
for (const node of astProgramNode.body) {
|
|
1464
|
+
if (t.isExpressionStatement(node)) {
|
|
1465
|
+
if (t.isAssignmentExpression(node.expression) && t.isMemberExpression(node.expression.left)) {
|
|
1466
|
+
const { object, property } = node.expression.left;
|
|
1467
|
+
if (t.isIdentifier(object) && object.name === exportObjectName && t.isIdentifier(property)) {
|
|
1468
|
+
result.push(property.name);
|
|
1469
|
+
}
|
|
1470
|
+
} else if (t.isCallExpression(node.expression) && t.isMemberExpression(node.expression.callee)) {
|
|
1471
|
+
const {
|
|
1472
|
+
arguments: [arg0, arg1]
|
|
1473
|
+
} = node.expression;
|
|
1474
|
+
if (t.isIdentifier(arg0) && arg0.name === exportObjectName && (t.isStringLiteral(arg1) || "value" in arg1 && typeof arg1.value === "string")) {
|
|
1475
|
+
result.push(arg1.value);
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
return result;
|
|
1482
|
+
}
|
|
1522
1483
|
|
|
1523
1484
|
// src/vite/utils/log.ts
|
|
1524
1485
|
import zlib from "node:zlib";
|
|
@@ -1639,12 +1600,9 @@ function prettySize([bytes, compBytes]) {
|
|
|
1639
1600
|
const [size, prefix] = format(bytes, { decimals: 1 }).split(/\s+/);
|
|
1640
1601
|
const compSize = format(compBytes, { decimals: 1, prefix, unit: "B" });
|
|
1641
1602
|
let str = kleur.white(size) + kleur.gray("/");
|
|
1642
|
-
if (compBytes < 20 * 1e3)
|
|
1643
|
-
|
|
1644
|
-
else
|
|
1645
|
-
str += kleur.yellow(compSize);
|
|
1646
|
-
else
|
|
1647
|
-
str += kleur.bold(kleur.red(compSize));
|
|
1603
|
+
if (compBytes < 20 * 1e3) str += kleur.green(compSize);
|
|
1604
|
+
else if (compBytes < 50 * 1e3) str += kleur.yellow(compSize);
|
|
1605
|
+
else str += kleur.bold(kleur.red(compSize));
|
|
1648
1606
|
return str;
|
|
1649
1607
|
}
|
|
1650
1608
|
function prettyPath(path4) {
|
|
@@ -1714,6 +1672,31 @@ process.once("beforeExit", (code) => {
|
|
|
1714
1672
|
}
|
|
1715
1673
|
});
|
|
1716
1674
|
|
|
1675
|
+
// src/adapter/utils.ts
|
|
1676
|
+
import supporsColor from "supports-color";
|
|
1677
|
+
import kleur2 from "kleur";
|
|
1678
|
+
function stripAnsi(string) {
|
|
1679
|
+
return string.replace(
|
|
1680
|
+
/([\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><])/g,
|
|
1681
|
+
""
|
|
1682
|
+
);
|
|
1683
|
+
}
|
|
1684
|
+
function cleanStack(stack) {
|
|
1685
|
+
return stack.split(/\n/).filter((l) => /^\s*at/.test(l)).join("\n");
|
|
1686
|
+
}
|
|
1687
|
+
function prepareError(err) {
|
|
1688
|
+
var _a;
|
|
1689
|
+
return {
|
|
1690
|
+
message: stripAnsi(err.message),
|
|
1691
|
+
stack: stripAnsi(cleanStack(err.stack || "")),
|
|
1692
|
+
id: err.id,
|
|
1693
|
+
frame: stripAnsi(err.frame || ""),
|
|
1694
|
+
plugin: err.plugin,
|
|
1695
|
+
pluginCode: (_a = err.pluginCode) == null ? void 0 : _a.toString(),
|
|
1696
|
+
loc: err.loc
|
|
1697
|
+
};
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1717
1700
|
// src/vite/plugin.ts
|
|
1718
1701
|
var debug = createDebug("@marko/run");
|
|
1719
1702
|
var __dirname = path3.dirname(fileURLToPath(import.meta.url));
|
|
@@ -1737,11 +1720,10 @@ function markoRun(opts = {}) {
|
|
|
1737
1720
|
let devServer;
|
|
1738
1721
|
let routes;
|
|
1739
1722
|
let routeData;
|
|
1740
|
-
let
|
|
1723
|
+
let getExportsFromFile;
|
|
1741
1724
|
let resolvedConfig;
|
|
1742
1725
|
let typesFile;
|
|
1743
|
-
let
|
|
1744
|
-
let isRendered = false;
|
|
1726
|
+
let seenErrors = /* @__PURE__ */ new Set();
|
|
1745
1727
|
const virtualFiles = /* @__PURE__ */ new Map();
|
|
1746
1728
|
let times = {
|
|
1747
1729
|
routesBuild: 0,
|
|
@@ -1764,97 +1746,134 @@ function markoRun(opts = {}) {
|
|
|
1764
1746
|
}
|
|
1765
1747
|
}
|
|
1766
1748
|
}
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
};
|
|
1772
|
-
try {
|
|
1773
|
-
if (isStale) {
|
|
1749
|
+
let buildVirtualFilesResult;
|
|
1750
|
+
function buildVirtualFiles() {
|
|
1751
|
+
return buildVirtualFilesResult ?? (buildVirtualFilesResult = new Promise(async (resolve, reject) => {
|
|
1752
|
+
try {
|
|
1774
1753
|
virtualFiles.clear();
|
|
1775
|
-
isRendered = false;
|
|
1776
|
-
const buildStartTime = performance.now();
|
|
1777
1754
|
routes = await buildRoutes({
|
|
1778
1755
|
walker: createFSWalker(resolvedRoutesDir),
|
|
1779
1756
|
importPrefix: routesDir
|
|
1780
1757
|
});
|
|
1781
|
-
times.routesBuild = performance.now() - buildStartTime;
|
|
1782
1758
|
if (!routes.list.length) {
|
|
1783
1759
|
throw new Error("No routes generated");
|
|
1784
1760
|
}
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
if (!route.handler.verbs.length) {
|
|
1791
|
-
throw new Error(
|
|
1792
|
-
`Did not find any valid exports in middleware entry file:'${route.handler.filePath}' - expected to find any of 'GET', 'POST', 'PUT' or 'DELETE'`
|
|
1761
|
+
for (const route of routes.list) {
|
|
1762
|
+
if (route.page) {
|
|
1763
|
+
virtualFiles.set(
|
|
1764
|
+
path3.posix.join(root, `${route.entryName}.marko`),
|
|
1765
|
+
""
|
|
1793
1766
|
);
|
|
1794
1767
|
}
|
|
1768
|
+
virtualFiles.set(path3.posix.join(root, `${route.entryName}.js`), "");
|
|
1795
1769
|
}
|
|
1796
|
-
|
|
1770
|
+
for (const route of Object.values(routes.special)) {
|
|
1797
1771
|
virtualFiles.set(
|
|
1798
1772
|
path3.posix.join(root, `${route.entryName}.marko`),
|
|
1799
|
-
|
|
1773
|
+
""
|
|
1800
1774
|
);
|
|
1801
1775
|
}
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
virtualFiles.set(
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
);
|
|
1776
|
+
if (routes.middleware.length) {
|
|
1777
|
+
virtualFiles.set(
|
|
1778
|
+
path3.posix.join(root, `${markoRunFilePrefix}middleware.js`),
|
|
1779
|
+
""
|
|
1780
|
+
);
|
|
1781
|
+
}
|
|
1782
|
+
virtualFiles.set("@marko/run/router", "");
|
|
1783
|
+
resolve(routes);
|
|
1784
|
+
} catch (err) {
|
|
1785
|
+
reject(err);
|
|
1812
1786
|
}
|
|
1813
|
-
|
|
1787
|
+
}));
|
|
1788
|
+
}
|
|
1789
|
+
let renderVirtualFilesResult;
|
|
1790
|
+
function renderVirtualFiles(context) {
|
|
1791
|
+
return renderVirtualFilesResult ?? (renderVirtualFilesResult = new Promise(async (resolve) => {
|
|
1792
|
+
var _a;
|
|
1793
|
+
const routerOptions = {
|
|
1794
|
+
trailingSlashes: opts.trailingSlashes || "RedirectWithout"
|
|
1795
|
+
};
|
|
1796
|
+
try {
|
|
1797
|
+
const routes2 = await buildVirtualFiles();
|
|
1798
|
+
for (const route of routes2.list) {
|
|
1799
|
+
if (route.handler) {
|
|
1800
|
+
const exports = await getExportsFromFile(
|
|
1801
|
+
context,
|
|
1802
|
+
route.handler.filePath
|
|
1803
|
+
);
|
|
1804
|
+
route.handler.verbs = [];
|
|
1805
|
+
for (const name of exports) {
|
|
1806
|
+
const verb = name.toLowerCase();
|
|
1807
|
+
if (name === verb.toUpperCase() && httpVerbs.includes(verb)) {
|
|
1808
|
+
route.handler.verbs.push(verb);
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
if (!route.handler.verbs.length) {
|
|
1812
|
+
context.warn(
|
|
1813
|
+
`Did not find any http verb exports in handler '${path3.relative(root, route.handler.filePath)}' - expected ${httpVerbs.map((v) => v.toUpperCase()).join(", ")}`
|
|
1814
|
+
);
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
if (route.page) {
|
|
1818
|
+
virtualFiles.set(
|
|
1819
|
+
path3.posix.join(root, `${route.entryName}.marko`),
|
|
1820
|
+
renderRouteTemplate(route)
|
|
1821
|
+
);
|
|
1822
|
+
}
|
|
1823
|
+
virtualFiles.set(
|
|
1824
|
+
path3.posix.join(root, `${route.entryName}.js`),
|
|
1825
|
+
renderRouteEntry(route)
|
|
1826
|
+
);
|
|
1827
|
+
}
|
|
1828
|
+
for (const route of Object.values(routes2.special)) {
|
|
1829
|
+
virtualFiles.set(
|
|
1830
|
+
path3.posix.join(root, `${route.entryName}.marko`),
|
|
1831
|
+
renderRouteTemplate(route)
|
|
1832
|
+
);
|
|
1833
|
+
}
|
|
1834
|
+
if (routes2.middleware.length) {
|
|
1835
|
+
for (const middleware of routes2.middleware) {
|
|
1836
|
+
if (!(await getExportsFromFile(context, middleware.filePath)).includes("default")) {
|
|
1837
|
+
context.warn(
|
|
1838
|
+
`Did not find a default export in middleware '${path3.relative(root, middleware.filePath)}'`
|
|
1839
|
+
);
|
|
1840
|
+
}
|
|
1841
|
+
}
|
|
1842
|
+
virtualFiles.set(
|
|
1843
|
+
path3.posix.join(root, `${markoRunFilePrefix}middleware.js`),
|
|
1844
|
+
renderMiddleware(routes2.middleware)
|
|
1845
|
+
);
|
|
1846
|
+
}
|
|
1814
1847
|
virtualFiles.set(
|
|
1815
|
-
|
|
1816
|
-
|
|
1848
|
+
"@marko/run/router",
|
|
1849
|
+
renderRouter(routes2, routerOptions)
|
|
1817
1850
|
);
|
|
1818
|
-
|
|
1819
|
-
virtualFiles.set(
|
|
1820
|
-
"@marko/run/router",
|
|
1821
|
-
render ? renderRouter(routes, routerOptions) : ""
|
|
1822
|
-
);
|
|
1823
|
-
times.routesRender = performance.now() - renderStartTime;
|
|
1824
|
-
if (render) {
|
|
1825
|
-
await writeTypesFile(routes);
|
|
1851
|
+
await writeTypesFile(routes2);
|
|
1826
1852
|
if (adapter == null ? void 0 : adapter.routesGenerated) {
|
|
1827
1853
|
await adapter.routesGenerated(
|
|
1828
|
-
|
|
1854
|
+
routes2,
|
|
1829
1855
|
new Map(virtualFiles.entries()),
|
|
1830
1856
|
{
|
|
1831
1857
|
buildTime: times.routesBuild,
|
|
1832
1858
|
renderTime: times.routesRender
|
|
1833
1859
|
}
|
|
1834
1860
|
);
|
|
1861
|
+
if (!isBuild) {
|
|
1862
|
+
await ((_a = opts == null ? void 0 : opts.emitRoutes) == null ? void 0 : _a.call(opts, routes2.list));
|
|
1863
|
+
}
|
|
1835
1864
|
}
|
|
1836
|
-
|
|
1837
|
-
|
|
1865
|
+
} catch (err) {
|
|
1866
|
+
if (isBuild) {
|
|
1867
|
+
throw err;
|
|
1838
1868
|
}
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
throw err;
|
|
1869
|
+
virtualFiles.set(
|
|
1870
|
+
"@marko/run/router",
|
|
1871
|
+
`throw ${JSON.stringify(prepareError(err))}`
|
|
1872
|
+
);
|
|
1844
1873
|
}
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
renderEntryTemplate(`${markoRunFilePrefix}error`, ["<dev-error-page>"])
|
|
1849
|
-
);
|
|
1850
|
-
virtualFiles.set(
|
|
1851
|
-
"@marko/run/router",
|
|
1852
|
-
renderErrorRouter(err, routerOptions)
|
|
1853
|
-
);
|
|
1854
|
-
isRendered = true;
|
|
1855
|
-
}
|
|
1856
|
-
isStale = false;
|
|
1857
|
-
});
|
|
1874
|
+
resolve();
|
|
1875
|
+
}));
|
|
1876
|
+
}
|
|
1858
1877
|
return [
|
|
1859
1878
|
{
|
|
1860
1879
|
name: `${PLUGIN_NAME_PREFIX}:pre`,
|
|
@@ -1890,12 +1909,6 @@ function markoRun(opts = {}) {
|
|
|
1890
1909
|
template: normalizePath(
|
|
1891
1910
|
path3.resolve(__dirname, "../components/dev-error-page.marko")
|
|
1892
1911
|
)
|
|
1893
|
-
},
|
|
1894
|
-
"<*>": {
|
|
1895
|
-
transform: path3.resolve(
|
|
1896
|
-
__dirname,
|
|
1897
|
-
"../components/src-attributes-transformer.cjs"
|
|
1898
|
-
)
|
|
1899
1912
|
}
|
|
1900
1913
|
});
|
|
1901
1914
|
routesDir = opts.routesDir || "src/routes";
|
|
@@ -1980,7 +1993,12 @@ function markoRun(opts = {}) {
|
|
|
1980
1993
|
] : void 0
|
|
1981
1994
|
},
|
|
1982
1995
|
resolve: isBuild ? {
|
|
1983
|
-
mainFields: (isSSRBuild ? [] : ["browser"]).concat([
|
|
1996
|
+
mainFields: (isSSRBuild ? [] : ["browser"]).concat([
|
|
1997
|
+
"module",
|
|
1998
|
+
"jsnext:main",
|
|
1999
|
+
"jsnext",
|
|
2000
|
+
"main"
|
|
2001
|
+
]),
|
|
1984
2002
|
conditions: [
|
|
1985
2003
|
isSSRBuild ? "node" : "browser",
|
|
1986
2004
|
"import",
|
|
@@ -2015,29 +2033,44 @@ function markoRun(opts = {}) {
|
|
|
2015
2033
|
} else {
|
|
2016
2034
|
ssrEntryFiles = [];
|
|
2017
2035
|
}
|
|
2036
|
+
const baseError = config2.logger.error;
|
|
2037
|
+
config2.logger.error = function(msg, options) {
|
|
2038
|
+
var _a;
|
|
2039
|
+
if (!((_a = options == null ? void 0 : options.error) == null ? void 0 : _a.message)) {
|
|
2040
|
+
baseError.call(this, msg, options);
|
|
2041
|
+
} else if (!seenErrors.has(options.error.message)) {
|
|
2042
|
+
seenErrors.add(options.error.message);
|
|
2043
|
+
console.error(buildErrorMessage(options.error));
|
|
2044
|
+
}
|
|
2045
|
+
};
|
|
2018
2046
|
},
|
|
2019
2047
|
configureServer(_server) {
|
|
2020
2048
|
devServer = _server;
|
|
2021
2049
|
devServer.watcher.on("all", async (type, filename) => {
|
|
2022
|
-
|
|
2050
|
+
seenErrors.clear();
|
|
2051
|
+
const routableFileType = matchRoutableFile(
|
|
2052
|
+
path3.parse(filename).base
|
|
2053
|
+
);
|
|
2023
2054
|
if (filename.startsWith(resolvedRoutesDir) && routableFileType) {
|
|
2024
|
-
if (type === "add") {
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
if (
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2055
|
+
if (type === "add" || type === "unlink" || type === "change" && (routableFileType === RoutableFileTypes.Handler || routableFileType === RoutableFileTypes.Middleware)) {
|
|
2056
|
+
buildVirtualFilesResult = void 0;
|
|
2057
|
+
renderVirtualFilesResult = void 0;
|
|
2058
|
+
const module = devServer.moduleGraph.getModuleById(filename);
|
|
2059
|
+
const importers = module && getImporters(module, filename);
|
|
2060
|
+
if (importers == null ? void 0 : importers.size) {
|
|
2061
|
+
for (const file of importers) {
|
|
2062
|
+
devServer.watcher.emit("change", file);
|
|
2063
|
+
}
|
|
2064
|
+
} else {
|
|
2065
|
+
for (const file of virtualFiles.keys()) {
|
|
2066
|
+
if (!file.endsWith(".marko")) {
|
|
2067
|
+
devServer.watcher.emit("change", file);
|
|
2068
|
+
}
|
|
2069
|
+
}
|
|
2037
2070
|
}
|
|
2038
2071
|
}
|
|
2039
2072
|
}
|
|
2040
|
-
});
|
|
2073
|
+
}).unwatch(typesDir + "/*");
|
|
2041
2074
|
},
|
|
2042
2075
|
async buildStart(_options) {
|
|
2043
2076
|
if (isBuild && !isSSRBuild) {
|
|
@@ -2053,10 +2086,10 @@ function markoRun(opts = {}) {
|
|
|
2053
2086
|
for (const { key, code } of routeData.files) {
|
|
2054
2087
|
virtualFiles.set(key, code);
|
|
2055
2088
|
}
|
|
2056
|
-
|
|
2057
|
-
|
|
2089
|
+
buildVirtualFilesResult = Promise.resolve(routes);
|
|
2090
|
+
renderVirtualFilesResult = Promise.resolve();
|
|
2058
2091
|
} else {
|
|
2059
|
-
|
|
2092
|
+
getExportsFromFile = isBuild ? getExportsFromFileBuild : getExportsFromFileDev.bind(null, devServer);
|
|
2060
2093
|
}
|
|
2061
2094
|
},
|
|
2062
2095
|
async resolveId(importee, importer) {
|
|
@@ -2069,8 +2102,8 @@ function markoRun(opts = {}) {
|
|
|
2069
2102
|
importee = path3.resolve(root, "." + importee);
|
|
2070
2103
|
}
|
|
2071
2104
|
importee = normalizePath(importee);
|
|
2072
|
-
if (
|
|
2073
|
-
await buildVirtualFiles(
|
|
2105
|
+
if (!buildVirtualFilesResult) {
|
|
2106
|
+
await buildVirtualFiles();
|
|
2074
2107
|
}
|
|
2075
2108
|
if (virtualFiles.has(importee)) {
|
|
2076
2109
|
resolved = importee;
|
|
@@ -2087,11 +2120,13 @@ function markoRun(opts = {}) {
|
|
|
2087
2120
|
if (id.endsWith(serverEntryQuery)) {
|
|
2088
2121
|
id = id.slice(0, -serverEntryQuery.length);
|
|
2089
2122
|
}
|
|
2123
|
+
if (!renderVirtualFilesResult) {
|
|
2124
|
+
await renderVirtualFiles(this);
|
|
2125
|
+
}
|
|
2090
2126
|
if (virtualFiles.has(id)) {
|
|
2091
|
-
if (isStale || !isRendered) {
|
|
2092
|
-
await buildVirtualFiles(true);
|
|
2093
|
-
}
|
|
2094
2127
|
return virtualFiles.get(id);
|
|
2128
|
+
} else if (path3.basename(id).startsWith(markoRunFilePrefix) && /^\.(js|marko)$/.test(path3.extname(id))) {
|
|
2129
|
+
return "";
|
|
2095
2130
|
}
|
|
2096
2131
|
}
|
|
2097
2132
|
},
|
|
@@ -2149,57 +2184,20 @@ function markoRun(opts = {}) {
|
|
|
2149
2184
|
}
|
|
2150
2185
|
];
|
|
2151
2186
|
}
|
|
2152
|
-
async function
|
|
2153
|
-
const verbs = [];
|
|
2187
|
+
async function getExportsFromFileBuild(context, filePath) {
|
|
2154
2188
|
const result = await context.load({
|
|
2155
2189
|
id: filePath,
|
|
2156
2190
|
resolveDependencies: false
|
|
2157
2191
|
});
|
|
2158
|
-
|
|
2159
|
-
const exportIds = getExportIdentifiers(result.ast);
|
|
2160
|
-
for (const id of exportIds) {
|
|
2161
|
-
const verb = id.toLowerCase();
|
|
2162
|
-
if (id === verb.toUpperCase() && httpVerbs.includes(verb)) {
|
|
2163
|
-
verbs.push(verb);
|
|
2164
|
-
}
|
|
2165
|
-
}
|
|
2166
|
-
}
|
|
2167
|
-
return verbs;
|
|
2192
|
+
return result ? getExportIdentifiers(result.ast) : [];
|
|
2168
2193
|
}
|
|
2169
|
-
async function
|
|
2170
|
-
const verbs = [];
|
|
2194
|
+
async function getExportsFromFileDev(devServer, context, filePath) {
|
|
2171
2195
|
const result = await devServer.transformRequest(filePath, { ssr: true });
|
|
2172
|
-
if (result
|
|
2173
|
-
const
|
|
2174
|
-
|
|
2175
|
-
while (match) {
|
|
2176
|
-
const id = match[1];
|
|
2177
|
-
const verb = id.toLowerCase();
|
|
2178
|
-
if (httpVerbs.includes(verb)) {
|
|
2179
|
-
if (id === verb.toUpperCase()) {
|
|
2180
|
-
verbs.push(verb);
|
|
2181
|
-
} else {
|
|
2182
|
-
console.warn(
|
|
2183
|
-
`Found export '${id}' in handler ${filePath} which is close to '${verb.toUpperCase()}'. Exported handlers need to be uppercase: GET, POST, PUT or DELETE.`
|
|
2184
|
-
);
|
|
2185
|
-
}
|
|
2186
|
-
}
|
|
2187
|
-
match = verbMatchReg.exec(result.code);
|
|
2188
|
-
}
|
|
2196
|
+
if (result) {
|
|
2197
|
+
const ast = context.parse(result.code);
|
|
2198
|
+
return getViteSSRExportIdentifiers(ast);
|
|
2189
2199
|
}
|
|
2190
|
-
return
|
|
2191
|
-
}
|
|
2192
|
-
function single(fn) {
|
|
2193
|
-
let promise;
|
|
2194
|
-
return async (...args) => {
|
|
2195
|
-
if (promise) {
|
|
2196
|
-
return promise;
|
|
2197
|
-
}
|
|
2198
|
-
promise = fn(...args);
|
|
2199
|
-
const result = await promise;
|
|
2200
|
-
promise = void 0;
|
|
2201
|
-
return result;
|
|
2202
|
-
};
|
|
2200
|
+
return [];
|
|
2203
2201
|
}
|
|
2204
2202
|
async function globFileExists(root, pattern) {
|
|
2205
2203
|
return (await glob(pattern, { root })).length > 0;
|
|
@@ -2252,6 +2250,15 @@ function getEntryFileName(file) {
|
|
|
2252
2250
|
const match = file && markoEntryFileRegex.exec(file);
|
|
2253
2251
|
return match ? match[2] || "index" : void 0;
|
|
2254
2252
|
}
|
|
2253
|
+
function getImporters(module, fileName, seen = /* @__PURE__ */ new Set()) {
|
|
2254
|
+
for (const importer of module.importers) {
|
|
2255
|
+
if (importer.id && !seen.has(importer.id)) {
|
|
2256
|
+
seen.add(importer.id);
|
|
2257
|
+
getImporters(importer, fileName, seen);
|
|
2258
|
+
}
|
|
2259
|
+
}
|
|
2260
|
+
return seen;
|
|
2261
|
+
}
|
|
2255
2262
|
|
|
2256
2263
|
// src/vite/utils/server.ts
|
|
2257
2264
|
import net from "net";
|
package/dist/vite/utils/ast.d.ts
CHANGED