xanix 1.0.8 → 1.0.10

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.
@@ -1,8 +1,9 @@
1
1
  import { rollup } from "rollup";
2
2
  import fs from "node:fs";
3
- import bundlerOutput, { outDir } from "./config/output.js";
3
+ import bundlerOutput from "./config/output.js";
4
4
  import { getClientRuntimeFile, getClientRuntimeFileName, } from "../include/utils.js";
5
5
  import { xanixDefaultPlugins } from "./plugins/plugins.js";
6
+ import outdirs from "../../outdirs.js";
6
7
  const buildClient = async (entries) => {
7
8
  const input = {};
8
9
  for (const entry of entries) {
@@ -10,11 +11,11 @@ const buildClient = async (entries) => {
10
11
  }
11
12
  const runtimeFileName = getClientRuntimeFileName("production");
12
13
  input[runtimeFileName] = getClientRuntimeFile();
13
- fs.rmSync(outDir.client, {
14
+ fs.rmSync(outdirs.client, {
14
15
  recursive: true,
15
16
  force: true,
16
17
  });
17
- fs.mkdirSync(outDir.client, {
18
+ fs.mkdirSync(outdirs.client, {
18
19
  recursive: true,
19
20
  });
20
21
  const build = await rollup({
@@ -1,17 +1,18 @@
1
1
  import { rollup } from "rollup";
2
2
  import path from "node:path";
3
- import bundlerOutput, { outDir } from "./config/output.js";
3
+ import bundlerOutput from "./config/output.js";
4
4
  import fs from "node:fs";
5
5
  import { createManifest } from "../include/manifest.js";
6
6
  import generateClientEntries from "./generateClientEntries.js";
7
7
  import { xanixDefaultPlugins } from "./plugins/plugins.js";
8
+ import outdirs from "../../outdirs.js";
8
9
  const root = process.cwd();
9
10
  const BuildServer = async ({ rootEntry, onBuildEnd }) => {
10
- fs.rmSync(outDir.server, {
11
+ fs.rmSync(outdirs.server, {
11
12
  recursive: true,
12
13
  force: true,
13
14
  });
14
- fs.mkdirSync(outDir.server, {
15
+ fs.mkdirSync(outdirs.server, {
15
16
  recursive: true,
16
17
  });
17
18
  const entries = await generateClientEntries();
@@ -7,6 +7,7 @@ import { getClientRuntimeFile } from "../include/utils.js";
7
7
  import esbuild from "rollup-plugin-esbuild";
8
8
  import url from "@rollup/plugin-url";
9
9
  import XanixDocument from "./plugins/XanixDocument/index.js";
10
+ import outdirs from "../../outdirs.js";
10
11
  const require = createRequire(import.meta.url);
11
12
  const GenerateGraph = async (entries) => {
12
13
  const collector = new Map();
@@ -154,7 +155,7 @@ const BuildCache = async (entries) => {
154
155
  file: `${entryName}.js`,
155
156
  });
156
157
  }
157
- const cacheDir = path.resolve(process.cwd(), ".xanix/cache");
158
+ const cacheDir = path.resolve(outdirs.server, "cache");
158
159
  await bundleDeps(input, cacheDir);
159
160
  return metadata;
160
161
  };
@@ -1,9 +1,5 @@
1
1
  import { OutputOptions } from "rollup";
2
2
  import { XanixClientEntry } from "../../types";
3
- export declare const outDir: {
4
- server: string;
5
- client: string;
6
- };
7
3
  type Options = {
8
4
  isDev?: boolean;
9
5
  };
@@ -1,16 +1,12 @@
1
- import path from "node:path";
1
+ import outdirs from "../../../outdirs.js";
2
2
  const root = process.cwd();
3
- export const outDir = {
4
- server: path.resolve(root, ".xanix"),
5
- client: path.resolve(root, ".xanix/client"),
6
- };
7
3
  const client = (entries, { isDev }) => {
8
4
  const _entries = {};
9
5
  for (const entry of entries) {
10
6
  _entries[entry.name] = entry;
11
7
  }
12
8
  const opt = {
13
- dir: outDir.client,
9
+ dir: outdirs.client,
14
10
  format: "esm",
15
11
  entryFileNames: (id) => {
16
12
  const entry = _entries[id.name];
@@ -33,7 +29,7 @@ const client = (entries, { isDev }) => {
33
29
  };
34
30
  const server = (opt) => {
35
31
  return {
36
- dir: outDir.server,
32
+ dir: outdirs.server,
37
33
  format: "esm",
38
34
  sourcemap: opt.isDev ?? true,
39
35
  entryFileNames: "[name].js",
@@ -4,6 +4,7 @@ import crypto from "node:crypto";
4
4
  import { parse } from "@babel/parser";
5
5
  import traverse from "@babel/traverse";
6
6
  import * as t from "@babel/types";
7
+ import outdirs from "../../../../outdirs.js";
7
8
  const SOURCE_EXTENSIONS = [".tsx", ".ts", ".jsx", ".js", ".mjs", ".cjs"];
8
9
  function normalizeFilePath(file) {
9
10
  return path.resolve(file).split(path.sep).join("/");
@@ -140,7 +141,7 @@ export function entryFinder(code, id) {
140
141
  const root = process.cwd();
141
142
  const relativeSource = path.relative(root, componentFile);
142
143
  const parsed = path.parse(relativeSource);
143
- const buildPath = normalizeFilePath(path.resolve(root, ".xanix", parsed.dir, `${parsed.name}.js`));
144
+ const buildPath = normalizeFilePath(path.resolve(root, outdirs.root, parsed.dir, `${parsed.name}.js`));
144
145
  const entry = {
145
146
  id: clientId,
146
147
  name: componentName,
@@ -23,6 +23,8 @@ ${code}
23
23
  window.$RefreshReg$ = RefreshRuntime.register;
24
24
  window.$RefreshSig$ = () => (type) => type;
25
25
  const ws = new WebSocket("ws://localhost:8080");
26
+
27
+
26
28
  ws.onmessage = async (event) => {
27
29
  const files = JSON.parse(event.data);
28
30
 
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
2
  import BuildCache from "../../cacheNpmModules.js";
3
+ import outdirs from "../../../../outdirs.js";
3
4
  function XanixResolveCacheDeps(metadata, entries) {
4
5
  if (!entries.length) {
5
6
  return {
@@ -14,12 +15,15 @@ function XanixResolveCacheDeps(metadata, entries) {
14
15
  }
15
16
  const dependency = metadata.get(source);
16
17
  if (dependency) {
17
- return { id: `/.xanix/cache/${dependency.file}`, external: true };
18
+ return { id: `/${outdirs.cache}/${dependency.file}`, external: true };
18
19
  }
19
20
  const buildCache = await BuildCache(entries);
20
21
  const newDependency = buildCache.get(source);
21
22
  if (newDependency) {
22
- return { id: `/.xanix/cache/${newDependency.file}`, external: true };
23
+ return {
24
+ id: `/${outdirs.cache}/${newDependency.file}`,
25
+ external: true,
26
+ };
23
27
  }
24
28
  },
25
29
  };
@@ -1,10 +1,11 @@
1
1
  import { watch } from "rollup";
2
- import bundlerOutput, { outDir } from "./config/output.js";
2
+ import bundlerOutput from "./config/output.js";
3
3
  import fs from "node:fs";
4
4
  import BuildCache from "./cacheNpmModules.js";
5
5
  import XanixResolveCacheDeps from "./plugins/XanixResolveCacheDeps/index.js";
6
6
  import { getClientRuntimeFile, getClientRuntimeFileName, } from "../include/utils.js";
7
7
  import { xanixDefaultPlugins } from "./plugins/plugins.js";
8
+ import outdirs from "../../outdirs.js";
8
9
  const WatchClient = async (entries, options) => {
9
10
  const input = {};
10
11
  for (const entry of entries) {
@@ -12,11 +13,11 @@ const WatchClient = async (entries, options) => {
12
13
  }
13
14
  const runtimeFileName = getClientRuntimeFileName("development");
14
15
  input[runtimeFileName] = getClientRuntimeFile();
15
- fs.rmSync(outDir.client, {
16
+ fs.rmSync(outdirs.client, {
16
17
  recursive: true,
17
18
  force: true,
18
19
  });
19
- fs.mkdirSync(outDir.client, {
20
+ fs.mkdirSync(outdirs.client, {
20
21
  recursive: true,
21
22
  });
22
23
  let buildCache;
@@ -3,16 +3,17 @@ import path from "node:path";
3
3
  import fs from "node:fs";
4
4
  import { createManifest, readManifest } from "../include/manifest.js";
5
5
  import generateClientEntries from "./generateClientEntries.js";
6
- import bundlerOutput, { outDir } from "./config/output.js";
6
+ import bundlerOutput from "./config/output.js";
7
7
  import { entriesEqual } from "../include/entry.js";
8
8
  import { xanixDefaultPlugins } from "./plugins/plugins.js";
9
+ import outdirs from "../../outdirs.js";
9
10
  const root = process.cwd();
10
11
  const watchServer = async ({ rootEntry, onChange, onBuildEnd, onServerChange, onClientEntryChange, }) => {
11
- fs.rmSync(outDir.server, {
12
+ fs.rmSync(outdirs.server, {
12
13
  recursive: true,
13
14
  force: true,
14
15
  });
15
- fs.mkdirSync(outDir.server, {
16
+ fs.mkdirSync(outdirs.server, {
16
17
  recursive: true,
17
18
  });
18
19
  const entries = await generateClientEntries();
@@ -5,14 +5,14 @@ import watchClient from "../bundler/watchClient.js";
5
5
  import pc from "picocolors";
6
6
  import logger from "../include/logger.js";
7
7
  import { getEntries } from "../include/entry.js";
8
- import { outDir } from "../bundler/config/output.js";
9
8
  import { WebSocketServer } from "ws";
9
+ import outdirs from "../../outdirs.js";
10
10
  const root = process.cwd();
11
11
  let child;
12
12
  function start() {
13
13
  child?.kill();
14
14
  return new Promise((resolve) => {
15
- const filePath = path.join(outDir.server, "index.js");
15
+ const filePath = path.join(outdirs.server, "index.js");
16
16
  child = spawn(process.execPath, [filePath], {
17
17
  stdio: !child ? "inherit" : "pipe",
18
18
  });
@@ -1,9 +1,9 @@
1
1
  import path from "node:path";
2
2
  import { spawn } from "child_process";
3
- import { outDir } from "../bundler/config/output.js";
3
+ import outdirs from "../../outdirs.js";
4
4
  let child;
5
5
  const start = async () => {
6
- const filePath = path.join(outDir.server, "index.js");
6
+ const filePath = path.join(outdirs.server, "index.js");
7
7
  child = spawn(process.execPath, [filePath], {
8
8
  stdio: "inherit",
9
9
  });
@@ -1,5 +1,6 @@
1
1
  import path from "node:path";
2
2
  import fs from "node:fs";
3
+ import outdirs from "../../outdirs.js";
3
4
  let readedManifest = null;
4
5
  export const createManifest = async (entries) => {
5
6
  const manifest = {
@@ -7,7 +8,7 @@ export const createManifest = async (entries) => {
7
8
  entries: [...entries.values()],
8
9
  };
9
10
  readedManifest = manifest;
10
- const outDir = path.resolve(process.cwd(), ".xanix");
11
+ const outDir = path.resolve(process.cwd(), outdirs.root);
11
12
  fs.writeFileSync(path.resolve(outDir, "client-manifest.json"), JSON.stringify(manifest, null, 2));
12
13
  };
13
14
  export const readManifest = async () => readedManifest;
@@ -10,8 +10,6 @@ export const getClientRuntimeFile = () => {
10
10
  return path.join(__dirname, "../../../client-runtime.js");
11
11
  };
12
12
  export const getClientRuntimeFileName = (mode) => {
13
- if (mode === "development") {
14
- return "xanix-runtime";
15
- }
16
- return uid("xanix-runtime", 32);
13
+ let n = "xanix-runtime";
14
+ return mode === "development" ? n : uid(n, 16);
17
15
  };
@@ -1,12 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createRoot } from "react-dom/client";
3
+ import outdirs from "./outdirs.js";
3
4
  const pages = new Map();
4
5
  const ROOT_KEY = "__xanix_root__";
5
6
  export const getPath = () => {
6
7
  const { pathname, search } = window.location;
7
8
  return search ? `${pathname}${search}` : pathname;
8
9
  };
9
- export const getImportUrl = (pageId) => `/.xanix/client/${pageId}.js`;
10
+ export const getImportUrl = (pageId) => `/${outdirs.client}/${pageId}.js`;
10
11
  function getRoot() {
11
12
  let ele = document.body;
12
13
  if (!ele) {
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect } from "react";
3
3
  import useDocument from "../hooks/useDocument.js";
4
+ import outdirs from "../outdirs.js";
4
5
  const Head = ({ children }) => {
5
6
  const { title, meta, pageId, props, params, pageData } = useDocument();
6
7
  if (__XANIX_CLIENT__) {
@@ -39,7 +40,7 @@ const Head = ({ children }) => {
39
40
  request: null,
40
41
  })};
41
42
  `,
42
- } }), _jsx("script", { type: "module", src: `/.xanix/client/${__XANIX_CLIENT_RUNTIME_FILE_NAME__}.js` })] }));
43
+ } }), _jsx("script", { type: "module", src: `/${outdirs.client}/${__XANIX_CLIENT_RUNTIME_FILE_NAME__}.js` })] }));
43
44
  }
44
45
  };
45
46
  export default Head;
package/dist/dirs.d.ts ADDED
File without changes
package/dist/dirs.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";
@@ -2,6 +2,7 @@ import usePage from "./usePage.js";
2
2
  import React, { useEffect, useRef } from "react";
3
3
  import useDocument from "./useDocument.js";
4
4
  import loader from "../dataLoader.js";
5
+ import outdirs from "../outdirs.js";
5
6
  const useData = (_callback, _args) => {
6
7
  return {};
7
8
  };
@@ -31,7 +32,7 @@ useData.register = (xanixId, callback) => {
31
32
  const init = useRef(false);
32
33
  const reload = async () => {
33
34
  setLoading(true);
34
- const res = await fetch(`/.xanix/__data__/${xanixId}`, {
35
+ const res = await fetch(`/${outdirs.root}/__data__/${xanixId}`, {
35
36
  method: "POST",
36
37
  headers: {
37
38
  "Content-Type": "application/json",
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /// <reference path="./types/globals.d.ts" />
2
2
  /// <reference path="./types/express.d.ts" />
3
3
  /// <reference path="./types/assets.d.ts" />
4
+ /// <reference path="./types/xanix-virtual.d.ts" />
4
5
 
5
6
  import Link from "./components/Link.js";
6
7
  import Document, { DocumentProps } from "./components/Document.js";
package/dist/navigate.js CHANGED
@@ -3,12 +3,8 @@ export const navigate = (path, replace = false) => {
3
3
  detail: { path, replace },
4
4
  }));
5
5
  };
6
- export const back = () => {
7
- window.history.back();
8
- };
9
- export const forward = () => {
10
- window.history.forward();
11
- };
6
+ export const back = () => window.history.back();
7
+ export const forward = () => window.history.forward();
12
8
  export const preload = async (path) => {
13
9
  window.dispatchEvent(new CustomEvent(XANIX_PRELOAD, { detail: { path } }));
14
10
  };
@@ -0,0 +1,8 @@
1
+ declare const outdir: {
2
+ root: string;
3
+ server: string;
4
+ client: string;
5
+ cache: string;
6
+ assets: string;
7
+ };
8
+ export default outdir;
package/dist/outdir.js ADDED
@@ -0,0 +1,9 @@
1
+ const ourDirName = ".xanix";
2
+ const outdir = {
3
+ root: ourDirName,
4
+ server: ourDirName,
5
+ client: `${ourDirName}/client`,
6
+ cache: `${ourDirName}/cache`,
7
+ assets: `${ourDirName}/assets`,
8
+ };
9
+ export default outdir;
@@ -0,0 +1,8 @@
1
+ declare const outdirs: {
2
+ root: string;
3
+ server: string;
4
+ client: string;
5
+ cache: string;
6
+ assets: string;
7
+ };
8
+ export default outdirs;
@@ -0,0 +1,9 @@
1
+ const root = ".xanix";
2
+ const outdirs = {
3
+ root,
4
+ server: root,
5
+ client: `${root}/client`,
6
+ cache: `${root}/cache`,
7
+ assets: `${root}/assets`,
8
+ };
9
+ export default outdirs;
@@ -1,25 +1,26 @@
1
1
  import express from "express";
2
2
  import dataLoader from "../../dataLoader.js";
3
+ import outdirs from "../../outdirs.js";
3
4
  function createXanixServer({ mode }) {
4
5
  const app = express();
5
6
  if (mode === "watch") {
6
- app.use("/.xanix/client", express.static(".xanix/client"));
7
- app.use("/assets", express.static(".xanix/assets"));
8
- app.use("/.xanix/cache", express.static(".xanix/cache"));
7
+ app.use(`/${outdirs.client}`, express.static(`${outdirs.client}`));
8
+ app.use(`/assets`, express.static(outdirs.assets));
9
+ app.use(`/${outdirs.cache}`, express.static(`${outdirs.cache}`));
9
10
  }
10
11
  else {
11
- app.use("/.xanix/client", express.static(".xanix/client", {
12
+ app.use(`/${outdirs.client}`, express.static(`${outdirs.client}`, {
12
13
  maxAge: "1y",
13
14
  immutable: true,
14
15
  etag: true,
15
16
  }));
16
- app.use("/assets", express.static(".xanix/assets", {
17
+ app.use(`/assets`, express.static(outdirs.assets, {
17
18
  maxAge: "1y",
18
19
  immutable: true,
19
20
  etag: true,
20
21
  }));
21
22
  }
22
- app.post("/.xanix/__data__/:xanixId", express.json(), async (req, res) => {
23
+ app.post(`/${outdirs.root}/__data__/:xanixId`, express.json(), async (req, res) => {
23
24
  const { xanixId } = req.params;
24
25
  const args = req.body;
25
26
  const data = await dataLoader.result(xanixId, args);
@@ -1,7 +1,8 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import outdirs from "../../outdirs";
3
4
  async function readManifest() {
4
- const manifestPath = path.resolve(process.cwd(), ".xanix", "client-manifest.json");
5
+ const manifestPath = path.resolve(process.cwd(), outdirs.root, "client-manifest.json");
5
6
  const source = await fs.readFile(manifestPath, "utf8");
6
7
  return JSON.parse(source);
7
8
  }
@@ -19,7 +19,6 @@ declare global {
19
19
  const XANIX_PRELOAD: string;
20
20
  const XANIX_PRELOAD_START: string;
21
21
  const XANIX_PRELOAD_END: string;
22
-
23
22
  const XANIX_NAVIGATE_RELOAD: string;
24
23
  }
25
24
 
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "xanix",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
- "bin": "./dist/bin/index.js",
8
+ "bin": {
9
+ "xanix": "dist/bin/index.js"
10
+ },
9
11
  "type": "module",
10
12
  "files": [
11
13
  "dist"
@@ -22,10 +24,6 @@
22
24
  "./runtime": {
23
25
  "import": "./dist/server/runtime/index.js",
24
26
  "require": "./dist/server/runtime/index.js"
25
- },
26
- "./BaseDocument": {
27
- "types": "./dist/components/BaseDocument.d.ts",
28
- "import": "./dist/components/BaseDocument.js"
29
27
  }
30
28
  },
31
29
  "scripts": {
@@ -38,16 +36,12 @@
38
36
  "dependencies": {
39
37
  "@babel/generator": "^8.0.0",
40
38
  "@babel/parser": "^8.0.4",
41
- "@babel/preset-react": "^8.0.1",
42
- "@babel/preset-typescript": "^8.0.1",
43
39
  "@babel/traverse": "^8.0.4",
44
40
  "@rollup/plugin-alias": "^6.0.0",
45
- "@rollup/plugin-babel": "^7.1.0",
46
41
  "@rollup/plugin-commonjs": "^29.0.3",
47
42
  "@rollup/plugin-json": "^6.1.0",
48
43
  "@rollup/plugin-node-resolve": "^16.0.3",
49
44
  "@rollup/plugin-replace": "^6.0.3",
50
- "@rollup/plugin-typescript": "^12.3.0",
51
45
  "@rollup/plugin-url": "^8.0.2",
52
46
  "commander": "^15.0.0",
53
47
  "dotenv": "^17.4.2",