@analogjs/platform 2.0.0-beta.17 → 2.0.0-beta.19

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/platform",
3
- "version": "2.0.0-beta.17",
3
+ "version": "2.0.0-beta.19",
4
4
  "description": "The fullstack meta-framework for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -29,8 +29,8 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "nitropack": "^2.11.0",
32
- "@analogjs/vite-plugin-angular": "^2.0.0-beta.17",
33
- "@analogjs/vite-plugin-nitro": "^2.0.0-beta.17",
32
+ "@analogjs/vite-plugin-angular": "^2.0.0-beta.19",
33
+ "@analogjs/vite-plugin-nitro": "^2.0.0-beta.19",
34
34
  "vitefu": "^1.0.0"
35
35
  },
36
36
  "peerDependencies": {
@@ -1,4 +1,4 @@
1
- import { Plugin } from 'vite';
1
+ import type { Plugin } from 'vite';
2
2
  import type { WithShikiHighlighterOptions } from './content/shiki/options.js';
3
3
  import type { WithPrismHighlighterOptions } from './content/prism/options.js';
4
4
  import type { WithMarkedOptions } from './content/marked/index.js';
@@ -9,4 +9,14 @@ export type ContentPluginOptions = {
9
9
  shikiOptions?: WithShikiHighlighterOptions;
10
10
  prismOptions?: WithPrismHighlighterOptions;
11
11
  };
12
+ /**
13
+ * Content plugin that provides markdown and content file processing for Analog.
14
+ *
15
+ * IMPORTANT: This plugin uses tinyglobby for file discovery.
16
+ * Key pitfall with { dot: true }:
17
+ * - Returns relative paths from cwd (e.g., "apps/blog-app/src/content/...")
18
+ * - These paths CANNOT be used directly in ES module imports
19
+ * - Relative paths without ./ or ../ are treated as package names
20
+ * - Must convert to absolute paths for imports to work correctly
21
+ */
12
22
  export declare function contentPlugin({ highlighter, markedOptions, shikiOptions, prismOptions, }?: ContentPluginOptions, options?: Options): Plugin[];
@@ -1,7 +1,17 @@
1
1
  import { normalizePath } from 'vite';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
- import fg from 'fast-glob';
4
+ import { globSync } from 'tinyglobby';
5
+ /**
6
+ * Content plugin that provides markdown and content file processing for Analog.
7
+ *
8
+ * IMPORTANT: This plugin uses tinyglobby for file discovery.
9
+ * Key pitfall with { dot: true }:
10
+ * - Returns relative paths from cwd (e.g., "apps/blog-app/src/content/...")
11
+ * - These paths CANNOT be used directly in ES module imports
12
+ * - Relative paths without ./ or ../ are treated as package names
13
+ * - Must convert to absolute paths for imports to work correctly
14
+ */
5
15
  export function contentPlugin({ highlighter, markedOptions, shikiOptions, prismOptions, } = {}, options) {
6
16
  const cache = new Map();
7
17
  let markedHighlighter;
@@ -110,13 +120,19 @@ export function contentPlugin({ highlighter, markedOptions, shikiOptions, prismO
110
120
  },
111
121
  transform(code) {
112
122
  if (code.includes('ANALOG_CONTENT_FILE_LIST')) {
113
- const contentFilesList = fg.sync([
123
+ const contentFilesList = globSync([
114
124
  `${root}/src/content/**/*.md`,
115
125
  ...(options?.additionalContentDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.md`),
116
126
  ], { dot: true });
117
127
  const eagerImports = [];
118
128
  contentFilesList.forEach((module, index) => {
119
- eagerImports.push(`import { default as analog_module_${index} } from "${module}?analog-content-list=true";`);
129
+ // CRITICAL: tinyglobby returns relative paths like "apps/blog-app/src/content/file.md"
130
+ // These MUST be converted to absolute paths for ES module imports
131
+ // Otherwise Node.js treats "apps" as a package name and throws "Cannot find package 'apps'"
132
+ const absolutePath = module.startsWith('/')
133
+ ? module
134
+ : `${workspaceRoot}/${module}`;
135
+ eagerImports.push(`import { default as analog_module_${index} } from "${absolutePath}?analog-content-list=true";`);
120
136
  });
121
137
  let result = code.replace('let ANALOG_CONTENT_FILE_LIST = {};', `
122
138
  let ANALOG_CONTENT_FILE_LIST = {${contentFilesList.map((module, index) => `"${module.replace(root, '')}": analog_module_${index}`)}};
@@ -159,4 +175,4 @@ export function contentPlugin({ highlighter, markedOptions, shikiOptions, prismO
159
175
  },
160
176
  ];
161
177
  }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL2NvbnRlbnQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFvQjNCLE1BQU0sVUFBVSxhQUFhLENBQzNCLEVBQ0UsV0FBVyxFQUNYLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxNQUNZLEVBQUUsRUFDNUIsT0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFFekMsSUFBSSxpQkFBMkMsQ0FBQztJQUNoRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLE1BQWtCLENBQUM7SUFDdkIsSUFBSSxJQUFZLENBQUM7SUFFakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxNQUFNO29CQUNKLE9BQU87d0JBQ0wsS0FBSyxFQUFFOzRCQUNMLGFBQWEsRUFBRTtnQ0FDYixRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs2QkFDaEM7eUJBQ0Y7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTDtZQUNFLElBQUksRUFBRSw4QkFBOEI7WUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdEIsOERBQThEO2dCQUM5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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS9zcmMvbGliL2NvbnRlbnQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFvQnRDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLEVBQ0UsV0FBVyxFQUNYLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxNQUNZLEVBQUUsRUFDNUIsT0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFFekMsSUFBSSxpQkFBMkMsQ0FBQztJQUNoRCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLE1BQWtCLENBQUM7SUFDdkIsSUFBSSxJQUFZLENBQUM7SUFFakIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxNQUFNO29CQUNKLE9BQU87d0JBQ0wsS0FBSyxFQUFFOzRCQUNMLGFBQWEsRUFBRTtnQ0FDYixRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs2QkFDaEM7eUJBQ0Y7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTDtZQUNFLElBQUksRUFBRSw4QkFBOEI7WUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVB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
@@ -1,10 +1,10 @@
1
1
  export declare const V18_X_NX_DEVKIT = "^20.0.0";
2
2
  export declare const V18_X_NX_ANGULAR = "^20.0.0";
3
- export declare const V18_X_ANALOG_JS_CONTENT = "^2.0.0-beta.17";
4
- export declare const V18_X_ANALOG_JS_ROUTER = "^2.0.0-beta.17";
3
+ export declare const V18_X_ANALOG_JS_CONTENT = "^2.0.0-beta.19";
4
+ export declare const V18_X_ANALOG_JS_ROUTER = "^2.0.0-beta.19";
5
5
  export declare const V18_X_ANALOG_JS_TRPC = "~0.4.0";
6
- export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.17";
7
- export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.17";
6
+ export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.19";
7
+ export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.19";
8
8
  export declare const V18_X_TRPC_CLIENT = "^10.25.0";
9
9
  export declare const V18_X_TRPC_SERVER = "^10.25.0";
10
10
  export declare const V18_X_ISOMORPHIC_FETCH = "^3.0.0";
@@ -20,7 +20,7 @@ export declare const V18_X_TAILWINDCSS = "^4.1.4";
20
20
  export declare const V18_X_TAILWINDCSS_VITE = "^4.1.4";
21
21
  export declare const V18_X_POSTCSS = "^8.5.3";
22
22
  export declare const V18_X_AUTOPREFIXER = "^10.4.0";
23
- export declare const V18_X_ANALOG_JS_PLATFORM = "^2.0.0-beta.17";
23
+ export declare const V18_X_ANALOG_JS_PLATFORM = "^2.0.0-beta.19";
24
24
  export declare const V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR = "^19.0.0";
25
25
  export declare const V18_X_NX_VITE = "^21.0.0";
26
26
  export declare const V18_X_NX_LINTER = "^21.0.0";
@@ -5,11 +5,11 @@ exports.V18_X_ZOD = exports.V18_X_VITEST = exports.V18_X_VITE_TSCONFIG_PATHS = e
5
5
  // dependencies
6
6
  exports.V18_X_NX_DEVKIT = '^20.0.0';
7
7
  exports.V18_X_NX_ANGULAR = '^20.0.0';
8
- exports.V18_X_ANALOG_JS_CONTENT = '^2.0.0-beta.17';
9
- exports.V18_X_ANALOG_JS_ROUTER = '^2.0.0-beta.17';
8
+ exports.V18_X_ANALOG_JS_CONTENT = '^2.0.0-beta.19';
9
+ exports.V18_X_ANALOG_JS_ROUTER = '^2.0.0-beta.19';
10
10
  exports.V18_X_ANALOG_JS_TRPC = '~0.4.0';
11
- exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.17';
12
- exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.17';
11
+ exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.19';
12
+ exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.19';
13
13
  exports.V18_X_TRPC_CLIENT = '^10.25.0';
14
14
  exports.V18_X_TRPC_SERVER = '^10.25.0';
15
15
  exports.V18_X_ISOMORPHIC_FETCH = '^3.0.0';
@@ -26,7 +26,7 @@ exports.V18_X_TAILWINDCSS_VITE = '^4.1.4';
26
26
  exports.V18_X_POSTCSS = '^8.5.3';
27
27
  exports.V18_X_AUTOPREFIXER = '^10.4.0';
28
28
  // devDependencies
29
- exports.V18_X_ANALOG_JS_PLATFORM = '^2.0.0-beta.17';
29
+ exports.V18_X_ANALOG_JS_PLATFORM = '^2.0.0-beta.19';
30
30
  exports.V18_X_ANGULAR_DEVKIT_BUILD_ANGULAR = '^19.0.0';
31
31
  exports.V18_X_NX_VITE = '^21.0.0';
32
32
  exports.V18_X_NX_LINTER = '^21.0.0';
@@ -1,13 +1,13 @@
1
- export declare const V19_X_ANALOG_JS_ROUTER = "^2.0.0-beta.17";
2
- export declare const V19_X_ANALOG_JS_CONTENT = "^2.0.0-beta.17";
1
+ export declare const V19_X_ANALOG_JS_ROUTER = "^2.0.0-beta.19";
2
+ export declare const V19_X_ANALOG_JS_CONTENT = "^2.0.0-beta.19";
3
3
  export declare const V19_X_MARKED = "^5.0.2";
4
4
  export declare const V19_X_MARKED_GFM_HEADING_ID = "^4.1.1";
5
5
  export declare const V19_X_MARKED_HIGHLIGHT = "^2.2.1";
6
6
  export declare const V19_X_MARKED_MANGLE = "^1.1.10";
7
7
  export declare const V19_X_PRISMJS = "^1.29.0";
8
- export declare const V19_X_ANALOG_JS_PLATFORM = "^2.0.0-beta.17";
9
- export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.17";
10
- export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.17";
8
+ export declare const V19_X_ANALOG_JS_PLATFORM = "^2.0.0-beta.19";
9
+ export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.19";
10
+ export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.19";
11
11
  export declare const V19_X_NX_ANGULAR = "^20.0.0";
12
12
  export declare const V19_X_NX_VITE = "^20.0.0";
13
13
  export declare const V19_X_JSDOM = "^22.0.0";
@@ -2,17 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NX_X_LATEST_VITEST = exports.NX_X_LATEST_VITE = exports.V19_X_VITE = exports.V19_X_VITEST = exports.V19_X_VITE_TSCONFIG_PATHS = exports.V19_X_JSDOM = exports.V19_X_NX_VITE = exports.V19_X_NX_ANGULAR = exports.V19_X_ANALOG_JS_VITEST_ANGULAR = exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = exports.V19_X_ANALOG_JS_PLATFORM = exports.V19_X_PRISMJS = exports.V19_X_MARKED_MANGLE = exports.V19_X_MARKED_HIGHLIGHT = exports.V19_X_MARKED_GFM_HEADING_ID = exports.V19_X_MARKED = exports.V19_X_ANALOG_JS_CONTENT = exports.V19_X_ANALOG_JS_ROUTER = void 0;
4
4
  // V19_X
5
- exports.V19_X_ANALOG_JS_ROUTER = '^2.0.0-beta.17';
6
- exports.V19_X_ANALOG_JS_CONTENT = '^2.0.0-beta.17';
5
+ exports.V19_X_ANALOG_JS_ROUTER = '^2.0.0-beta.19';
6
+ exports.V19_X_ANALOG_JS_CONTENT = '^2.0.0-beta.19';
7
7
  exports.V19_X_MARKED = '^5.0.2';
8
8
  exports.V19_X_MARKED_GFM_HEADING_ID = '^4.1.1';
9
9
  exports.V19_X_MARKED_HIGHLIGHT = '^2.2.1';
10
10
  exports.V19_X_MARKED_MANGLE = '^1.1.10';
11
11
  exports.V19_X_PRISMJS = '^1.29.0';
12
12
  // devDependencies
13
- exports.V19_X_ANALOG_JS_PLATFORM = '^2.0.0-beta.17';
14
- exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.17';
15
- exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.17';
13
+ exports.V19_X_ANALOG_JS_PLATFORM = '^2.0.0-beta.19';
14
+ exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.19';
15
+ exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.19';
16
16
  exports.V19_X_NX_ANGULAR = '^20.0.0';
17
17
  exports.V19_X_NX_VITE = '^20.0.0';
18
18
  exports.V19_X_JSDOM = '^22.0.0';
@@ -1,11 +1,21 @@
1
1
  import { Plugin } from 'vite';
2
2
  import { Options } from './options.js';
3
3
  /**
4
- * This plugin invalidates the files for routes when new files
5
- * are added/deleted.
4
+ * Router plugin that handles route file discovery and hot module replacement.
6
5
  *
7
- * Workaround for: https://github.com/vitejs/vite/issues/10616
6
+ * This plugin provides three main functionalities:
7
+ * 1. Route invalidation when files are added/deleted (HMR workaround)
8
+ * 2. Dynamic route file discovery and import generation
9
+ * 3. Content route file discovery for markdown and Analog content
8
10
  *
9
- * @returns
11
+ * @param options Configuration options for the router plugin
12
+ * @returns Array of Vite plugins for route handling
13
+ *
14
+ * IMPORTANT: This plugin uses tinyglobby for file discovery.
15
+ * Key behavior with { dot: true, absolute: true }:
16
+ * - Returns absolute paths for ALL discovered files
17
+ * - Path normalization is required to match expected output format
18
+ * - Files within project root must use relative paths in object keys
19
+ * - Files outside project root keep absolute paths in object keys
10
20
  */
11
21
  export declare function routerPlugin(options?: Options): Plugin[];
@@ -1,13 +1,23 @@
1
1
  import { normalizePath } from 'vite';
2
- import fg from 'fast-glob';
2
+ import { globSync } from 'tinyglobby';
3
3
  import { resolve } from 'node:path';
4
4
  /**
5
- * This plugin invalidates the files for routes when new files
6
- * are added/deleted.
5
+ * Router plugin that handles route file discovery and hot module replacement.
7
6
  *
8
- * Workaround for: https://github.com/vitejs/vite/issues/10616
7
+ * This plugin provides three main functionalities:
8
+ * 1. Route invalidation when files are added/deleted (HMR workaround)
9
+ * 2. Dynamic route file discovery and import generation
10
+ * 3. Content route file discovery for markdown and Analog content
9
11
  *
10
- * @returns
12
+ * @param options Configuration options for the router plugin
13
+ * @returns Array of Vite plugins for route handling
14
+ *
15
+ * IMPORTANT: This plugin uses tinyglobby for file discovery.
16
+ * Key behavior with { dot: true, absolute: true }:
17
+ * - Returns absolute paths for ALL discovered files
18
+ * - Path normalization is required to match expected output format
19
+ * - Files within project root must use relative paths in object keys
20
+ * - Files outside project root keep absolute paths in object keys
11
21
  */
12
22
  export function routerPlugin(options) {
13
23
  const workspaceRoot = normalizePath(options?.workspaceRoot ?? process.cwd());
@@ -17,6 +27,12 @@ export function routerPlugin(options) {
17
27
  {
18
28
  name: 'analogjs-router-invalidate-routes',
19
29
  configureServer(server) {
30
+ /**
31
+ * Invalidates route modules when files are added or deleted.
32
+ * This is a workaround for Vite's HMR limitations with dynamic imports.
33
+ *
34
+ * @param path The file path that was added or deleted
35
+ */
20
36
  function invalidateRoutes(path) {
21
37
  if (path.includes(`routes`) ||
22
38
  path.includes(`pages`) ||
@@ -46,26 +62,49 @@ export function routerPlugin(options) {
46
62
  config = _config;
47
63
  root = normalizePath(resolve(workspaceRoot, config.root || '.') || '.');
48
64
  },
65
+ /**
66
+ * Transforms code to replace ANALOG_ROUTE_FILES and ANALOG_CONTENT_ROUTE_FILES
67
+ * placeholders with actual dynamic imports of discovered route and content files.
68
+ *
69
+ * @param code The source code to transform
70
+ * @returns Transformed code with dynamic imports or undefined if no transformation needed
71
+ */
49
72
  transform(code) {
50
73
  if (code.includes('ANALOG_ROUTE_FILES') ||
51
74
  code.includes('ANALOG_CONTENT_ROUTE_FILES')) {
52
- const routeFiles = fg.sync([
75
+ // Discover route files using tinyglobby
76
+ // NOTE: { absolute: true } returns absolute paths for ALL files
77
+ const routeFiles = globSync([
53
78
  `${root}/app/routes/**/*.ts`,
54
79
  `${root}/src/app/routes/**/*.ts`,
55
80
  `${root}/src/app/pages/**/*.page.ts`,
56
81
  ...(options?.additionalPagesDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.page.ts`),
57
- ], { dot: true });
58
- const contentRouteFiles = fg.sync([
82
+ ], { dot: true, absolute: true });
83
+ // Discover content files using tinyglobby
84
+ const contentRouteFiles = globSync([
59
85
  `${root}/src/app/routes/**/*.md`,
60
86
  `${root}/src/app/pages/**/*.md`,
61
87
  `${root}/src/content/**/*.md`,
62
88
  ...(options?.additionalContentDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.md`),
63
- ], { dot: true });
89
+ ], { dot: true, absolute: true });
64
90
  let result = code.replace('ANALOG_ROUTE_FILES = {};', `
65
- ANALOG_ROUTE_FILES = {${routeFiles.map((module) => `"${module.replace(root, '')}": () => import('${module}')`)}};
91
+ ANALOG_ROUTE_FILES = {${routeFiles.map((module) => {
92
+ // CRITICAL: tinyglobby returns absolute paths, but we need relative paths for project files
93
+ // to match expected output format. Library files keep absolute paths.
94
+ const key = module.startsWith(root)
95
+ ? module.replace(root, '')
96
+ : module;
97
+ return `"${key}": () => import('${module}')`;
98
+ })}};
66
99
  `);
67
100
  result = result.replace('ANALOG_CONTENT_ROUTE_FILES = {};', `
68
- ANALOG_CONTENT_ROUTE_FILES = {${contentRouteFiles.map((module) => `"${module.replace(root, '')}": () => import('${module}?analog-content-file=true').then(m => m.default)`)}};
101
+ ANALOG_CONTENT_ROUTE_FILES = {${contentRouteFiles.map((module) => {
102
+ // Same path normalization as route files
103
+ const key = module.startsWith(root)
104
+ ? module.replace(root, '')
105
+ : module;
106
+ return `"${key}": () => import('${module}?analog-content-file=true').then(m => m.default)`;
107
+ })}};
69
108
  `);
70
109
  return {
71
110
  code: result,
@@ -77,14 +116,28 @@ export function routerPlugin(options) {
77
116
  },
78
117
  {
79
118
  name: 'analog-glob-endpoints',
119
+ /**
120
+ * Transforms code to replace ANALOG_PAGE_ENDPOINTS placeholder
121
+ * with actual dynamic imports of discovered server endpoint files.
122
+ *
123
+ * @param code The source code to transform
124
+ * @returns Transformed code with dynamic imports or undefined if no transformation needed
125
+ */
80
126
  transform(code) {
81
127
  if (code.includes('ANALOG_PAGE_ENDPOINTS')) {
82
- const endpointFiles = fg.sync([
128
+ // Discover server endpoint files using tinyglobby
129
+ const endpointFiles = globSync([
83
130
  `${root}/src/app/pages/**/*.server.ts`,
84
- ...(options?.additionalPagesDirs || [])?.map((glob) => `${workspaceRoot}${glob}/**/*.server.ts`),
85
- ], { dot: true });
131
+ ...(options?.additionalPagesDirs || []).map((glob) => `${workspaceRoot}${glob}/**/*.server.ts`),
132
+ ], { dot: true, absolute: true });
86
133
  const result = code.replace('ANALOG_PAGE_ENDPOINTS = {};', `
87
- ANALOG_PAGE_ENDPOINTS = {${endpointFiles.map((module) => `"${module.replace(root, '')}": () => import('${module}')`)}};
134
+ ANALOG_PAGE_ENDPOINTS = {${endpointFiles.map((module) => {
135
+ // Same path normalization for consistency
136
+ const key = module.startsWith(root)
137
+ ? module.replace(root, '')
138
+ : module;
139
+ return `"${key}": () => import('${module}')`;
140
+ })}};
88
141
  `);
89
142
  return {
90
143
  code: result,
@@ -96,4 +149,4 @@ export function routerPlugin(options) {
96
149
  },
97
150
  ];
98
151
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUlwQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFpQjtJQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLE1BQWtCLENBQUM7SUFDdkIsSUFBSSxJQUFZLENBQUM7SUFFakIsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO29CQUNwQyxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO3dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzt3QkFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFDeEIsQ0FBQzt3QkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0NBQ25CLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQ0FDN0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxn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
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJcEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFpQjtJQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLE1BQWtCLENBQUM7SUFDdkIsSUFBSSxJQUFZLENBQUM7SUFFakIsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEI7Ozs7O21CQUtHO2dCQUNILFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtvQkFDcEMsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3hCLENBQUM7d0JBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxF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