@analogjs/platform 2.0.0-beta.17 → 2.0.0-beta.18
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 +3 -3
- package/src/lib/content-plugin.d.ts +11 -1
- package/src/lib/content-plugin.js +20 -4
- package/src/lib/nx-plugin/src/generators/app/versions/nx_18_X/versions.d.ts +5 -5
- package/src/lib/nx-plugin/src/generators/app/versions/nx_18_X/versions.js +5 -5
- package/src/lib/nx-plugin/src/utils/versions/ng_19_X/versions.d.ts +5 -5
- package/src/lib/nx-plugin/src/utils/versions/ng_19_X/versions.js +5 -5
- package/src/lib/router-plugin.d.ts +14 -4
- package/src/lib/router-plugin.js +69 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/platform",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.18",
|
|
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.
|
|
33
|
-
"@analogjs/vite-plugin-nitro": "^2.0.0-beta.
|
|
32
|
+
"@analogjs/vite-plugin-angular": "^2.0.0-beta.18",
|
|
33
|
+
"@analogjs/vite-plugin-nitro": "^2.0.0-beta.18",
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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,
|
|
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.
|
|
4
|
-
export declare const V18_X_ANALOG_JS_ROUTER = "^2.0.0-beta.
|
|
3
|
+
export declare const V18_X_ANALOG_JS_CONTENT = "^2.0.0-beta.18";
|
|
4
|
+
export declare const V18_X_ANALOG_JS_ROUTER = "^2.0.0-beta.18";
|
|
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.
|
|
7
|
-
export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.
|
|
6
|
+
export declare const V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.18";
|
|
7
|
+
export declare const V18_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.18";
|
|
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.
|
|
23
|
+
export declare const V18_X_ANALOG_JS_PLATFORM = "^2.0.0-beta.18";
|
|
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.
|
|
9
|
-
exports.V18_X_ANALOG_JS_ROUTER = '^2.0.0-beta.
|
|
8
|
+
exports.V18_X_ANALOG_JS_CONTENT = '^2.0.0-beta.18';
|
|
9
|
+
exports.V18_X_ANALOG_JS_ROUTER = '^2.0.0-beta.18';
|
|
10
10
|
exports.V18_X_ANALOG_JS_TRPC = '~0.4.0';
|
|
11
|
-
exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.
|
|
12
|
-
exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.
|
|
11
|
+
exports.V18_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.18';
|
|
12
|
+
exports.V18_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.18';
|
|
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.
|
|
29
|
+
exports.V18_X_ANALOG_JS_PLATFORM = '^2.0.0-beta.18';
|
|
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.
|
|
2
|
-
export declare const V19_X_ANALOG_JS_CONTENT = "^2.0.0-beta.
|
|
1
|
+
export declare const V19_X_ANALOG_JS_ROUTER = "^2.0.0-beta.18";
|
|
2
|
+
export declare const V19_X_ANALOG_JS_CONTENT = "^2.0.0-beta.18";
|
|
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.
|
|
9
|
-
export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.
|
|
10
|
-
export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.
|
|
8
|
+
export declare const V19_X_ANALOG_JS_PLATFORM = "^2.0.0-beta.18";
|
|
9
|
+
export declare const V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = "^2.0.0-beta.18";
|
|
10
|
+
export declare const V19_X_ANALOG_JS_VITEST_ANGULAR = "^2.0.0-beta.18";
|
|
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.
|
|
6
|
-
exports.V19_X_ANALOG_JS_CONTENT = '^2.0.0-beta.
|
|
5
|
+
exports.V19_X_ANALOG_JS_ROUTER = '^2.0.0-beta.18';
|
|
6
|
+
exports.V19_X_ANALOG_JS_CONTENT = '^2.0.0-beta.18';
|
|
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.
|
|
14
|
-
exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.
|
|
15
|
-
exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.
|
|
13
|
+
exports.V19_X_ANALOG_JS_PLATFORM = '^2.0.0-beta.18';
|
|
14
|
+
exports.V19_X_ANALOG_JS_VITE_PLUGIN_ANGULAR = '^2.0.0-beta.18';
|
|
15
|
+
exports.V19_X_ANALOG_JS_VITEST_ANGULAR = '^2.0.0-beta.18';
|
|
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
|
-
*
|
|
5
|
-
* are added/deleted.
|
|
4
|
+
* Router plugin that handles route file discovery and hot module replacement.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
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
|
-
* @
|
|
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[];
|
package/src/lib/router-plugin.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import { normalizePath } from 'vite';
|
|
2
|
-
import
|
|
2
|
+
import { globSync } from 'tinyglobby';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* are added/deleted.
|
|
5
|
+
* Router plugin that handles route file discovery and hot module replacement.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
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
|
-
* @
|
|
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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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) =>
|
|
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
|
-
|
|
128
|
+
// Discover server endpoint files using tinyglobby
|
|
129
|
+
const endpointFiles = globSync([
|
|
83
130
|
`${root}/src/app/pages/**/*.server.ts`,
|
|
84
|
-
...(options?.additionalPagesDirs || [])
|
|
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) =>
|
|
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,
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtL3NyYy9saWIvcm91dGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFzQixNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJcEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFpQjtJQUM1QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxJQUFJLE1BQWtCLENBQUM7SUFDdkIsSUFBSSxJQUFZLENBQUM7SUFFakIsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxlQUFlLENBQUMsTUFBTTtnQkFDcEI7Ozs7O21CQUtHO2dCQUNILFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtvQkFDcEMsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQ3hCLENBQUM7d0JBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxF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
|