@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/runtime/router.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const fetch: <TPlatform extends import("./types").Platform = import("./types").Platform>(request: Request, platform: TPlatform) =>
|
|
1
|
+
export declare const fetch: <TPlatform extends import("./types").Platform = import("./types").Platform>(request: Request, platform: TPlatform) => ReturnType<import("./types").Fetch<TPlatform>>;
|
|
2
2
|
export declare const match: import("./types").Match;
|
|
3
|
-
export declare const invoke: <TPlatform extends import("./types").Platform = import("./types").Platform>(route: import("./types").RouteWithHandler<import("./types").ParamsObject, unknown, string> | null, request: Request, platform: TPlatform) =>
|
|
3
|
+
export declare const invoke: <TPlatform extends import("./types").Platform = import("./types").Platform>(route: import("./types").RouteWithHandler<import("./types").ParamsObject, unknown, string> | null, request: Request, platform: TPlatform) => ReturnType<import("./types").Invoke<TPlatform>>;
|
package/dist/vite/index.cjs
CHANGED
|
@@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __typeError = (msg) => {
|
|
9
|
+
throw TypeError(msg);
|
|
10
|
+
};
|
|
8
11
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
12
|
var __export = (target, all) => {
|
|
10
13
|
for (var name in all)
|
|
@@ -27,28 +30,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
30
|
mod
|
|
28
31
|
));
|
|
29
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
-
var __publicField = (obj, key, value) =>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
var
|
|
35
|
-
if (!member.has(obj))
|
|
36
|
-
throw TypeError("Cannot " + msg);
|
|
37
|
-
};
|
|
38
|
-
var __privateGet = (obj, member, getter) => {
|
|
39
|
-
__accessCheck(obj, member, "read from private field");
|
|
40
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
41
|
-
};
|
|
42
|
-
var __privateAdd = (obj, member, value) => {
|
|
43
|
-
if (member.has(obj))
|
|
44
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
45
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
46
|
-
};
|
|
47
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
48
|
-
__accessCheck(obj, member, "write to private field");
|
|
49
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
50
|
-
return value;
|
|
51
|
-
};
|
|
33
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
34
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
35
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
36
|
+
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);
|
|
37
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
52
38
|
|
|
53
39
|
// src/vite/index.ts
|
|
54
40
|
var vite_exports = {};
|
|
@@ -97,8 +83,8 @@ var RoutableFileTypes = {
|
|
|
97
83
|
var _dirs, _pathlessDirs;
|
|
98
84
|
var _VDir = class _VDir {
|
|
99
85
|
constructor(parent, segment, source) {
|
|
100
|
-
__privateAdd(this, _dirs
|
|
101
|
-
__privateAdd(this, _pathlessDirs
|
|
86
|
+
__privateAdd(this, _dirs);
|
|
87
|
+
__privateAdd(this, _pathlessDirs);
|
|
102
88
|
__publicField(this, "parent");
|
|
103
89
|
__publicField(this, "source");
|
|
104
90
|
__publicField(this, "path");
|
|
@@ -238,8 +224,7 @@ var VDir = _VDir;
|
|
|
238
224
|
|
|
239
225
|
// src/vite/routes/parse.ts
|
|
240
226
|
function parseFlatRoute(pattern) {
|
|
241
|
-
if (!pattern)
|
|
242
|
-
throw new Error("Empty pattern");
|
|
227
|
+
if (!pattern) throw new Error("Empty pattern");
|
|
243
228
|
const len = pattern.length;
|
|
244
229
|
let i = 0;
|
|
245
230
|
return parse2([
|
|
@@ -945,45 +930,6 @@ function writeRouteEntryHandler(writer, route, verb) {
|
|
|
945
930
|
continuations.join();
|
|
946
931
|
writer.writeBlockEnd("}");
|
|
947
932
|
}
|
|
948
|
-
function renderErrorRouter(error, options = {
|
|
949
|
-
trailingSlashes: "RedirectWithout"
|
|
950
|
-
}) {
|
|
951
|
-
const writer = createStringWriter();
|
|
952
|
-
writer.write(`
|
|
953
|
-
// @marko/run/router
|
|
954
|
-
import { createContext } from '${virtualFilePrefix}/runtime/internal';
|
|
955
|
-
import errorPage from '${virtualFilePrefix}/${markoRunFilePrefix}error.marko${serverEntryQuery}';
|
|
956
|
-
|
|
957
|
-
const error = new Error(\`${error.message}\`);
|
|
958
|
-
error.name = '${error.name}';`);
|
|
959
|
-
if (error.stack) {
|
|
960
|
-
writer.write(`
|
|
961
|
-
error.stack = \`${error.stack}\`;`);
|
|
962
|
-
}
|
|
963
|
-
writer.write(`
|
|
964
|
-
|
|
965
|
-
globalThis.__marko_run__ = { match, fetch, invoke };
|
|
966
|
-
|
|
967
|
-
export function match() {
|
|
968
|
-
return { handler: errorPage, params: {}, meta: {}, path: '/*' }; // /$$
|
|
969
|
-
}
|
|
970
|
-
|
|
971
|
-
export async function invoke(route, request, platform, url) {
|
|
972
|
-
const [context, buildInput] = createContext(route, request, platform, url);
|
|
973
|
-
if (context.request.headers.get('Accept')?.includes('text/html')) {
|
|
974
|
-
return new Response(errorPage.stream(buildInput({ error })), {
|
|
975
|
-
status: 500,
|
|
976
|
-
headers: { "content-type": "text/html;charset=UTF-8" },
|
|
977
|
-
});
|
|
978
|
-
}
|
|
979
|
-
return new Response(error, {
|
|
980
|
-
status: 500,
|
|
981
|
-
});
|
|
982
|
-
}
|
|
983
|
-
`);
|
|
984
|
-
renderFetch(writer, options);
|
|
985
|
-
return writer.end();
|
|
986
|
-
}
|
|
987
933
|
function renderRouter(routes, options = {
|
|
988
934
|
trailingSlashes: "RedirectWithout"
|
|
989
935
|
}) {
|
|
@@ -1116,15 +1062,7 @@ export async function fetch(request, platform) {
|
|
|
1116
1062
|
return await invoke(route, request, platform, url);
|
|
1117
1063
|
} catch (error) {
|
|
1118
1064
|
if (import.meta.env.DEV) {
|
|
1119
|
-
|
|
1120
|
-
if (error.cause) {
|
|
1121
|
-
body = error.cause.stack || error.cause.message || error.cause;
|
|
1122
|
-
} else {
|
|
1123
|
-
body = error.stack || error.message || "Internal Server Error";
|
|
1124
|
-
}
|
|
1125
|
-
return new Response(body, {
|
|
1126
|
-
status: 500
|
|
1127
|
-
});
|
|
1065
|
+
throw error;
|
|
1128
1066
|
}
|
|
1129
1067
|
return new Response(null, {
|
|
1130
1068
|
status: 500
|
|
@@ -1564,6 +1502,29 @@ function getExportIdentifiers(astProgramNode) {
|
|
|
1564
1502
|
}
|
|
1565
1503
|
return result;
|
|
1566
1504
|
}
|
|
1505
|
+
function getViteSSRExportIdentifiers(astProgramNode, exportObjectName = "__vite_ssr_exports__") {
|
|
1506
|
+
const result = [];
|
|
1507
|
+
if (t.isProgram(astProgramNode)) {
|
|
1508
|
+
for (const node of astProgramNode.body) {
|
|
1509
|
+
if (t.isExpressionStatement(node)) {
|
|
1510
|
+
if (t.isAssignmentExpression(node.expression) && t.isMemberExpression(node.expression.left)) {
|
|
1511
|
+
const { object, property } = node.expression.left;
|
|
1512
|
+
if (t.isIdentifier(object) && object.name === exportObjectName && t.isIdentifier(property)) {
|
|
1513
|
+
result.push(property.name);
|
|
1514
|
+
}
|
|
1515
|
+
} else if (t.isCallExpression(node.expression) && t.isMemberExpression(node.expression.callee)) {
|
|
1516
|
+
const {
|
|
1517
|
+
arguments: [arg0, arg1]
|
|
1518
|
+
} = node.expression;
|
|
1519
|
+
if (t.isIdentifier(arg0) && arg0.name === exportObjectName && (t.isStringLiteral(arg1) || "value" in arg1 && typeof arg1.value === "string")) {
|
|
1520
|
+
result.push(arg1.value);
|
|
1521
|
+
}
|
|
1522
|
+
}
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
return result;
|
|
1527
|
+
}
|
|
1567
1528
|
|
|
1568
1529
|
// src/vite/utils/log.ts
|
|
1569
1530
|
var import_node_zlib = __toESM(require("node:zlib"), 1);
|
|
@@ -1684,12 +1645,9 @@ function prettySize([bytes, compBytes]) {
|
|
|
1684
1645
|
const [size, prefix] = (0, import_human_format.default)(bytes, { decimals: 1 }).split(/\s+/);
|
|
1685
1646
|
const compSize = (0, import_human_format.default)(compBytes, { decimals: 1, prefix, unit: "B" });
|
|
1686
1647
|
let str = import_kleur.default.white(size) + import_kleur.default.gray("/");
|
|
1687
|
-
if (compBytes < 20 * 1e3)
|
|
1688
|
-
|
|
1689
|
-
else
|
|
1690
|
-
str += import_kleur.default.yellow(compSize);
|
|
1691
|
-
else
|
|
1692
|
-
str += import_kleur.default.bold(import_kleur.default.red(compSize));
|
|
1648
|
+
if (compBytes < 20 * 1e3) str += import_kleur.default.green(compSize);
|
|
1649
|
+
else if (compBytes < 50 * 1e3) str += import_kleur.default.yellow(compSize);
|
|
1650
|
+
else str += import_kleur.default.bold(import_kleur.default.red(compSize));
|
|
1693
1651
|
return str;
|
|
1694
1652
|
}
|
|
1695
1653
|
function prettyPath(path4) {
|
|
@@ -1759,6 +1717,31 @@ process.once("beforeExit", (code) => {
|
|
|
1759
1717
|
}
|
|
1760
1718
|
});
|
|
1761
1719
|
|
|
1720
|
+
// src/adapter/utils.ts
|
|
1721
|
+
var import_supports_color = __toESM(require("supports-color"), 1);
|
|
1722
|
+
var import_kleur2 = __toESM(require("kleur"), 1);
|
|
1723
|
+
function stripAnsi(string) {
|
|
1724
|
+
return string.replace(
|
|
1725
|
+
/([\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><])/g,
|
|
1726
|
+
""
|
|
1727
|
+
);
|
|
1728
|
+
}
|
|
1729
|
+
function cleanStack(stack) {
|
|
1730
|
+
return stack.split(/\n/).filter((l) => /^\s*at/.test(l)).join("\n");
|
|
1731
|
+
}
|
|
1732
|
+
function prepareError(err) {
|
|
1733
|
+
var _a;
|
|
1734
|
+
return {
|
|
1735
|
+
message: stripAnsi(err.message),
|
|
1736
|
+
stack: stripAnsi(cleanStack(err.stack || "")),
|
|
1737
|
+
id: err.id,
|
|
1738
|
+
frame: stripAnsi(err.frame || ""),
|
|
1739
|
+
plugin: err.plugin,
|
|
1740
|
+
pluginCode: (_a = err.pluginCode) == null ? void 0 : _a.toString(),
|
|
1741
|
+
loc: err.loc
|
|
1742
|
+
};
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1762
1745
|
// src/vite/plugin.ts
|
|
1763
1746
|
var debug = (0, import_debug.default)("@marko/run");
|
|
1764
1747
|
var __dirname = import_path3.default.dirname((0, import_url2.fileURLToPath)(__importMetaURL));
|
|
@@ -1782,11 +1765,10 @@ function markoRun(opts = {}) {
|
|
|
1782
1765
|
let devServer;
|
|
1783
1766
|
let routes;
|
|
1784
1767
|
let routeData;
|
|
1785
|
-
let
|
|
1768
|
+
let getExportsFromFile;
|
|
1786
1769
|
let resolvedConfig;
|
|
1787
1770
|
let typesFile;
|
|
1788
|
-
let
|
|
1789
|
-
let isRendered = false;
|
|
1771
|
+
let seenErrors = /* @__PURE__ */ new Set();
|
|
1790
1772
|
const virtualFiles = /* @__PURE__ */ new Map();
|
|
1791
1773
|
let times = {
|
|
1792
1774
|
routesBuild: 0,
|
|
@@ -1809,97 +1791,134 @@ function markoRun(opts = {}) {
|
|
|
1809
1791
|
}
|
|
1810
1792
|
}
|
|
1811
1793
|
}
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
};
|
|
1817
|
-
try {
|
|
1818
|
-
if (isStale) {
|
|
1794
|
+
let buildVirtualFilesResult;
|
|
1795
|
+
function buildVirtualFiles() {
|
|
1796
|
+
return buildVirtualFilesResult ?? (buildVirtualFilesResult = new Promise(async (resolve, reject) => {
|
|
1797
|
+
try {
|
|
1819
1798
|
virtualFiles.clear();
|
|
1820
|
-
isRendered = false;
|
|
1821
|
-
const buildStartTime = performance.now();
|
|
1822
1799
|
routes = await buildRoutes({
|
|
1823
1800
|
walker: createFSWalker(resolvedRoutesDir),
|
|
1824
1801
|
importPrefix: routesDir
|
|
1825
1802
|
});
|
|
1826
|
-
times.routesBuild = performance.now() - buildStartTime;
|
|
1827
1803
|
if (!routes.list.length) {
|
|
1828
1804
|
throw new Error("No routes generated");
|
|
1829
1805
|
}
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
if (!route.handler.verbs.length) {
|
|
1836
|
-
throw new Error(
|
|
1837
|
-
`Did not find any valid exports in middleware entry file:'${route.handler.filePath}' - expected to find any of 'GET', 'POST', 'PUT' or 'DELETE'`
|
|
1806
|
+
for (const route of routes.list) {
|
|
1807
|
+
if (route.page) {
|
|
1808
|
+
virtualFiles.set(
|
|
1809
|
+
import_path3.default.posix.join(root, `${route.entryName}.marko`),
|
|
1810
|
+
""
|
|
1838
1811
|
);
|
|
1839
1812
|
}
|
|
1813
|
+
virtualFiles.set(import_path3.default.posix.join(root, `${route.entryName}.js`), "");
|
|
1840
1814
|
}
|
|
1841
|
-
|
|
1815
|
+
for (const route of Object.values(routes.special)) {
|
|
1842
1816
|
virtualFiles.set(
|
|
1843
1817
|
import_path3.default.posix.join(root, `${route.entryName}.marko`),
|
|
1844
|
-
|
|
1818
|
+
""
|
|
1845
1819
|
);
|
|
1846
1820
|
}
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
virtualFiles.set(
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
);
|
|
1821
|
+
if (routes.middleware.length) {
|
|
1822
|
+
virtualFiles.set(
|
|
1823
|
+
import_path3.default.posix.join(root, `${markoRunFilePrefix}middleware.js`),
|
|
1824
|
+
""
|
|
1825
|
+
);
|
|
1826
|
+
}
|
|
1827
|
+
virtualFiles.set("@marko/run/router", "");
|
|
1828
|
+
resolve(routes);
|
|
1829
|
+
} catch (err) {
|
|
1830
|
+
reject(err);
|
|
1857
1831
|
}
|
|
1858
|
-
|
|
1832
|
+
}));
|
|
1833
|
+
}
|
|
1834
|
+
let renderVirtualFilesResult;
|
|
1835
|
+
function renderVirtualFiles(context) {
|
|
1836
|
+
return renderVirtualFilesResult ?? (renderVirtualFilesResult = new Promise(async (resolve) => {
|
|
1837
|
+
var _a;
|
|
1838
|
+
const routerOptions = {
|
|
1839
|
+
trailingSlashes: opts.trailingSlashes || "RedirectWithout"
|
|
1840
|
+
};
|
|
1841
|
+
try {
|
|
1842
|
+
const routes2 = await buildVirtualFiles();
|
|
1843
|
+
for (const route of routes2.list) {
|
|
1844
|
+
if (route.handler) {
|
|
1845
|
+
const exports2 = await getExportsFromFile(
|
|
1846
|
+
context,
|
|
1847
|
+
route.handler.filePath
|
|
1848
|
+
);
|
|
1849
|
+
route.handler.verbs = [];
|
|
1850
|
+
for (const name of exports2) {
|
|
1851
|
+
const verb = name.toLowerCase();
|
|
1852
|
+
if (name === verb.toUpperCase() && httpVerbs.includes(verb)) {
|
|
1853
|
+
route.handler.verbs.push(verb);
|
|
1854
|
+
}
|
|
1855
|
+
}
|
|
1856
|
+
if (!route.handler.verbs.length) {
|
|
1857
|
+
context.warn(
|
|
1858
|
+
`Did not find any http verb exports in handler '${import_path3.default.relative(root, route.handler.filePath)}' - expected ${httpVerbs.map((v) => v.toUpperCase()).join(", ")}`
|
|
1859
|
+
);
|
|
1860
|
+
}
|
|
1861
|
+
}
|
|
1862
|
+
if (route.page) {
|
|
1863
|
+
virtualFiles.set(
|
|
1864
|
+
import_path3.default.posix.join(root, `${route.entryName}.marko`),
|
|
1865
|
+
renderRouteTemplate(route)
|
|
1866
|
+
);
|
|
1867
|
+
}
|
|
1868
|
+
virtualFiles.set(
|
|
1869
|
+
import_path3.default.posix.join(root, `${route.entryName}.js`),
|
|
1870
|
+
renderRouteEntry(route)
|
|
1871
|
+
);
|
|
1872
|
+
}
|
|
1873
|
+
for (const route of Object.values(routes2.special)) {
|
|
1874
|
+
virtualFiles.set(
|
|
1875
|
+
import_path3.default.posix.join(root, `${route.entryName}.marko`),
|
|
1876
|
+
renderRouteTemplate(route)
|
|
1877
|
+
);
|
|
1878
|
+
}
|
|
1879
|
+
if (routes2.middleware.length) {
|
|
1880
|
+
for (const middleware of routes2.middleware) {
|
|
1881
|
+
if (!(await getExportsFromFile(context, middleware.filePath)).includes("default")) {
|
|
1882
|
+
context.warn(
|
|
1883
|
+
`Did not find a default export in middleware '${import_path3.default.relative(root, middleware.filePath)}'`
|
|
1884
|
+
);
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
virtualFiles.set(
|
|
1888
|
+
import_path3.default.posix.join(root, `${markoRunFilePrefix}middleware.js`),
|
|
1889
|
+
renderMiddleware(routes2.middleware)
|
|
1890
|
+
);
|
|
1891
|
+
}
|
|
1859
1892
|
virtualFiles.set(
|
|
1860
|
-
|
|
1861
|
-
|
|
1893
|
+
"@marko/run/router",
|
|
1894
|
+
renderRouter(routes2, routerOptions)
|
|
1862
1895
|
);
|
|
1863
|
-
|
|
1864
|
-
virtualFiles.set(
|
|
1865
|
-
"@marko/run/router",
|
|
1866
|
-
render ? renderRouter(routes, routerOptions) : ""
|
|
1867
|
-
);
|
|
1868
|
-
times.routesRender = performance.now() - renderStartTime;
|
|
1869
|
-
if (render) {
|
|
1870
|
-
await writeTypesFile(routes);
|
|
1896
|
+
await writeTypesFile(routes2);
|
|
1871
1897
|
if (adapter == null ? void 0 : adapter.routesGenerated) {
|
|
1872
1898
|
await adapter.routesGenerated(
|
|
1873
|
-
|
|
1899
|
+
routes2,
|
|
1874
1900
|
new Map(virtualFiles.entries()),
|
|
1875
1901
|
{
|
|
1876
1902
|
buildTime: times.routesBuild,
|
|
1877
1903
|
renderTime: times.routesRender
|
|
1878
1904
|
}
|
|
1879
1905
|
);
|
|
1906
|
+
if (!isBuild) {
|
|
1907
|
+
await ((_a = opts == null ? void 0 : opts.emitRoutes) == null ? void 0 : _a.call(opts, routes2.list));
|
|
1908
|
+
}
|
|
1880
1909
|
}
|
|
1881
|
-
|
|
1882
|
-
|
|
1910
|
+
} catch (err) {
|
|
1911
|
+
if (isBuild) {
|
|
1912
|
+
throw err;
|
|
1883
1913
|
}
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
throw err;
|
|
1914
|
+
virtualFiles.set(
|
|
1915
|
+
"@marko/run/router",
|
|
1916
|
+
`throw ${JSON.stringify(prepareError(err))}`
|
|
1917
|
+
);
|
|
1889
1918
|
}
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
renderEntryTemplate(`${markoRunFilePrefix}error`, ["<dev-error-page>"])
|
|
1894
|
-
);
|
|
1895
|
-
virtualFiles.set(
|
|
1896
|
-
"@marko/run/router",
|
|
1897
|
-
renderErrorRouter(err, routerOptions)
|
|
1898
|
-
);
|
|
1899
|
-
isRendered = true;
|
|
1900
|
-
}
|
|
1901
|
-
isStale = false;
|
|
1902
|
-
});
|
|
1919
|
+
resolve();
|
|
1920
|
+
}));
|
|
1921
|
+
}
|
|
1903
1922
|
return [
|
|
1904
1923
|
{
|
|
1905
1924
|
name: `${PLUGIN_NAME_PREFIX}:pre`,
|
|
@@ -1935,12 +1954,6 @@ function markoRun(opts = {}) {
|
|
|
1935
1954
|
template: normalizePath(
|
|
1936
1955
|
import_path3.default.resolve(__dirname, "../components/dev-error-page.marko")
|
|
1937
1956
|
)
|
|
1938
|
-
},
|
|
1939
|
-
"<*>": {
|
|
1940
|
-
transform: import_path3.default.resolve(
|
|
1941
|
-
__dirname,
|
|
1942
|
-
"../components/src-attributes-transformer.cjs"
|
|
1943
|
-
)
|
|
1944
1957
|
}
|
|
1945
1958
|
});
|
|
1946
1959
|
routesDir = opts.routesDir || "src/routes";
|
|
@@ -2025,7 +2038,12 @@ function markoRun(opts = {}) {
|
|
|
2025
2038
|
] : void 0
|
|
2026
2039
|
},
|
|
2027
2040
|
resolve: isBuild ? {
|
|
2028
|
-
mainFields: (isSSRBuild ? [] : ["browser"]).concat([
|
|
2041
|
+
mainFields: (isSSRBuild ? [] : ["browser"]).concat([
|
|
2042
|
+
"module",
|
|
2043
|
+
"jsnext:main",
|
|
2044
|
+
"jsnext",
|
|
2045
|
+
"main"
|
|
2046
|
+
]),
|
|
2029
2047
|
conditions: [
|
|
2030
2048
|
isSSRBuild ? "node" : "browser",
|
|
2031
2049
|
"import",
|
|
@@ -2060,29 +2078,44 @@ function markoRun(opts = {}) {
|
|
|
2060
2078
|
} else {
|
|
2061
2079
|
ssrEntryFiles = [];
|
|
2062
2080
|
}
|
|
2081
|
+
const baseError = config2.logger.error;
|
|
2082
|
+
config2.logger.error = function(msg, options) {
|
|
2083
|
+
var _a;
|
|
2084
|
+
if (!((_a = options == null ? void 0 : options.error) == null ? void 0 : _a.message)) {
|
|
2085
|
+
baseError.call(this, msg, options);
|
|
2086
|
+
} else if (!seenErrors.has(options.error.message)) {
|
|
2087
|
+
seenErrors.add(options.error.message);
|
|
2088
|
+
console.error((0, import_vite.buildErrorMessage)(options.error));
|
|
2089
|
+
}
|
|
2090
|
+
};
|
|
2063
2091
|
},
|
|
2064
2092
|
configureServer(_server) {
|
|
2065
2093
|
devServer = _server;
|
|
2066
2094
|
devServer.watcher.on("all", async (type, filename) => {
|
|
2067
|
-
|
|
2095
|
+
seenErrors.clear();
|
|
2096
|
+
const routableFileType = matchRoutableFile(
|
|
2097
|
+
import_path3.default.parse(filename).base
|
|
2098
|
+
);
|
|
2068
2099
|
if (filename.startsWith(resolvedRoutesDir) && routableFileType) {
|
|
2069
|
-
if (type === "add") {
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
if (
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2100
|
+
if (type === "add" || type === "unlink" || type === "change" && (routableFileType === RoutableFileTypes.Handler || routableFileType === RoutableFileTypes.Middleware)) {
|
|
2101
|
+
buildVirtualFilesResult = void 0;
|
|
2102
|
+
renderVirtualFilesResult = void 0;
|
|
2103
|
+
const module2 = devServer.moduleGraph.getModuleById(filename);
|
|
2104
|
+
const importers = module2 && getImporters(module2, filename);
|
|
2105
|
+
if (importers == null ? void 0 : importers.size) {
|
|
2106
|
+
for (const file of importers) {
|
|
2107
|
+
devServer.watcher.emit("change", file);
|
|
2108
|
+
}
|
|
2109
|
+
} else {
|
|
2110
|
+
for (const file of virtualFiles.keys()) {
|
|
2111
|
+
if (!file.endsWith(".marko")) {
|
|
2112
|
+
devServer.watcher.emit("change", file);
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2082
2115
|
}
|
|
2083
2116
|
}
|
|
2084
2117
|
}
|
|
2085
|
-
});
|
|
2118
|
+
}).unwatch(typesDir + "/*");
|
|
2086
2119
|
},
|
|
2087
2120
|
async buildStart(_options) {
|
|
2088
2121
|
if (isBuild && !isSSRBuild) {
|
|
@@ -2098,10 +2131,10 @@ function markoRun(opts = {}) {
|
|
|
2098
2131
|
for (const { key, code } of routeData.files) {
|
|
2099
2132
|
virtualFiles.set(key, code);
|
|
2100
2133
|
}
|
|
2101
|
-
|
|
2102
|
-
|
|
2134
|
+
buildVirtualFilesResult = Promise.resolve(routes);
|
|
2135
|
+
renderVirtualFilesResult = Promise.resolve();
|
|
2103
2136
|
} else {
|
|
2104
|
-
|
|
2137
|
+
getExportsFromFile = isBuild ? getExportsFromFileBuild : getExportsFromFileDev.bind(null, devServer);
|
|
2105
2138
|
}
|
|
2106
2139
|
},
|
|
2107
2140
|
async resolveId(importee, importer) {
|
|
@@ -2114,8 +2147,8 @@ function markoRun(opts = {}) {
|
|
|
2114
2147
|
importee = import_path3.default.resolve(root, "." + importee);
|
|
2115
2148
|
}
|
|
2116
2149
|
importee = normalizePath(importee);
|
|
2117
|
-
if (
|
|
2118
|
-
await buildVirtualFiles(
|
|
2150
|
+
if (!buildVirtualFilesResult) {
|
|
2151
|
+
await buildVirtualFiles();
|
|
2119
2152
|
}
|
|
2120
2153
|
if (virtualFiles.has(importee)) {
|
|
2121
2154
|
resolved = importee;
|
|
@@ -2132,11 +2165,13 @@ function markoRun(opts = {}) {
|
|
|
2132
2165
|
if (id.endsWith(serverEntryQuery)) {
|
|
2133
2166
|
id = id.slice(0, -serverEntryQuery.length);
|
|
2134
2167
|
}
|
|
2168
|
+
if (!renderVirtualFilesResult) {
|
|
2169
|
+
await renderVirtualFiles(this);
|
|
2170
|
+
}
|
|
2135
2171
|
if (virtualFiles.has(id)) {
|
|
2136
|
-
if (isStale || !isRendered) {
|
|
2137
|
-
await buildVirtualFiles(true);
|
|
2138
|
-
}
|
|
2139
2172
|
return virtualFiles.get(id);
|
|
2173
|
+
} else if (import_path3.default.basename(id).startsWith(markoRunFilePrefix) && /^\.(js|marko)$/.test(import_path3.default.extname(id))) {
|
|
2174
|
+
return "";
|
|
2140
2175
|
}
|
|
2141
2176
|
}
|
|
2142
2177
|
},
|
|
@@ -2194,57 +2229,20 @@ function markoRun(opts = {}) {
|
|
|
2194
2229
|
}
|
|
2195
2230
|
];
|
|
2196
2231
|
}
|
|
2197
|
-
async function
|
|
2198
|
-
const verbs = [];
|
|
2232
|
+
async function getExportsFromFileBuild(context, filePath) {
|
|
2199
2233
|
const result = await context.load({
|
|
2200
2234
|
id: filePath,
|
|
2201
2235
|
resolveDependencies: false
|
|
2202
2236
|
});
|
|
2203
|
-
|
|
2204
|
-
const exportIds = getExportIdentifiers(result.ast);
|
|
2205
|
-
for (const id of exportIds) {
|
|
2206
|
-
const verb = id.toLowerCase();
|
|
2207
|
-
if (id === verb.toUpperCase() && httpVerbs.includes(verb)) {
|
|
2208
|
-
verbs.push(verb);
|
|
2209
|
-
}
|
|
2210
|
-
}
|
|
2211
|
-
}
|
|
2212
|
-
return verbs;
|
|
2237
|
+
return result ? getExportIdentifiers(result.ast) : [];
|
|
2213
2238
|
}
|
|
2214
|
-
async function
|
|
2215
|
-
const verbs = [];
|
|
2239
|
+
async function getExportsFromFileDev(devServer, context, filePath) {
|
|
2216
2240
|
const result = await devServer.transformRequest(filePath, { ssr: true });
|
|
2217
|
-
if (result
|
|
2218
|
-
const
|
|
2219
|
-
|
|
2220
|
-
while (match) {
|
|
2221
|
-
const id = match[1];
|
|
2222
|
-
const verb = id.toLowerCase();
|
|
2223
|
-
if (httpVerbs.includes(verb)) {
|
|
2224
|
-
if (id === verb.toUpperCase()) {
|
|
2225
|
-
verbs.push(verb);
|
|
2226
|
-
} else {
|
|
2227
|
-
console.warn(
|
|
2228
|
-
`Found export '${id}' in handler ${filePath} which is close to '${verb.toUpperCase()}'. Exported handlers need to be uppercase: GET, POST, PUT or DELETE.`
|
|
2229
|
-
);
|
|
2230
|
-
}
|
|
2231
|
-
}
|
|
2232
|
-
match = verbMatchReg.exec(result.code);
|
|
2233
|
-
}
|
|
2241
|
+
if (result) {
|
|
2242
|
+
const ast = context.parse(result.code);
|
|
2243
|
+
return getViteSSRExportIdentifiers(ast);
|
|
2234
2244
|
}
|
|
2235
|
-
return
|
|
2236
|
-
}
|
|
2237
|
-
function single(fn) {
|
|
2238
|
-
let promise;
|
|
2239
|
-
return async (...args) => {
|
|
2240
|
-
if (promise) {
|
|
2241
|
-
return promise;
|
|
2242
|
-
}
|
|
2243
|
-
promise = fn(...args);
|
|
2244
|
-
const result = await promise;
|
|
2245
|
-
promise = void 0;
|
|
2246
|
-
return result;
|
|
2247
|
-
};
|
|
2245
|
+
return [];
|
|
2248
2246
|
}
|
|
2249
2247
|
async function globFileExists(root, pattern) {
|
|
2250
2248
|
return (await (0, import_glob.glob)(pattern, { root })).length > 0;
|
|
@@ -2297,6 +2295,15 @@ function getEntryFileName(file) {
|
|
|
2297
2295
|
const match = file && markoEntryFileRegex.exec(file);
|
|
2298
2296
|
return match ? match[2] || "index" : void 0;
|
|
2299
2297
|
}
|
|
2298
|
+
function getImporters(module2, fileName, seen = /* @__PURE__ */ new Set()) {
|
|
2299
|
+
for (const importer of module2.importers) {
|
|
2300
|
+
if (importer.id && !seen.has(importer.id)) {
|
|
2301
|
+
seen.add(importer.id);
|
|
2302
|
+
getImporters(importer, fileName, seen);
|
|
2303
|
+
}
|
|
2304
|
+
}
|
|
2305
|
+
return seen;
|
|
2306
|
+
}
|
|
2300
2307
|
|
|
2301
2308
|
// src/vite/utils/server.ts
|
|
2302
2309
|
var import_net = __toESM(require("net"), 1);
|