@treeseed/core 0.4.2 → 0.4.4

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.
Files changed (64) hide show
  1. package/README.md +7 -1
  2. package/dist/api/agent-routes.d.ts +13 -0
  3. package/dist/api/agent-routes.js +402 -0
  4. package/dist/api/app.d.ts +5 -0
  5. package/dist/api/app.js +270 -0
  6. package/dist/api/auth/d1-database.d.ts +3 -0
  7. package/dist/api/auth/d1-database.js +24 -0
  8. package/dist/api/auth/d1-provider.d.ts +67 -0
  9. package/dist/api/auth/d1-provider.js +84 -0
  10. package/dist/api/auth/d1-store.d.ts +97 -0
  11. package/dist/api/auth/d1-store.js +631 -0
  12. package/dist/api/auth/memory-provider.d.ts +73 -0
  13. package/dist/api/auth/memory-provider.js +239 -0
  14. package/dist/api/auth/rbac.d.ts +22 -0
  15. package/dist/api/auth/rbac.js +158 -0
  16. package/dist/api/auth/tokens.d.ts +18 -0
  17. package/dist/api/auth/tokens.js +56 -0
  18. package/dist/api/config.d.ts +2 -0
  19. package/dist/api/config.js +65 -0
  20. package/dist/api/gateway.d.ts +5 -0
  21. package/dist/api/gateway.js +35 -0
  22. package/dist/api/http.d.ts +24 -0
  23. package/dist/api/http.js +44 -0
  24. package/dist/api/index.d.ts +9 -0
  25. package/dist/api/index.js +18 -0
  26. package/dist/api/operations-routes.d.ts +6 -0
  27. package/dist/api/operations-routes.js +34 -0
  28. package/dist/api/operations.d.ts +3 -0
  29. package/dist/api/operations.js +26 -0
  30. package/dist/api/providers.d.ts +2 -0
  31. package/dist/api/providers.js +61 -0
  32. package/dist/api/railway.d.ts +45 -0
  33. package/dist/api/railway.js +69 -0
  34. package/dist/api/sdk-dispatch.d.ts +14 -0
  35. package/dist/api/sdk-dispatch.js +145 -0
  36. package/dist/api/sdk-routes.d.ts +10 -0
  37. package/dist/api/sdk-routes.js +25 -0
  38. package/dist/api/server.d.ts +2 -0
  39. package/dist/api/server.js +10 -0
  40. package/dist/api/templates.d.ts +3 -0
  41. package/dist/api/templates.js +31 -0
  42. package/dist/api/types.d.ts +193 -0
  43. package/dist/api/types.js +0 -0
  44. package/dist/api.d.ts +1 -0
  45. package/dist/api.js +1 -0
  46. package/dist/dev.d.ts +41 -0
  47. package/dist/dev.js +189 -0
  48. package/dist/index.d.ts +9 -0
  49. package/dist/index.js +23 -1
  50. package/dist/platform-resources.d.ts +37 -0
  51. package/dist/platform-resources.js +133 -0
  52. package/dist/platform.d.ts +2 -0
  53. package/dist/platform.js +16 -0
  54. package/dist/plugin-default.d.ts +1 -0
  55. package/dist/plugin-default.js +4 -0
  56. package/dist/railway.d.ts +1 -0
  57. package/dist/railway.js +4 -0
  58. package/dist/scripts/build-dist.js +7 -0
  59. package/dist/scripts/dev-platform.js +24 -0
  60. package/dist/scripts/workspace-bootstrap.js +0 -1
  61. package/dist/site-resources.d.ts +1 -29
  62. package/dist/site-resources.js +7 -120
  63. package/dist/site.js +3 -1
  64. package/package.json +37 -3
@@ -0,0 +1,4 @@
1
+ import { createRailwayTreeseedApiServer } from "./api/railway.js";
2
+ export {
3
+ createRailwayTreeseedApiServer
4
+ };
@@ -206,6 +206,13 @@ function emitTypeDeclarations() {
206
206
  const sourceFiles = [
207
207
  resolve(srcRoot, 'types/cloudflare.ts'),
208
208
  resolve(srcRoot, 'site-resources.ts'),
209
+ resolve(srcRoot, 'platform-resources.ts'),
210
+ resolve(srcRoot, 'api.ts'),
211
+ resolve(srcRoot, 'railway.ts'),
212
+ resolve(srcRoot, 'platform.ts'),
213
+ resolve(srcRoot, 'plugin-default.ts'),
214
+ resolve(srcRoot, 'index.ts'),
215
+ ...walkFiles(resolve(srcRoot, 'api')).filter((filePath) => filePath.endsWith('.ts') && !filePath.endsWith('.d.js')),
209
216
  ].filter((filePath) => existsSync(filePath));
210
217
  if (sourceFiles.length === 0) {
211
218
  return;
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env node
2
+ import { runTreeseedIntegratedDev } from '../dev.js';
3
+ const args = process.argv.slice(2);
4
+ function readFlag(name) {
5
+ return args.includes(name);
6
+ }
7
+ function readOption(name) {
8
+ const index = args.indexOf(name);
9
+ if (index < 0) {
10
+ return undefined;
11
+ }
12
+ return args[index + 1];
13
+ }
14
+ function parseSurface(value) {
15
+ if (value === 'web' || value === 'api' || value === 'integrated') {
16
+ return value;
17
+ }
18
+ return 'integrated';
19
+ }
20
+ const exitCode = await runTreeseedIntegratedDev({
21
+ surface: parseSurface(readOption('--surface')),
22
+ watch: readFlag('--watch'),
23
+ });
24
+ process.exit(exitCode);
@@ -9,7 +9,6 @@ const requiredPackages = [
9
9
  { name: '@treeseed/sdk', dir: 'packages/sdk', build: true },
10
10
  { name: '@treeseed/core', dir: 'packages/core', build: true },
11
11
  { name: '@treeseed/agent', dir: 'packages/agent', build: true },
12
- { name: '@treeseed/api', dir: 'packages/api', build: true },
13
12
  { name: '@treeseed/cli', dir: 'packages/cli', build: true, binName: 'treeseed' },
14
13
  ];
15
14
  function packageState(root, entry) {
@@ -1,29 +1 @@
1
- import type { TreeseedDeployConfig, TreeseedTenantConfig } from '@treeseed/sdk/platform/contracts';
2
- import type { LoadedTreeseedPluginEntry } from '@treeseed/sdk/platform/plugins';
3
- export declare const TREESEED_SITE_RESOURCE_KINDS: readonly ["pages", "styles", "components"];
4
- export type TreeseedSiteResourceKind = (typeof TREESEED_SITE_RESOURCE_KINDS)[number];
5
- export type TreeseedSiteLayerDefinition = {
6
- root: string;
7
- kinds?: TreeseedSiteResourceKind[];
8
- };
9
- export type TreeseedSiteLayer = {
10
- owner: string;
11
- root: string;
12
- kinds: TreeseedSiteResourceKind[];
13
- };
14
- type SiteLayerBuildContext = {
15
- projectRoot: string;
16
- tenantConfig: TreeseedTenantConfig;
17
- siteConfig?: unknown;
18
- deployConfig?: TreeseedDeployConfig;
19
- };
20
- type SiteLayerRuntime = {
21
- plugins: LoadedTreeseedPluginEntry[];
22
- };
23
- export declare function buildTreeseedSiteLayers(pluginRuntime: SiteLayerRuntime, context: SiteLayerBuildContext & {
24
- coreRoot: string;
25
- }): TreeseedSiteLayer[];
26
- export declare function resolveTreeseedSiteResource(layers: TreeseedSiteLayer[], kind: TreeseedSiteResourceKind, resourcePath: string): string;
27
- export declare function resolveTreeseedPageEntrypoint(layers: TreeseedSiteLayer[], resourcePath: string): string;
28
- export declare function resolveTreeseedStyleEntrypoint(layers: TreeseedSiteLayer[], resourcePath: string): string;
29
- export {};
1
+ export { buildTreeseedSiteLayers, resolveTreeseedPageEntrypoint, resolveTreeseedSiteResource, resolveTreeseedStyleEntrypoint, TREESEED_SITE_RESOURCE_KINDS, type TreeseedSiteLayer, type TreeseedSiteLayerDefinition, type TreeseedSiteResourceKind, } from './platform-resources';
@@ -1,123 +1,10 @@
1
- import { existsSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- const TREESEED_SITE_RESOURCE_KINDS = ["pages", "styles", "components"];
4
- const SITE_RESOURCE_KIND_SET = new Set(TREESEED_SITE_RESOURCE_KINDS);
5
- function normalizeKinds(kinds) {
6
- if (!kinds || kinds.length === 0) {
7
- return [...TREESEED_SITE_RESOURCE_KINDS];
8
- }
9
- const normalized = [...new Set(kinds)];
10
- for (const kind of normalized) {
11
- if (!SITE_RESOURCE_KIND_SET.has(kind)) {
12
- throw new Error(`Unknown Treeseed site resource kind "${kind}".`);
13
- }
14
- }
15
- return normalized;
16
- }
17
- function normalizeResourcePath(kind, resourcePath) {
18
- const normalized = resourcePath.replace(/\\/g, "/").replace(/^\/+/, "");
19
- return normalized.startsWith(`${kind}/`) ? normalized : `${kind}/${normalized}`;
20
- }
21
- function isKindSupported(layer, kind) {
22
- return layer.kinds.includes(kind);
23
- }
24
- function getTenantRoot(tenantConfig, projectRoot) {
25
- return tenantConfig.__tenantRoot ?? projectRoot;
26
- }
27
- function normalizeLayerDefinition(owner, baseRoot, layer) {
28
- const kinds = normalizeKinds(layer.kinds);
29
- const root = resolve(baseRoot, layer.root);
30
- return {
31
- owner,
32
- root,
33
- kinds
34
- };
35
- }
36
- function getPluginLayers(entry, context) {
37
- const plugin = entry.plugin;
38
- const rawLayers = typeof plugin.siteLayers === "function" ? plugin.siteLayers({ ...context, pluginConfig: entry.config ?? {} }) : plugin.siteLayers;
39
- if (!rawLayers?.length) {
40
- return [];
41
- }
42
- return rawLayers.map((layer) => normalizeLayerDefinition(entry.package, entry.baseDir, layer));
43
- }
44
- function getTenantLayers(context) {
45
- const tenantRoot = getTenantRoot(context.tenantConfig, context.projectRoot);
46
- const overrides = context.tenantConfig.overrides;
47
- if (!overrides) {
48
- return [];
49
- }
50
- const layers = [];
51
- if (overrides.pagesRoot) {
52
- layers.push({
53
- owner: "tenant",
54
- root: resolve(tenantRoot, overrides.pagesRoot),
55
- kinds: ["pages"]
56
- });
57
- }
58
- if (overrides.stylesRoot) {
59
- layers.push({
60
- owner: "tenant",
61
- root: resolve(tenantRoot, overrides.stylesRoot),
62
- kinds: ["styles"]
63
- });
64
- }
65
- if (overrides.componentsRoot) {
66
- layers.push({
67
- owner: "tenant",
68
- root: resolve(tenantRoot, overrides.componentsRoot),
69
- kinds: ["components"]
70
- });
71
- }
72
- return layers;
73
- }
74
- function buildTreeseedSiteLayers(pluginRuntime, context) {
75
- const layers = [
76
- {
77
- owner: "@treeseed/core",
78
- root: context.coreRoot,
79
- kinds: [...TREESEED_SITE_RESOURCE_KINDS]
80
- }
81
- ];
82
- for (const entry of pluginRuntime.plugins) {
83
- layers.push(...getPluginLayers(entry, context));
84
- }
85
- layers.push(...getTenantLayers(context));
86
- return layers;
87
- }
88
- function resolveTreeseedSiteResource(layers, kind, resourcePath) {
89
- const normalizedPath = normalizeResourcePath(kind, resourcePath);
90
- for (let index = layers.length - 1; index >= 0; index -= 1) {
91
- const layer = layers[index];
92
- if (!layer || !isKindSupported(layer, kind)) {
93
- continue;
94
- }
95
- const candidate = resolve(layer.root, normalizedPath);
96
- if (existsSync(candidate)) {
97
- return candidate;
98
- }
99
- }
100
- return null;
101
- }
102
- function resolveTreeseedPageEntrypoint(layers, resourcePath) {
103
- const hasExplicitExtension = /\.[A-Za-z0-9]+$/u.test(resourcePath);
104
- const candidates = hasExplicitExtension ? [resourcePath, `${resourcePath}.astro`, `${resourcePath}.ts`, `${resourcePath}.js`, `${resourcePath}.mjs`] : [resourcePath, `${resourcePath}.astro`, `${resourcePath}.ts`, `${resourcePath}.js`, `${resourcePath}.mjs`];
105
- for (const candidate of candidates) {
106
- const resolved = resolveTreeseedSiteResource(layers, "pages", candidate);
107
- if (resolved) {
108
- return resolved;
109
- }
110
- }
111
- const normalized = hasExplicitExtension ? normalizeResourcePath("pages", resourcePath) : normalizeResourcePath("pages", `${resourcePath}.astro`);
112
- throw new Error(`Unable to resolve Treeseed page resource "${normalized}".`);
113
- }
114
- function resolveTreeseedStyleEntrypoint(layers, resourcePath) {
115
- const resolved = resolveTreeseedSiteResource(layers, "styles", resourcePath);
116
- if (!resolved) {
117
- throw new Error(`Unable to resolve Treeseed style resource "${normalizeResourcePath("styles", resourcePath)}".`);
118
- }
119
- return resolved;
120
- }
1
+ import {
2
+ buildTreeseedSiteLayers,
3
+ resolveTreeseedPageEntrypoint,
4
+ resolveTreeseedSiteResource,
5
+ resolveTreeseedStyleEntrypoint,
6
+ TREESEED_SITE_RESOURCE_KINDS
7
+ } from "./platform-resources.js";
121
8
  export {
122
9
  TREESEED_SITE_RESOURCE_KINDS,
123
10
  buildTreeseedSiteLayers,
package/dist/site.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { defineConfig, envField } from "astro/config";
2
+ import cloudflare from "@astrojs/cloudflare";
2
3
  import { existsSync, readFileSync } from "node:fs";
3
4
  import { resolve } from "node:path";
4
5
  import { fileURLToPath } from "node:url";
@@ -230,7 +231,8 @@ function createTreeseedSite(tenantConfig, { starlight }) {
230
231
  const injectedDeployConfig = JSON.stringify(deployConfig);
231
232
  const resolvedGlobalCss = resolveTreeseedStyleEntrypoint(siteLayers, "styles/global.css");
232
233
  return defineConfig({
233
- output: "static",
234
+ adapter: deployConfig.surfaces?.web?.provider === "cloudflare" || deployConfig.providers.deploy === "cloudflare" ? cloudflare() : void 0,
235
+ output: deployConfig.surfaces?.web?.provider === "cloudflare" || deployConfig.providers.deploy === "cloudflare" ? "server" : "static",
234
236
  site: siteConfig.site.siteUrl,
235
237
  vite: {
236
238
  define: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@treeseed/core",
3
- "version": "0.4.2",
4
- "description": "Treeseed Research Hub package for Astro, Starlight, knowledge-factory content, and forms.",
3
+ "version": "0.4.4",
4
+ "description": "Treeseed integrated platform starter for Astro/Starlight web runtimes and Hono API runtimes.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
7
7
  "type": "git",
@@ -36,6 +36,10 @@
36
36
  "setup:ci": "npm ci",
37
37
  "build:dist": "node ./scripts/run-ts.mjs ./scripts/build-dist.ts",
38
38
  "prepack": "npm run build:dist",
39
+ "dev": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts",
40
+ "dev:web": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts --surface web",
41
+ "dev:api": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts --surface api",
42
+ "dev:watch": "node ./scripts/run-ts.mjs ./scripts/dev-platform.ts --watch",
39
43
  "starlight:patch": "node ./scripts/run-ts.mjs ./scripts/patch-starlight-content-path.ts",
40
44
  "precheck": "npm run starlight:patch",
41
45
  "check": "node ./scripts/run-ts.mjs ./scripts/run-fixture-astro-command.ts check",
@@ -58,7 +62,7 @@
58
62
  "release:publish": "node ./scripts/run-ts.mjs ./scripts/publish-package.ts"
59
63
  },
60
64
  "dependencies": {
61
- "@treeseed/sdk": "^0.4.2",
65
+ "@treeseed/sdk": "^0.4.4",
62
66
  "@astrojs/check": "^0.9.8",
63
67
  "@astrojs/cloudflare": "^12.6.13",
64
68
  "@astrojs/sitemap": "3.7.0",
@@ -66,6 +70,7 @@
66
70
  "@tailwindcss/vite": "^4.1.4",
67
71
  "astro": "^5.6.1",
68
72
  "esbuild": "^0.28.0",
73
+ "hono": "^4.8.2",
69
74
  "katex": "^0.16.22",
70
75
  "nodemailer": "^8.0.4",
71
76
  "rehype-katex": "^7.0.1",
@@ -98,6 +103,26 @@
98
103
  "types": "./dist/config.d.ts",
99
104
  "default": "./dist/config.js"
100
105
  },
106
+ "./api": {
107
+ "types": "./dist/api.d.ts",
108
+ "default": "./dist/api.js"
109
+ },
110
+ "./railway": {
111
+ "types": "./dist/railway.d.ts",
112
+ "default": "./dist/railway.js"
113
+ },
114
+ "./platform": {
115
+ "types": "./dist/platform.d.ts",
116
+ "default": "./dist/platform.js"
117
+ },
118
+ "./dev": {
119
+ "types": "./dist/dev.d.ts",
120
+ "default": "./dist/dev.js"
121
+ },
122
+ "./plugin-default": {
123
+ "types": "./dist/plugin-default.d.ts",
124
+ "default": "./dist/plugin-default.js"
125
+ },
101
126
  "./content": {
102
127
  "types": "./dist/content.d.ts",
103
128
  "default": "./dist/content.js"
@@ -107,7 +132,16 @@
107
132
  "default": "./dist/content-config.js"
108
133
  },
109
134
  "./tenant": "./dist/tenant/bridge.js",
135
+ "./scripts/dev-platform": "./dist/scripts/dev-platform.js",
110
136
  "./scripts/workspace-bootstrap": "./dist/scripts/workspace-bootstrap.js",
137
+ "./api/app": {
138
+ "types": "./dist/api/app.d.ts",
139
+ "default": "./dist/api/app.js"
140
+ },
141
+ "./api/gateway": {
142
+ "types": "./dist/api/gateway.d.ts",
143
+ "default": "./dist/api/gateway.js"
144
+ },
111
145
  "./site-resources": {
112
146
  "types": "./dist/site-resources.d.ts",
113
147
  "default": "./dist/site-resources.js"