@hyperspan/framework 0.1.7 → 0.1.8

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/assets.js CHANGED
@@ -61,7 +61,7 @@ function md5(content) {
61
61
  }
62
62
  async function copyPreactToPublicFolder() {
63
63
  const sourceFile = resolve(PWD, "../", "./src/clientjs/preact.ts");
64
- const preactClient = Bun.build({
64
+ await Bun.build({
65
65
  entrypoints: [sourceFile],
66
66
  outdir: "./public/_hs/js",
67
67
  minify: true,
package/dist/server.js CHANGED
@@ -9,7 +9,7 @@ import { basename, extname, join } from "node:path";
9
9
  import { html, isHSHtml, renderStream, renderAsync, render } from "@hyperspan/html";
10
10
 
11
11
  // node_modules/isbot/index.mjs
12
- var fullPattern = " daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?:lib))http|(?<![hg]m)score|(?<!cam)scan|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\btime/|\\||^<|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\(compatible;?(?:\\s\\w+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|analyzer|archive|ask jeeves/teoma|audit|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|convertify|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|exaleadcloudview|feed|firephp|functionize|gomezagent|grab|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|infrawatch|insight|inspect|iplabel|ips-agent|java(?!;)|library|linkcheck|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|onetrust|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|retriever|rexx;|rigor|rss\\b|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|webglance|webkit2png|whatcms/";
12
+ var fullPattern = " daum[ /]| deusu/| yadirectfetcher|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?:lib))http|(?<![hg]m)score|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\btime/|\\||^<|^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[^ ]{50,}$|^\\d+\\b|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^active|^ad muncher|^amaya|^avsdevicesdk/|^biglotron|^bot|^bw/|^clamav[ /]|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\(compatible;?(?:\\s\\w+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|^{{.*}}$|adscanner/|analyzer|archive|ask jeeves/teoma|audit|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|convertify|cookiehubscan|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|evc-batch/|exaleadcloudview|feed|firephp|functionize|gomezagent|headless|httrack|hubspot marketing grader|hydra|ibisbrowser|infrawatch|insight|inspect|iplabel|ips-agent|java(?!;)|jsjcw_scanner|library|linkcheck|mail\\.ru/|manager|measure|neustar wpm|node|nutch|offbyone|onetrust|optimize|pageburst|pagespeed|parser|perl|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|retriever|rexx;|rigor|rss\\b|scanner\\.|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|zgrab";
13
13
  var naivePattern = /bot|crawl|http|lighthouse|scan|search|spider/i;
14
14
  var pattern;
15
15
  function getPattern() {
@@ -841,11 +841,7 @@ var Hono = class {
841
841
  optionHandler = options;
842
842
  } else {
843
843
  optionHandler = options.optionHandler;
844
- if (options.replaceRequest === false) {
845
- replaceRequest = (request) => request;
846
- } else {
847
- replaceRequest = options.replaceRequest;
848
- }
844
+ replaceRequest = options.replaceRequest;
849
845
  }
850
846
  }
851
847
  const getOptions = optionHandler ? (c) => {
@@ -855,8 +851,7 @@ var Hono = class {
855
851
  let executionContext = undefined;
856
852
  try {
857
853
  executionContext = c.executionCtx;
858
- } catch {
859
- }
854
+ } catch {}
860
855
  return [c.env, executionContext];
861
856
  };
862
857
  replaceRequest ||= (() => {
@@ -1750,8 +1745,7 @@ var serveStatic2 = (options) => {
1750
1745
  try {
1751
1746
  const stats = await stat(path);
1752
1747
  isDir2 = stats.isDirectory();
1753
- } catch {
1754
- }
1748
+ } catch {}
1755
1749
  return isDir2;
1756
1750
  };
1757
1751
  return serveStatic({
@@ -1952,6 +1946,9 @@ function getRunnableRoute(route) {
1952
1946
  function isRunnableRoute(route) {
1953
1947
  return typeof route === "object" && "run" in route;
1954
1948
  }
1949
+ function createLayout(layout) {
1950
+ return layout;
1951
+ }
1955
1952
  async function showErrorReponse(context, err) {
1956
1953
  const output = render(html`
1957
1954
  <main>
@@ -1969,7 +1966,6 @@ async function showErrorReponse(context, err) {
1969
1966
  var ROUTE_SEGMENT = /(\[[a-zA-Z_\.]+\])/g;
1970
1967
  async function buildRoutes(config) {
1971
1968
  const routesDir = join(config.appDir, "routes");
1972
- console.log(routesDir);
1973
1969
  const files = await readdir(routesDir, { recursive: true });
1974
1970
  const routes = [];
1975
1971
  for (const file of files) {
@@ -2096,6 +2092,7 @@ export {
2096
2092
  createRouteFromModule,
2097
2093
  createRoute,
2098
2094
  createReadableStreamFromAsyncGenerator,
2095
+ createLayout,
2099
2096
  createAPIRoute,
2100
2097
  buildRoutes,
2101
2098
  StreamResponse,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperspan/framework",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Hyperspan Web Framework",
5
5
  "main": "dist/server.js",
6
6
  "types": "src/server.ts",
package/src/assets.ts CHANGED
@@ -101,7 +101,7 @@ function md5(content: string): string {
101
101
  */
102
102
  async function copyPreactToPublicFolder() {
103
103
  const sourceFile = resolve(PWD, '../', './src/clientjs/preact.ts');
104
- const preactClient = Bun.build({
104
+ await Bun.build({
105
105
  entrypoints: [sourceFile],
106
106
  outdir: './public/_hs/js',
107
107
  minify: true,
package/src/server.ts CHANGED
@@ -15,6 +15,8 @@ const CWD = process.cwd();
15
15
  */
16
16
  export type THSResponseTypes = HSHtml | Response | string | null;
17
17
  export type THSRouteHandler = (context: Context) => THSResponseTypes | Promise<THSResponseTypes>;
18
+ export type THSAPIResponseTypes = Response | Record<any, any> | void;
19
+ export type THSAPIRouteHandler = (context: Context) => THSResponseTypes | Promise<THSResponseTypes>;
18
20
 
19
21
  export type THSRoute = {
20
22
  _kind: 'hsRoute';
@@ -100,8 +102,8 @@ export function createRoute(handler?: THSRouteHandler): THSRoute {
100
102
  * Create new API Route
101
103
  * API Route handlers should return a JSON object or a Response
102
104
  */
103
- export function createAPIRoute(handler?: THSRouteHandler): THSRoute {
104
- let _handlers: Record<string, THSRouteHandler> = {};
105
+ export function createAPIRoute(handler?: THSAPIRouteHandler): THSRoute {
106
+ let _handlers: Record<string, THSAPIRouteHandler> = {};
105
107
 
106
108
  if (handler) {
107
109
  _handlers['GET'] = handler;
@@ -109,23 +111,23 @@ export function createAPIRoute(handler?: THSRouteHandler): THSRoute {
109
111
 
110
112
  const api: THSRoute = {
111
113
  _kind: 'hsRoute',
112
- get(handler: THSRouteHandler) {
114
+ get(handler: THSAPIRouteHandler) {
113
115
  _handlers['GET'] = handler;
114
116
  return api;
115
117
  },
116
- post(handler: THSRouteHandler) {
118
+ post(handler: THSAPIRouteHandler) {
117
119
  _handlers['POST'] = handler;
118
120
  return api;
119
121
  },
120
- put(handler: THSRouteHandler) {
122
+ put(handler: THSAPIRouteHandler) {
121
123
  _handlers['PUT'] = handler;
122
124
  return api;
123
125
  },
124
- delete(handler: THSRouteHandler) {
126
+ delete(handler: THSAPIRouteHandler) {
125
127
  _handlers['DELETE'] = handler;
126
128
  return api;
127
129
  },
128
- patch(handler: THSRouteHandler) {
130
+ patch(handler: THSAPIRouteHandler) {
129
131
  _handlers['PATCH'] = handler;
130
132
  return api;
131
133
  },
@@ -202,6 +204,14 @@ export function isRunnableRoute(route: unknown): boolean {
202
204
  return typeof route === 'object' && 'run' in route;
203
205
  }
204
206
 
207
+ /**
208
+ * Create a layout for a Hyperspan app. Passthrough for now.
209
+ * Future intent is to be able to conditionally render a layout for full page content vs. partial content.
210
+ */
211
+ export function createLayout<T>(layout: (props: T) => HSHtml | Promise<HSHtml>) {
212
+ return layout;
213
+ }
214
+
205
215
  /**
206
216
  * Basic error handling
207
217
  * @TODO: Should check for and load user-customizeable template with special name (app/__error.ts ?)
@@ -242,7 +252,6 @@ const ROUTE_SEGMENT = /(\[[a-zA-Z_\.]+\])/g;
242
252
  export async function buildRoutes(config: THSServerConfig): Promise<THSRouteMap[]> {
243
253
  // Walk all pages and add them as routes
244
254
  const routesDir = join(config.appDir, 'routes');
245
- console.log(routesDir);
246
255
  const files = await readdir(routesDir, { recursive: true });
247
256
  const routes: THSRouteMap[] = [];
248
257