@analogjs/router 1.7.0-beta.1 → 1.7.0-beta.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.
package/esm2022/index.mjs CHANGED
@@ -3,4 +3,5 @@ export { defineRouteMeta, injectActivatedRoute, injectRouter, } from './lib/defi
3
3
  export { provideFileRouter } from './lib/provide-file-router';
4
4
  export { injectLoad } from './lib/inject-load';
5
5
  export { getLoadResolver } from './lib/get-load-resolver';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLFlBQVksR0FDYixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IFJvdXRlRXhwb3J0IH0gZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCB0eXBlIHsgRmlsZXMgfSBmcm9tICcuL2xpYi9yb3V0ZXMnO1xuZXhwb3J0IHsgcm91dGVzLCBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL2xpYi9yb3V0ZXMnO1xuZXhwb3J0IHtcbiAgZGVmaW5lUm91dGVNZXRhLFxuICBpbmplY3RBY3RpdmF0ZWRSb3V0ZSxcbiAgaW5qZWN0Um91dGVyLFxufSBmcm9tICcuL2xpYi9kZWZpbmUtcm91dGUnO1xuZXhwb3J0IHsgUm91dGVNZXRhIH0gZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCB7IHByb3ZpZGVGaWxlUm91dGVyIH0gZnJvbSAnLi9saWIvcHJvdmlkZS1maWxlLXJvdXRlcic7XG5leHBvcnQgeyBNZXRhVGFnIH0gZnJvbSAnLi9saWIvbWV0YS10YWdzJztcbmV4cG9ydCB7IFBhZ2VTZXJ2ZXJMb2FkLCBMb2FkUmVzdWx0IH0gZnJvbSAnLi9saWIvcm91dGUtdHlwZXMnO1xuZXhwb3J0IHsgaW5qZWN0TG9hZCB9IGZyb20gJy4vbGliL2luamVjdC1sb2FkJztcbmV4cG9ydCB7IGdldExvYWRSZXNvbHZlciB9IGZyb20gJy4vbGliL2dldC1sb2FkLXJlc29sdmVyJztcbiJdfQ==
6
+ export { requestContextInterceptor } from './lib/request-context';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLFlBQVksR0FDYixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IFJvdXRlRXhwb3J0IH0gZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCB0eXBlIHsgRmlsZXMgfSBmcm9tICcuL2xpYi9yb3V0ZXMnO1xuZXhwb3J0IHsgcm91dGVzLCBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL2xpYi9yb3V0ZXMnO1xuZXhwb3J0IHtcbiAgZGVmaW5lUm91dGVNZXRhLFxuICBpbmplY3RBY3RpdmF0ZWRSb3V0ZSxcbiAgaW5qZWN0Um91dGVyLFxufSBmcm9tICcuL2xpYi9kZWZpbmUtcm91dGUnO1xuZXhwb3J0IHsgUm91dGVNZXRhIH0gZnJvbSAnLi9saWIvbW9kZWxzJztcbmV4cG9ydCB7IHByb3ZpZGVGaWxlUm91dGVyIH0gZnJvbSAnLi9saWIvcHJvdmlkZS1maWxlLXJvdXRlcic7XG5leHBvcnQgeyBNZXRhVGFnIH0gZnJvbSAnLi9saWIvbWV0YS10YWdzJztcbmV4cG9ydCB7IFBhZ2VTZXJ2ZXJMb2FkLCBMb2FkUmVzdWx0IH0gZnJvbSAnLi9saWIvcm91dGUtdHlwZXMnO1xuZXhwb3J0IHsgaW5qZWN0TG9hZCB9IGZyb20gJy4vbGliL2luamVjdC1sb2FkJztcbmV4cG9ydCB7IGdldExvYWRSZXNvbHZlciB9IGZyb20gJy4vbGliL2dldC1sb2FkLXJlc29sdmVyJztcbmV4cG9ydCB7IHJlcXVlc3RDb250ZXh0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2xpYi9yZXF1ZXN0LWNvbnRleHQnO1xuIl19
@@ -1,5 +1,6 @@
1
1
  export const ANALOG_META_KEY = Symbol('@analogjs/router Analog Route Metadata Key');
2
- export const PAGE_ENDPOINTS = import.meta.glob([
3
- '/src/app/pages/**/*.server.ts',
4
- ]);
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvZW5kcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQ25DLDRDQUE0QyxDQUM3QyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzdDLCtCQUErQjtDQUNoQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQU5BTE9HX01FVEFfS0VZID0gU3ltYm9sKFxuICAnQGFuYWxvZ2pzL3JvdXRlciBBbmFsb2cgUm91dGUgTWV0YWRhdGEgS2V5J1xuKTtcblxuZXhwb3J0IGNvbnN0IFBBR0VfRU5EUE9JTlRTID0gaW1wb3J0Lm1ldGEuZ2xvYihbXG4gICcvc3JjL2FwcC9wYWdlcy8qKi8qLnNlcnZlci50cycsXG5dKTtcbiJdfQ==
2
+ /**
3
+ * This variable reference is replaced with a glob of all route endpoints.
4
+ */
5
+ export let ANALOG_PAGE_ENDPOINTS = {};
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvZW5kcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQ25DLDRDQUE0QyxDQUM3QyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsSUFBSSxxQkFBcUIsR0FBUSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQU5BTE9HX01FVEFfS0VZID0gU3ltYm9sKFxuICAnQGFuYWxvZ2pzL3JvdXRlciBBbmFsb2cgUm91dGUgTWV0YWRhdGEgS2V5J1xuKTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIHJlZmVyZW5jZSBpcyByZXBsYWNlZCB3aXRoIGEgZ2xvYiBvZiBhbGwgcm91dGUgZW5kcG9pbnRzLlxuICovXG5leHBvcnQgbGV0IEFOQUxPR19QQUdFX0VORFBPSU5UUzogYW55ID0ge307XG4iXX0=
@@ -12,9 +12,7 @@ import { updateMetaTagsOnRouteChange } from './meta-tags';
12
12
  */
13
13
  export function provideFileRouter(...features) {
14
14
  return makeEnvironmentProviders([
15
- // TODO: remove type casting after Angular >=15.1.1 upgrade
16
- // https://github.com/angular/angular/pull/48720
17
- provideRouter(routes, ...features).ɵproviders,
15
+ provideRouter(routes, ...features),
18
16
  {
19
17
  provide: ENVIRONMENT_INITIALIZER,
20
18
  multi: true,
@@ -22,4 +20,4 @@ export function provideFileRouter(...features) {
22
20
  },
23
21
  ]);
24
22
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1maWxlLXJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zcmMvbGliL3Byb3ZpZGUtZmlsZS1yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2Qix3QkFBd0IsR0FFekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFHLFFBQTBCO0lBRTdCLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsMkRBQTJEO1FBQzNELGdEQUFnRDtRQUU5QyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUdsQyxDQUFDLFVBQVU7UUFDWjtZQUNFLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLEVBQUU7U0FDOUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIFByb3ZpZGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHByb3ZpZGVSb3V0ZXIsIFJvdXRlckZlYXR1cmVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgcm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IHsgdXBkYXRlTWV0YVRhZ3NPblJvdXRlQ2hhbmdlIH0gZnJvbSAnLi9tZXRhLXRhZ3MnO1xuXG4vKipcbiAqIFNldHMgdXAgcHJvdmlkZXJzIGZvciB0aGUgQW5ndWxhciByb3V0ZXIsIGFuZCByZWdpc3RlcnNcbiAqIGZpbGUtYmFzZWQgcm91dGVzLiBBZGRpdGlvbmFsIGZlYXR1cmVzIGNhbiBiZSBwcm92aWRlZFxuICogdG8gZnVydGhlciBjb25maWd1cmUgdGhlIGJlaGF2aW9yIG9mIHRoZSByb3V0ZXIuXG4gKlxuICogQHBhcmFtIGZlYXR1cmVzXG4gKiBAcmV0dXJucyBQcm92aWRlcnMgYW5kIGZlYXR1cmVzIHRvIGNvbmZpZ3VyZSB0aGUgcm91dGVyIHdpdGggcm91dGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRmlsZVJvdXRlcihcbiAgLi4uZmVhdHVyZXM6IFJvdXRlckZlYXR1cmVzW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgLy8gVE9ETzogcmVtb3ZlIHR5cGUgY2FzdGluZyBhZnRlciBBbmd1bGFyID49MTUuMS4xIHVwZ3JhZGVcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL3B1bGwvNDg3MjBcbiAgICAoXG4gICAgICBwcm92aWRlUm91dGVyKHJvdXRlcywgLi4uZmVhdHVyZXMpIGFzIHVua25vd24gYXMge1xuICAgICAgICDJtXByb3ZpZGVyczogUHJvdmlkZXJbXTtcbiAgICAgIH1cbiAgICApLsm1cHJvdmlkZXJzLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogKCkgPT4gdXBkYXRlTWV0YVRhZ3NPblJvdXRlQ2hhbmdlKCksXG4gICAgfSxcbiAgXSk7XG59XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1maWxlLXJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zcmMvbGliL3Byb3ZpZGUtZmlsZS1yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2Qix3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixHQUFHLFFBQTBCO0lBRTdCLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNsQztZQUNFLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsMkJBQTJCLEVBQUU7U0FDOUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcHJvdmlkZVJvdXRlciwgUm91dGVyRmVhdHVyZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyByb3V0ZXMgfSBmcm9tICcuL3JvdXRlcyc7XG5pbXBvcnQgeyB1cGRhdGVNZXRhVGFnc09uUm91dGVDaGFuZ2UgfSBmcm9tICcuL21ldGEtdGFncyc7XG5cbi8qKlxuICogU2V0cyB1cCBwcm92aWRlcnMgZm9yIHRoZSBBbmd1bGFyIHJvdXRlciwgYW5kIHJlZ2lzdGVyc1xuICogZmlsZS1iYXNlZCByb3V0ZXMuIEFkZGl0aW9uYWwgZmVhdHVyZXMgY2FuIGJlIHByb3ZpZGVkXG4gKiB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHJvdXRlci5cbiAqXG4gKiBAcGFyYW0gZmVhdHVyZXNcbiAqIEByZXR1cm5zIFByb3ZpZGVycyBhbmQgZmVhdHVyZXMgdG8gY29uZmlndXJlIHRoZSByb3V0ZXIgd2l0aCByb3V0ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVGaWxlUm91dGVyKFxuICAuLi5mZWF0dXJlczogUm91dGVyRmVhdHVyZXNbXVxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICBwcm92aWRlUm91dGVyKHJvdXRlcywgLi4uZmVhdHVyZXMpLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogKCkgPT4gdXBkYXRlTWV0YVRhZ3NPblJvdXRlQ2hhbmdlKCksXG4gICAgfSxcbiAgXSk7XG59XG4iXX0=
@@ -0,0 +1,74 @@
1
+ import { TransferState, inject, makeStateKey } from '@angular/core';
2
+ import { HttpHeaders, HttpResponse, } from '@angular/common/http';
3
+ import { from, of } from 'rxjs';
4
+ import { injectBaseURL } from '@analogjs/router/tokens';
5
+ /**
6
+ * Interceptor that is server-aware when making HttpClient requests.
7
+ * Server-side requests use the full URL
8
+ * Prerendering uses the internal Nitro $fetch function, along with state transfer
9
+ * Client-side requests use the window.location.origin
10
+ *
11
+ * @param req HttpRequest<unknown>
12
+ * @param next HttpHandlerFn
13
+ * @returns
14
+ */
15
+ export function requestContextInterceptor(req, next) {
16
+ const baseUrl = injectBaseURL();
17
+ const transferState = inject(TransferState);
18
+ const storeKey = makeStateKey(`analog_${req.urlWithParams}`);
19
+ // during prerendering with Nitro
20
+ if (typeof global !== 'undefined' &&
21
+ global.$fetch &&
22
+ baseUrl &&
23
+ (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {
24
+ const requestUrl = new URL(req.url, baseUrl);
25
+ const fetchUrl = req.url.includes('/api/')
26
+ ? requestUrl.pathname
27
+ : requestUrl.href;
28
+ return from(global.$fetch
29
+ .raw(fetchUrl, {
30
+ method: req.method,
31
+ params: requestUrl.searchParams,
32
+ headers: req.headers.keys().reduce((hdrs, current) => {
33
+ return {
34
+ ...hdrs,
35
+ [current]: req.headers.get(current),
36
+ };
37
+ }, {}),
38
+ })
39
+ .then((res) => {
40
+ const cacheResponse = {
41
+ body: res._data,
42
+ headers: new HttpHeaders(res.headers),
43
+ status: 200,
44
+ statusText: 'OK',
45
+ url: fetchUrl,
46
+ };
47
+ const transferResponse = new HttpResponse(cacheResponse);
48
+ transferState.set(storeKey, cacheResponse);
49
+ return transferResponse;
50
+ }));
51
+ }
52
+ // on the client
53
+ if (!import.meta.env.SSR && req.url.startsWith('/')) {
54
+ const cacheRestoreResponse = transferState.get(storeKey, null);
55
+ if (cacheRestoreResponse) {
56
+ transferState.remove(storeKey);
57
+ return of(new HttpResponse(cacheRestoreResponse));
58
+ }
59
+ return next(req.clone({
60
+ url: `${window.location.origin}${req.url}`,
61
+ }));
62
+ }
63
+ // on the server
64
+ if (baseUrl && (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {
65
+ const requestUrl = req.url.startsWith(baseUrl) && !req.url.startsWith('/')
66
+ ? req.url
67
+ : `${baseUrl}${req.url}`;
68
+ return next(req.clone({
69
+ url: requestUrl,
70
+ }));
71
+ }
72
+ return next(req);
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvcmVxdWVzdC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBRUwsV0FBVyxFQUVYLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLEdBQXlCLEVBQ3pCLElBQW1CO0lBRW5CLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQVUsVUFBVSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUV0RSxpQ0FBaUM7SUFDakMsSUFDRSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQzdCLE1BQU0sQ0FBQyxNQUFNO1FBQ2IsT0FBTztRQUNQLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDeEQsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUNyQixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUVwQixPQUFPLElBQUksQ0FDVCxNQUFNLENBQUMsTUFBTTthQUNWLEdBQUcsQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQWE7WUFDekIsTUFBTSxFQUFFLFVBQVUsQ0FBQyxZQUFZO1lBQy9CLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDbkQsT0FBTztvQkFDTCxHQUFHLElBQUk7b0JBQ1AsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7aUJBQ3BDLENBQUM7WUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ1AsQ0FBQzthQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1osTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDZixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztnQkFDckMsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLEdBQUcsRUFBRSxRQUFRO2FBQ2QsQ0FBQztZQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFekQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDM0MsT0FBTyxnQkFBZ0IsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxvQkFBb0IsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUvRCxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvQixPQUFPLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUNULEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDUixHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFO1NBQzNDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxNQUFNLFVBQVUsR0FDZCxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNyRCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDVCxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTdCLE9BQU8sSUFBSSxDQUNULEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDUixHQUFHLEVBQUUsVUFBVTtTQUNoQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNmZXJTdGF0ZSwgaW5qZWN0LCBtYWtlU3RhdGVLZXkgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBIYW5kbGVyRm4sXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cFJlc3BvbnNlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGluamVjdEJhc2VVUkwgfSBmcm9tICdAYW5hbG9nanMvcm91dGVyL3Rva2Vucyc7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgdGhhdCBpcyBzZXJ2ZXItYXdhcmUgd2hlbiBtYWtpbmcgSHR0cENsaWVudCByZXF1ZXN0cy5cbiAqIFNlcnZlci1zaWRlIHJlcXVlc3RzIHVzZSB0aGUgZnVsbCBVUkxcbiAqIFByZXJlbmRlcmluZyB1c2VzIHRoZSBpbnRlcm5hbCBOaXRybyAkZmV0Y2ggZnVuY3Rpb24sIGFsb25nIHdpdGggc3RhdGUgdHJhbnNmZXJcbiAqIENsaWVudC1zaWRlIHJlcXVlc3RzIHVzZSB0aGUgd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICpcbiAqIEBwYXJhbSByZXEgSHR0cFJlcXVlc3Q8dW5rbm93bj5cbiAqIEBwYXJhbSBuZXh0IEh0dHBIYW5kbGVyRm5cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0Q29udGV4dEludGVyY2VwdG9yKFxuICByZXE6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICBuZXh0OiBIdHRwSGFuZGxlckZuXG4pIHtcbiAgY29uc3QgYmFzZVVybCA9IGluamVjdEJhc2VVUkwoKTtcbiAgY29uc3QgdHJhbnNmZXJTdGF0ZSA9IGluamVjdChUcmFuc2ZlclN0YXRlKTtcbiAgY29uc3Qgc3RvcmVLZXkgPSBtYWtlU3RhdGVLZXk8dW5rbm93bj4oYGFuYWxvZ18ke3JlcS51cmxXaXRoUGFyYW1zfWApO1xuXG4gIC8vIGR1cmluZyBwcmVyZW5kZXJpbmcgd2l0aCBOaXRyb1xuICBpZiAoXG4gICAgdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBnbG9iYWwuJGZldGNoICYmXG4gICAgYmFzZVVybCAmJlxuICAgIChyZXEudXJsLnN0YXJ0c1dpdGgoJy8nKSB8fCByZXEudXJsLnN0YXJ0c1dpdGgoYmFzZVVybCkpXG4gICkge1xuICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBuZXcgVVJMKHJlcS51cmwsIGJhc2VVcmwpO1xuICAgIGNvbnN0IGZldGNoVXJsID0gcmVxLnVybC5pbmNsdWRlcygnL2FwaS8nKVxuICAgICAgPyByZXF1ZXN0VXJsLnBhdGhuYW1lXG4gICAgICA6IHJlcXVlc3RVcmwuaHJlZjtcblxuICAgIHJldHVybiBmcm9tKFxuICAgICAgZ2xvYmFsLiRmZXRjaFxuICAgICAgICAucmF3KGZldGNoVXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kIGFzIGFueSxcbiAgICAgICAgICBwYXJhbXM6IHJlcXVlc3RVcmwuc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLmtleXMoKS5yZWR1Y2UoKGhkcnMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmhkcnMsXG4gICAgICAgICAgICAgIFtjdXJyZW50XTogcmVxLmhlYWRlcnMuZ2V0KGN1cnJlbnQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LCB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBjYWNoZVJlc3BvbnNlID0ge1xuICAgICAgICAgICAgYm9keTogcmVzLl9kYXRhLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHJlcy5oZWFkZXJzKSxcbiAgICAgICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgICAgIHVybDogZmV0Y2hVcmwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclJlc3BvbnNlID0gbmV3IEh0dHBSZXNwb25zZShjYWNoZVJlc3BvbnNlKTtcblxuICAgICAgICAgIHRyYW5zZmVyU3RhdGUuc2V0KHN0b3JlS2V5LCBjYWNoZVJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmZXJSZXNwb25zZTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLy8gb24gdGhlIGNsaWVudFxuICBpZiAoIWltcG9ydC5tZXRhLmVudi5TU1IgJiYgcmVxLnVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICBjb25zdCBjYWNoZVJlc3RvcmVSZXNwb25zZSA9IHRyYW5zZmVyU3RhdGUuZ2V0KHN0b3JlS2V5LCBudWxsKTtcblxuICAgIGlmIChjYWNoZVJlc3RvcmVSZXNwb25zZSkge1xuICAgICAgdHJhbnNmZXJTdGF0ZS5yZW1vdmUoc3RvcmVLZXkpO1xuICAgICAgcmV0dXJuIG9mKG5ldyBIdHRwUmVzcG9uc2UoY2FjaGVSZXN0b3JlUmVzcG9uc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChcbiAgICAgIHJlcS5jbG9uZSh7XG4gICAgICAgIHVybDogYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0ke3JlcS51cmx9YCxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIG9uIHRoZSBzZXJ2ZXJcbiAgaWYgKGJhc2VVcmwgJiYgKHJlcS51cmwuc3RhcnRzV2l0aCgnLycpIHx8IHJlcS51cmwuc3RhcnRzV2l0aChiYXNlVXJsKSkpIHtcbiAgICBjb25zdCByZXF1ZXN0VXJsID1cbiAgICAgIHJlcS51cmwuc3RhcnRzV2l0aChiYXNlVXJsKSAmJiAhcmVxLnVybC5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgPyByZXEudXJsXG4gICAgICAgIDogYCR7YmFzZVVybH0ke3JlcS51cmx9YDtcblxuICAgIHJldHVybiBuZXh0KFxuICAgICAgcmVxLmNsb25lKHtcbiAgICAgICAgdXJsOiByZXF1ZXN0VXJsLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG5leHQocmVxKTtcbn1cbiJdfQ==
@@ -1,8 +1,9 @@
1
1
  import { inject } from '@angular/core';
2
2
  import { HttpClient } from '@angular/common/http';
3
+ import { injectBaseURL } from '@analogjs/router/tokens';
3
4
  import { firstValueFrom } from 'rxjs';
4
5
  import { ROUTE_META_TAGS_KEY } from './meta-tags';
5
- import { PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';
6
+ import { ANALOG_PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';
6
7
  export function toRouteConfig(routeMeta) {
7
8
  if (routeMeta && isRedirectRouteMeta(routeMeta)) {
8
9
  return routeMeta;
@@ -23,11 +24,16 @@ export function toRouteConfig(routeMeta) {
23
24
  routeConfig.resolve = {
24
25
  ...routeConfig.resolve,
25
26
  load: async (route) => {
27
+ const baseUrl = injectBaseURL();
26
28
  const routeConfig = route.routeConfig;
27
- if (PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {
29
+ if (ANALOG_PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {
28
30
  const { queryParams, fragment: hash, params, parent } = route;
29
31
  const segment = parent?.url.map((segment) => segment.path).join('/') || '';
30
- const url = new URL('', import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL']);
32
+ const url = new URL('', import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] ||
33
+ baseUrl ||
34
+ (typeof window !== 'undefined' && window.location.origin
35
+ ? window.location.origin
36
+ : ''));
31
37
  url.pathname = `${url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'}api/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;
32
38
  url.search = `${new URLSearchParams(queryParams).toString()}`;
33
39
  url.hash = hash ?? '';
@@ -35,7 +41,8 @@ export function toRouteConfig(routeMeta) {
35
41
  url.pathname = url.pathname.replace(`[${param}]`, params[param]);
36
42
  });
37
43
  url.pathname = url.pathname.replace('**', segment);
38
- if (globalThis.$fetch) {
44
+ if (!!import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] &&
45
+ globalThis.$fetch) {
39
46
  return globalThis.$fetch(url.pathname);
40
47
  }
41
48
  const http = inject(HttpClient);
@@ -49,4 +56,4 @@ export function toRouteConfig(routeMeta) {
49
56
  function isRedirectRouteMeta(routeMeta) {
50
57
  return !!routeMeta.redirectTo;
51
58
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvcm91dGUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlELE1BQU0sVUFBVSxhQUFhLENBQUMsU0FBZ0M7SUFDNUQsSUFBSSxTQUFTLElBQUksbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDMUUsQ0FBQztTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdEMsV0FBVyxDQUFDLE9BQU8sR0FBRztZQUNwQixHQUFHLFdBQVcsQ0FBQyxPQUFPO1lBQ3RCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFPLEdBQUc7UUFDcEIsR0FBRyxXQUFXLENBQUMsT0FBTztRQUN0QixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUV6QixDQUFDO1lBRUYsSUFBSSxjQUFjLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUM5RCxNQUFNLE9BQU8sR0FDWCxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FDYixHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUM3RCxjQUFjLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEQsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQzlELEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFFdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDcEMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLENBQUMsQ0FBQztnQkFDSCxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFbkQsSUFBSyxVQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUMvQixPQUFRLFVBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFFRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7S0FDRixDQUFDO0lBRUYsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQzFCLFNBQW9CO0lBRXBCLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVkaXJlY3RSb3V0ZU1ldGEsIFJvdXRlQ29uZmlnLCBSb3V0ZU1ldGEgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBST1VURV9NRVRBX1RBR1NfS0VZIH0gZnJvbSAnLi9tZXRhLXRhZ3MnO1xuaW1wb3J0IHsgUEFHRV9FTkRQT0lOVFMsIEFOQUxPR19NRVRBX0tFWSB9IGZyb20gJy4vZW5kcG9pbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRvUm91dGVDb25maWcocm91dGVNZXRhOiBSb3V0ZU1ldGEgfCB1bmRlZmluZWQpOiBSb3V0ZUNvbmZpZyB7XG4gIGlmIChyb3V0ZU1ldGEgJiYgaXNSZWRpcmVjdFJvdXRlTWV0YShyb3V0ZU1ldGEpKSB7XG4gICAgcmV0dXJuIHJvdXRlTWV0YTtcbiAgfVxuXG4gIGxldCB7IG1ldGEsIC4uLnJvdXRlQ29uZmlnIH0gPSByb3V0ZU1ldGEgPz8ge307XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobWV0YSkpIHtcbiAgICByb3V0ZUNvbmZpZy5kYXRhID0geyAuLi5yb3V0ZUNvbmZpZy5kYXRhLCBbUk9VVEVfTUVUQV9UQUdTX0tFWV06IG1ldGEgfTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgbWV0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJvdXRlQ29uZmlnLnJlc29sdmUgPSB7XG4gICAgICAuLi5yb3V0ZUNvbmZpZy5yZXNvbHZlLFxuICAgICAgW1JPVVRFX01FVEFfVEFHU19LRVldOiBtZXRhLFxuICAgIH07XG4gIH1cblxuICBpZiAoIXJvdXRlQ29uZmlnKSB7XG4gICAgcm91dGVDb25maWcgPSB7fTtcbiAgfVxuXG4gIHJvdXRlQ29uZmlnLnJlc29sdmUgPSB7XG4gICAgLi4ucm91dGVDb25maWcucmVzb2x2ZSxcbiAgICBsb2FkOiBhc3luYyAocm91dGUpID0+IHtcbiAgICAgIGNvbnN0IHJvdXRlQ29uZmlnID0gcm91dGUucm91dGVDb25maWcgYXMgUm91dGUgJiB7XG4gICAgICAgIFtBTkFMT0dfTUVUQV9LRVldOiB7IGVuZHBvaW50OiBzdHJpbmc7IGVuZHBvaW50S2V5OiBzdHJpbmcgfTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChQQUdFX0VORFBPSU5UU1tyb3V0ZUNvbmZpZ1tBTkFMT0dfTUVUQV9LRVldLmVuZHBvaW50S2V5XSkge1xuICAgICAgICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBmcmFnbWVudDogaGFzaCwgcGFyYW1zLCBwYXJlbnQgfSA9IHJvdXRlO1xuICAgICAgICBjb25zdCBzZWdtZW50ID1cbiAgICAgICAgICBwYXJlbnQ/LnVybC5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aCkuam9pbignLycpIHx8ICcnO1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCcnLCBpbXBvcnQubWV0YS5lbnZbJ1ZJVEVfQU5BTE9HX1BVQkxJQ19CQVNFX1VSTCddKTtcbiAgICAgICAgdXJsLnBhdGhuYW1lID0gYCR7XG4gICAgICAgICAgdXJsLnBhdGhuYW1lLmVuZHNXaXRoKCcvJykgPyB1cmwucGF0aG5hbWUgOiB1cmwucGF0aG5hbWUgKyAnLydcbiAgICAgICAgfWFwaS9fYW5hbG9nJHtyb3V0ZUNvbmZpZ1tBTkFMT0dfTUVUQV9LRVldLmVuZHBvaW50fWA7XG4gICAgICAgIHVybC5zZWFyY2ggPSBgJHtuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5UGFyYW1zKS50b1N0cmluZygpfWA7XG4gICAgICAgIHVybC5oYXNoID0gaGFzaCA/PyAnJztcblxuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgICAgdXJsLnBhdGhuYW1lID0gdXJsLnBhdGhuYW1lLnJlcGxhY2UoYFske3BhcmFtfV1gLCBwYXJhbXNbcGFyYW1dKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHVybC5wYXRobmFtZSA9IHVybC5wYXRobmFtZS5yZXBsYWNlKCcqKicsIHNlZ21lbnQpO1xuXG4gICAgICAgIGlmICgoZ2xvYmFsVGhpcyBhcyBhbnkpLiRmZXRjaCkge1xuICAgICAgICAgIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBhbnkpLiRmZXRjaCh1cmwucGF0aG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKGh0dHAuZ2V0KGAke3VybC5ocmVmfWApKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIHJvdXRlQ29uZmlnO1xufVxuXG5mdW5jdGlvbiBpc1JlZGlyZWN0Um91dGVNZXRhKFxuICByb3V0ZU1ldGE6IFJvdXRlTWV0YVxuKTogcm91dGVNZXRhIGlzIFJlZGlyZWN0Um91dGVNZXRhIHtcbiAgcmV0dXJuICEhcm91dGVNZXRhLnJlZGlyZWN0VG87XG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvcm91dGUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJFLE1BQU0sVUFBVSxhQUFhLENBQUMsU0FBZ0M7SUFDNUQsSUFBSSxTQUFTLElBQUksbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFFL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDMUUsQ0FBQztTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDdEMsV0FBVyxDQUFDLE9BQU8sR0FBRztZQUNwQixHQUFHLFdBQVcsQ0FBQyxPQUFPO1lBQ3RCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFB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QztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBpbmplY3RCYXNlVVJMIH0gZnJvbSAnQGFuYWxvZ2pzL3JvdXRlci90b2tlbnMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVkaXJlY3RSb3V0ZU1ldGEsIFJvdXRlQ29uZmlnLCBSb3V0ZU1ldGEgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBST1VURV9NRVRBX1RBR1NfS0VZIH0gZnJvbSAnLi9tZXRhLXRhZ3MnO1xuaW1wb3J0IHsgQU5BTE9HX1BBR0VfRU5EUE9JTlRTLCBBTkFMT0dfTUVUQV9LRVkgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1JvdXRlQ29uZmlnKHJvdXRlTWV0YTogUm91dGVNZXRhIHwgdW5kZWZpbmVkKTogUm91dGVDb25maWcge1xuICBpZiAocm91dGVNZXRhICYmIGlzUmVkaXJlY3RSb3V0ZU1ldGEocm91dGVNZXRhKSkge1xuICAgIHJldHVybiByb3V0ZU1ldGE7XG4gIH1cblxuICBsZXQgeyBtZXRhLCAuLi5yb3V0ZUNvbmZpZyB9ID0gcm91dGVNZXRhID8/IHt9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG1ldGEpKSB7XG4gICAgcm91dGVDb25maWcuZGF0YSA9IHsgLi4ucm91dGVDb25maWcuZGF0YSwgW1JPVVRFX01FVEFfVEFHU19LRVldOiBtZXRhIH07XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1ldGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByb3V0ZUNvbmZpZy5yZXNvbHZlID0ge1xuICAgICAgLi4ucm91dGVDb25maWcucmVzb2x2ZSxcbiAgICAgIFtST1VURV9NRVRBX1RBR1NfS0VZXTogbWV0YSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFyb3V0ZUNvbmZpZykge1xuICAgIHJvdXRlQ29uZmlnID0ge307XG4gIH1cblxuICByb3V0ZUNvbmZpZy5yZXNvbHZlID0ge1xuICAgIC4uLnJvdXRlQ29uZmlnLnJlc29sdmUsXG4gICAgbG9hZDogYXN5bmMgKHJvdXRlKSA9PiB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gaW5qZWN0QmFzZVVSTCgpO1xuICAgICAgY29uc3Qgcm91dGVDb25maWcgPSByb3V0ZS5yb3V0ZUNvbmZpZyBhcyBSb3V0ZSAmIHtcbiAgICAgICAgW0FOQUxPR19NRVRBX0tFWV06IHsgZW5kcG9pbnQ6IHN0cmluZzsgZW5kcG9pbnRLZXk6IHN0cmluZyB9O1xuICAgICAgfTtcblxuICAgICAgaWYgKEFOQUxPR19QQUdFX0VORFBPSU5UU1tyb3V0ZUNvbmZpZ1tBTkFMT0dfTUVUQV9LRVldLmVuZHBvaW50S2V5XSkge1xuICAgICAgICBjb25zdCB7IHF1ZXJ5UGFyYW1zLCBmcmFnbWVudDogaGFzaCwgcGFyYW1zLCBwYXJlbnQgfSA9IHJvdXRlO1xuICAgICAgICBjb25zdCBzZWdtZW50ID1cbiAgICAgICAgICBwYXJlbnQ/LnVybC5tYXAoKHNlZ21lbnQpID0+IHNlZ21lbnQucGF0aCkuam9pbignLycpIHx8ICcnO1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgICAgICAgICcnLFxuICAgICAgICAgIGltcG9ydC5tZXRhLmVudlsnVklURV9BTkFMT0dfUFVCTElDX0JBU0VfVVJMJ10gfHxcbiAgICAgICAgICAgIGJhc2VVcmwgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgICAgICAgID8gd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICAgICAgICA6ICcnKVxuICAgICAgICApO1xuXG4gICAgICAgIHVybC5wYXRobmFtZSA9IGAke1xuICAgICAgICAgIHVybC5wYXRobmFtZS5lbmRzV2l0aCgnLycpID8gdXJsLnBhdGhuYW1lIDogdXJsLnBhdGhuYW1lICsgJy8nXG4gICAgICAgIH1hcGkvX2FuYWxvZyR7cm91dGVDb25maWdbQU5BTE9HX01FVEFfS0VZXS5lbmRwb2ludH1gO1xuICAgICAgICB1cmwuc2VhcmNoID0gYCR7bmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeVBhcmFtcykudG9TdHJpbmcoKX1gO1xuICAgICAgICB1cmwuaGFzaCA9IGhhc2ggPz8gJyc7XG5cbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICAgIHVybC5wYXRobmFtZSA9IHVybC5wYXRobmFtZS5yZXBsYWNlKGBbJHtwYXJhbX1dYCwgcGFyYW1zW3BhcmFtXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUucmVwbGFjZSgnKionLCBzZWdtZW50KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgISFpbXBvcnQubWV0YS5lbnZbJ1ZJVEVfQU5BTE9HX1BVQkxJQ19CQVNFX1VSTCddICYmXG4gICAgICAgICAgKGdsb2JhbFRoaXMgYXMgYW55KS4kZmV0Y2hcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIGFueSkuJGZldGNoKHVybC5wYXRobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20oaHR0cC5nZXQoYCR7dXJsLmhyZWZ9YCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcm91dGVDb25maWc7XG59XG5cbmZ1bmN0aW9uIGlzUmVkaXJlY3RSb3V0ZU1ldGEoXG4gIHJvdXRlTWV0YTogUm91dGVNZXRhXG4pOiByb3V0ZU1ldGEgaXMgUmVkaXJlY3RSb3V0ZU1ldGEge1xuICByZXR1cm4gISFyb3V0ZU1ldGEucmVkaXJlY3RUbztcbn1cbiJdfQ==
@@ -1,15 +1,16 @@
1
1
  /// <reference types="vite/client" />
2
2
  import { toRouteConfig } from './route-config';
3
3
  import { toMarkdownModule } from './markdown-helpers';
4
- import { APP_DIR, ENDPOINT_EXTENSION } from './constants';
4
+ import { ENDPOINT_EXTENSION } from './constants';
5
5
  import { ANALOG_META_KEY } from './endpoints';
6
- const FILES = import.meta.glob([
7
- '/app/routes/**/*.ts',
8
- '/src/app/routes/**/*.ts',
9
- '/src/app/pages/**/*.page.ts',
10
- '/src/app/pages/**/*.page.analog',
11
- ]);
12
- const CONTENT_FILES = import.meta.glob(['/src/app/routes/**/*.md', '/src/app/pages/**/*.md'], { query: '?analog-content-file=true', import: 'default' });
6
+ /**
7
+ * This variable reference is replaced with a glob of all page routes.
8
+ */
9
+ let ANALOG_ROUTE_FILES = {};
10
+ /**
11
+ * This variable reference is replaced with a glob of all content routes.
12
+ */
13
+ let ANALOG_CONTENT_ROUTE_FILES = {};
13
14
  /**
14
15
  * A function used to parse list of files and create configuration of routes.
15
16
  *
@@ -110,7 +111,7 @@ function toRoutes(rawRoutes, files) {
110
111
  const rawEndpoint = rawRoute.filename
111
112
  .replace(/\.page\.(ts|analog)$/, '')
112
113
  .replace(/\[\.{3}.+\]/, '**') // [...not-found] => **
113
- .split(APP_DIR)[1];
114
+ .replace(/^(.*?)\/pages/, '/pages');
114
115
  // replace periods, remove (index) paths
115
116
  const endpoint = (rawEndpoint || '')
116
117
  .replace(/\./g, '/')
@@ -168,5 +169,8 @@ function deprioritizeSegment(segment) {
168
169
  // deprioritize param and wildcard segments
169
170
  return segment.replace(':', '~~').replace('**', '~~~~');
170
171
  }
171
- export const routes = createRoutes({ ...FILES, ...CONTENT_FILES });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUtyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFjO0lBQzFDLHFCQUFxQjtJQUNyQix5QkFBeUI7SUFDekIsNkJBQTZCO0lBQzdCLGlDQUFpQztDQUNsQyxDQUFDLENBQUM7QUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDcEMsQ0FBQyx5QkFBeUIsRUFBRSx3QkFBd0IsQ0FBQyxFQUNyRCxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQzFELENBQUM7QUFpQkY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVk7SUFDdkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUM3RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7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QUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzFDLDJDQUEyQztJQUMzQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBWSxZQUFZLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGUvY2xpZW50XCIgLz5cblxuaW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB0eXBlIHsgUm91dGVFeHBvcnQsIFJvdXRlTWV0YSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IHRvUm91dGVDb25maWcgfSBmcm9tICcuL3JvdXRlLWNvbmZpZyc7XG5pbXBvcnQgeyB0b01hcmtkb3duTW9kdWxlIH0gZnJvbSAnLi9tYXJrZG93bi1oZWxwZXJzJztcbmltcG9ydCB7IEFQUF9ESVIsIEVORFBPSU5UX0VYVEVOU0lPTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFOQUxPR19NRVRBX0tFWSB9IGZyb20gJy4vZW5kcG9pbnRzJztcblxuY29uc3QgRklMRVMgPSBpbXBvcnQubWV0YS5nbG9iPFJvdXRlRXhwb3J0PihbXG4gICcvYXBwL3JvdXRlcy8qKi8qLnRzJyxcbiAgJy9zcmMvYXBwL3JvdXRlcy8qKi8qLnRzJyxcbiAgJy9zcmMvYXBwL3BhZ2VzLyoqLyoucGFnZS50cycsXG4gICcvc3JjL2FwcC9wYWdlcy8qKi8qLnBhZ2UuYW5hbG9nJyxcbl0pO1xuXG5jb25zdCBDT05URU5UX0ZJTEVTID0gaW1wb3J0Lm1ldGEuZ2xvYjxzdHJpbmc+KFxuICBbJy9zcmMvYXBwL3JvdXRlcy8qKi8qLm1kJywgJy9zcmMvYXBwL3BhZ2VzLyoqLyoubWQnXSxcbiAgeyBxdWVyeTogJz9hbmFsb2ctY29udGVudC1maWxlPXRydWUnLCBpbXBvcnQ6ICdkZWZhdWx0JyB9XG4pO1xuXG5leHBvcnQgdHlwZSBGaWxlcyA9IFJlY29yZDxzdHJpbmcsICgpID0+IFByb21pc2U8Um91dGVFeHBvcnQgfCBzdHJpbmc+PjtcblxudHlwZSBSYXdSb3V0ZSA9IHtcbiAgZmlsZW5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHJhd1NlZ21lbnQ6IHN0cmluZztcbiAgYW5jZXN0b3JSYXdTZWdtZW50czogc3RyaW5nW107XG4gIHNlZ21lbnQ6IHN0cmluZztcbiAgbGV2ZWw6IG51bWJlcjtcbiAgY2hpbGRyZW46IFJhd1JvdXRlW107XG59O1xuXG50eXBlIFJhd1JvdXRlTWFwID0gUmVjb3JkPHN0cmluZywgUmF3Um91dGU+O1xuXG50eXBlIFJhd1JvdXRlQnlMZXZlbE1hcCA9IFJlY29yZDxudW1iZXIsIFJhd1JvdXRlTWFwPjtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHVzZWQgdG8gcGFyc2UgbGlzdCBvZiBmaWxlcyBhbmQgY3JlYXRlIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGVzLlxuICpcbiAqIEBwYXJhbSBmaWxlc1xuICogQHJldHVybnMgQXJyYXkgb2Ygcm91dGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXMoZmlsZXM6IEZpbGVzKTogUm91dGVbXSB7XG4gIGNvbnN0IGZpbGVuYW1lcyA9IE9iamVjdC5rZXlzKGZpbGVzKTtcblxuICBpZiAoZmlsZW5hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIG1hcCBmaWxlbmFtZXMgdG8gcmF3IHJvdXRlcyBhbmQgZ3JvdXAgdGhlbSBieSBsZXZlbFxuICBjb25zdCByYXdSb3V0ZXNCeUxldmVsTWFwID0gZmlsZW5hbWVzLnJlZHVjZSgoYWNjLCBmaWxlbmFtZSkgPT4ge1xuICAgIGNvbnN0IHJhd1BhdGggPSB0b1Jhd1BhdGgoZmlsZW5hbWUpO1xuICAgIGNvbnN0IHJhd1NlZ21lbnRzID0gcmF3UGF0aC5zcGxpdCgnLycpO1xuICAgIC8vIG5lc3RpbmcgbGV2ZWwgc3RhcnRzIGF0IDBcbiAgICAvLyByYXdQYXRoOiAvcHJvZHVjdHMgPT4gbGV2ZWw6IDBcbiAgICAvLyByYXdQYXRoOiAvcHJvZHVjdHMvOmlkID0+IGxldmVsOiAxXG4gICAgY29uc3QgbGV2ZWwgPSByYXdTZWdtZW50cy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IHJhd1NlZ21lbnQgPSByYXdTZWdtZW50c1tsZXZlbF07XG4gICAgY29uc3QgYW5jZXN0b3JSYXdTZWdtZW50cyA9IHJhd1NlZ21lbnRzLnNsaWNlKDAsIGxldmVsKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hY2MsXG4gICAgICBbbGV2ZWxdOiB7XG4gICAgICAgIC4uLmFjY1tsZXZlbF0sXG4gICAgICAgIFtyYXdQYXRoXToge1xuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIHJhd1NlZ21lbnQsXG4gICAgICAgICAgYW5jZXN0b3JSYXdTZWdtZW50cyxcbiAgICAgICAgICBzZWdtZW50OiB0b1NlZ21lbnQocmF3U2VnbWVudCksXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9LCB7fSBhcyBSYXdSb3V0ZUJ5TGV2ZWxNYXApO1xuXG4gIGNvbnN0IGFsbExldmVscyA9IE9iamVjdC5rZXlzKHJhd1JvdXRlc0J5TGV2ZWxNYXApLm1hcChOdW1iZXIpO1xuICBjb25zdCBtYXhMZXZlbCA9IE1hdGgubWF4KC4uLmFsbExldmVscyk7XG5cbiAgLy8gYWRkIGVhY2ggcmF3IHJvdXRlIHRvIGl0cyBwYXJlbnQncyBjaGlsZHJlbiBhcnJheVxuICBmb3IgKGxldCBsZXZlbCA9IG1heExldmVsOyBsZXZlbCA+IDA7IGxldmVsLS0pIHtcbiAgICBjb25zdCByYXdSb3V0ZXNNYXAgPSByYXdSb3V0ZXNCeUxldmVsTWFwW2xldmVsXTtcbiAgICBjb25zdCByYXdQYXRocyA9IE9iamVjdC5rZXlzKHJhd1JvdXRlc01hcCk7XG5cbiAgICBmb3IgKGNvbnN0IHJhd1BhdGggb2YgcmF3UGF0aHMpIHtcbiAgICAgIGNvbnN0IHJhd1JvdXRlID0gcmF3Um91dGVzTWFwW3Jhd1BhdGhdO1xuICAgICAgY29uc3QgcGFyZW50UmF3UGF0aCA9IHJhd1JvdXRlLmFuY2VzdG9yUmF3U2VnbWVudHMuam9pbignLycpO1xuICAgICAgY29uc3QgcGFyZW50UmF3U2VnbWVudEluZGV4ID0gcmF3Um91dGUuYW5jZXN0b3JSYXdTZWdtZW50cy5sZW5ndGggLSAxO1xuICAgICAgY29uc3QgcGFyZW50UmF3U2VnbWVudCA9XG4gICAgICAgIHJhd1JvdXRlLmFuY2VzdG9yUmF3U2VnbWVudHNbcGFyZW50UmF3U2VnbWVudEluZGV4XTtcblxuICAgICAgLy8gY3JlYXRlIHRoZSBwYXJlbnQgbGV2ZWwgYW5kL29yIHJhdyByb3V0ZSBpZiBpdCBkb2VzIG5vdCBleGlzdFxuICAgICAgLy8gcGFyZW50IHJvdXRlIHdvbid0IGV4aXN0IGZvciBuZXN0ZWQgcm91dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGxheW91dCByb3V0ZVxuICAgICAgcmF3Um91dGVzQnlMZXZlbE1hcFtsZXZlbCAtIDFdIHx8PSB7fTtcbiAgICAgIHJhd1JvdXRlc0J5TGV2ZWxNYXBbbGV2ZWwgLSAxXVtwYXJlbnRSYXdQYXRoXSB8fD0ge1xuICAgICAgICBmaWxlbmFtZTogbnVsbCxcbiAgICAgICAgcmF3U2VnbWVudDogcGFyZW50UmF3U2VnbWVudCxcbiAgICAgICAgYW5jZXN0b3JSYXdTZWdtZW50czogcmF3Um91dGUuYW5jZXN0b3JSYXdTZWdtZW50cy5zbGljZShcbiAgICAgICAgICAwLFxuICAgICAgICAgIHBhcmVudFJhd1NlZ21lbnRJbmRleFxuICAgICAgICApLFxuICAgICAgICBzZWdtZW50OiB0b1NlZ21lbnQocGFyZW50UmF3U2VnbWVudCksXG4gICAgICAgIGxldmVsOiBsZXZlbCAtIDEsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIHJhd1JvdXRlc0J5TGV2ZWxNYXBbbGV2ZWwgLSAxXVtwYXJlbnRSYXdQYXRoXS5jaGlsZHJlbi5wdXNoKHJhd1JvdXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyBvbmx5IHRha2UgcmF3IHJvdXRlcyBmcm9tIHRoZSByb290IGxldmVsXG4gIC8vIHNpbmNlIHRoZXkgYWxyZWFkeSBjb250YWluIG5lc3RlZCByb3V0ZXMgYXMgdGhlaXIgY2hpbGRyZW5cbiAgY29uc3Qgcm9vdFJhd1JvdXRlc01hcCA9IHJhd1JvdXRlc0J5TGV2ZWxNYXBbMF07XG4gIGNvbnN0IHJhd1JvdXRlcyA9IE9iamVjdC5rZXlzKHJvb3RSYXdSb3V0ZXNNYXApLm1hcChcbiAgICAoc2VnbWVudCkgPT4gcm9vdFJhd1JvdXRlc01hcFtzZWdtZW50XVxuICApO1xuICBzb3J0UmF3Um91dGVzKHJhd1JvdXRlcyk7XG5cbiAgcmV0dXJuIHRvUm91dGVzKHJhd1JvdXRlcywgZmlsZXMpO1xufVxuXG5mdW5jdGlvbiB0b1Jhd1BhdGgoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBmaWxlbmFtZVxuICAgIC5yZXBsYWNlKFxuICAgICAgLy8gY29udmVydCB0byByZWxhdGl2ZSBwYXRoIGFuZCByZW1vdmUgZmlsZSBleHRlbnNpb25cbiAgICAgIC9eXFwvKC4qPylcXC9yb3V0ZXNcXC98XlxcLyguKj8pXFwvcGFnZXNcXC98XFwvYXBwXFwvcm91dGVzXFwvfChcXC5wYWdlXFwuKGpzfHRzfGFuYWxvZykkKXwoXFwuKHRzfG1kfGFuYWxvZykkKS9nLFxuICAgICAgJydcbiAgICApXG4gICAgLnJlcGxhY2UoL1xcW1xcLnszfS4rXFxdLywgJyoqJykgLy8gWy4uLm5vdC1mb3VuZF0gPT4gKipcbiAgICAucmVwbGFjZSgvXFxbKFteXFxdXSspXFxdL2csICc6JDEnKTsgLy8gW2lkXSA9PiA6aWRcbn1cblxuZnVuY3Rpb24gdG9TZWdtZW50KHJhd1NlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByYXdTZWdtZW50XG4gICAgLnJlcGxhY2UoL2luZGV4fFxcKC4qP1xcKS9nLCAnJykgLy8gcmVwbGFjZSBuYW1lZCBlbXB0eSBzZWdtZW50c1xuICAgIC5yZXBsYWNlKC9cXC58XFwvKy9nLCAnLycpIC8vIHJlcGxhY2UgZG90cyB3aXRoIHNsYXNoZXMgYW5kIHJlbW92ZSByZWR1bmRhbnQgc2xhc2hlc1xuICAgIC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyk7IC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzXG59XG5cbmZ1bmN0aW9uIHRvUm91dGVzKHJhd1JvdXRlczogUmF3Um91dGVbXSwgZmlsZXM6IEZpbGVzKTogUm91dGVbXSB7XG4gIGNvbnN0IHJvdXRlczogUm91dGVbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmF3Um91dGUgb2YgcmF3Um91dGVzKSB7XG4gICAgY29uc3QgY2hpbGRyZW46IFJvdXRlW10gfCB1bmRlZmluZWQgPVxuICAgICAgcmF3Um91dGUuY2hpbGRyZW4ubGVuZ3RoID4gMFxuICAgICAgICA/IHRvUm91dGVzKHJhd1JvdXRlLmNoaWxkcmVuLCBmaWxlcylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IG1vZHVsZTogKCgpID0+IFByb21pc2U8Um91dGVFeHBvcnQ+KSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgYW5hbG9nTWV0YTogeyBlbmRwb2ludDogc3RyaW5nOyBlbmRwb2ludEtleTogc3RyaW5nIH0gfCB1bmRlZmluZWQgPVxuICAgICAgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJhd1JvdXRlLmZpbGVuYW1lKSB7XG4gICAgICBjb25zdCBpc01hcmtkb3duRmlsZSA9IHJhd1JvdXRlLmZpbGVuYW1lLmVuZHNXaXRoKCcubWQnKTtcbiAgICAgIG1vZHVsZSA9IGlzTWFya2Rvd25GaWxlXG4gICAgICAgID8gdG9NYXJrZG93bk1vZHVsZShmaWxlc1tyYXdSb3V0ZS5maWxlbmFtZV0gYXMgKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgICAgICA6IChmaWxlc1tyYXdSb3V0ZS5maWxlbmFtZV0gYXMgKCkgPT4gUHJvbWlzZTxSb3V0ZUV4cG9ydD4pO1xuXG4gICAgICBjb25zdCBlbmRwb2ludEtleSA9IHJhd1JvdXRlLmZpbGVuYW1lLnJlcGxhY2UoXG4gICAgICAgIC9cXC5wYWdlXFwuKHRzfGFuYWxvZykkLyxcbiAgICAgICAgRU5EUE9JTlRfRVhURU5TSU9OXG4gICAgICApO1xuXG4gICAgICAvLyBnZXQgZW5kcG9pbnQgcGF0aFxuICAgICAgY29uc3QgcmF3RW5kcG9pbnQgPSByYXdSb3V0ZS5maWxlbmFtZVxuICAgICAgICAucmVwbGFjZSgvXFwucGFnZVxcLih0c3xhbmFsb2cpJC8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXFxbXFwuezN9LitcXF0vLCAnKionKSAvLyBbLi4ubm90LWZvdW5kXSA9PiAqKlxuICAgICAgICAuc3BsaXQoQVBQX0RJUilbMV07XG5cbiAgICAgIC8vIHJlcGxhY2UgcGVyaW9kcywgcmVtb3ZlIChpbmRleCkgcGF0aHNcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gKHJhd0VuZHBvaW50IHx8ICcnKVxuICAgICAgICAucmVwbGFjZSgvXFwuL2csICcvJylcbiAgICAgICAgLnJlcGxhY2UoL1xcL1xcKCguKj8pXFwpJC8sICcvLSQxLScpO1xuXG4gICAgICBhbmFsb2dNZXRhID0ge1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgZW5kcG9pbnRLZXksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSAmIHsgbWV0YT86IHR5cGVvZiBhbmFsb2dNZXRhIH0gPSBtb2R1bGVcbiAgICAgID8ge1xuICAgICAgICAgIHBhdGg6IHJhd1JvdXRlLnNlZ21lbnQsXG4gICAgICAgICAgbG9hZENoaWxkcmVuOiAoKSA9PlxuICAgICAgICAgICAgbW9kdWxlISgpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpbXBvcnQubWV0YS5lbnYuUFJPRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc01vZHVsZURlZmF1bHQgPSAhIW0uZGVmYXVsdDtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNSZWRpcmVjdCA9ICEhbS5yb3V0ZU1ldGE/LnJlZGlyZWN0VG87XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc01vZHVsZURlZmF1bHQgJiYgIWhhc1JlZGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgIGBbQW5hbG9nXSBNaXNzaW5nIGRlZmF1bHQgZXhwb3J0IGF0ICR7cmF3Um91dGUuZmlsZW5hbWV9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBtLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgICAuLi50b1JvdXRlQ29uZmlnKG0ucm91dGVNZXRhIGFzIFJvdXRlTWV0YSB8IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgIFtBTkFMT0dfTUVUQV9LRVldOiBhbmFsb2dNZXRhLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfVxuICAgICAgOiB7IHBhdGg6IHJhd1JvdXRlLnNlZ21lbnQsIGNoaWxkcmVuIH07XG5cbiAgICByb3V0ZXMucHVzaChyb3V0ZSk7XG4gIH1cblxuICByZXR1cm4gcm91dGVzO1xufVxuXG5mdW5jdGlvbiBzb3J0UmF3Um91dGVzKHJhd1JvdXRlczogUmF3Um91dGVbXSk6IHZvaWQge1xuICByYXdSb3V0ZXMuc29ydCgoYSwgYikgPT4ge1xuICAgIGxldCBzZWdtZW50QSA9IGRlcHJpb3JpdGl6ZVNlZ21lbnQoYS5zZWdtZW50KTtcbiAgICBsZXQgc2VnbWVudEIgPSBkZXByaW9yaXRpemVTZWdtZW50KGIuc2VnbWVudCk7XG5cbiAgICAvLyBwcmlvcml0aXplIHJvdXRlcyB3aXRoIGZld2VyIGNoaWxkcmVuXG4gICAgaWYgKGEuY2hpbGRyZW4ubGVuZ3RoID4gYi5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHNlZ21lbnRBID0gYH4ke3NlZ21lbnRBfWA7XG4gICAgfSBlbHNlIGlmIChhLmNoaWxkcmVuLmxlbmd0aCA8IGIuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBzZWdtZW50QiA9IGB+JHtzZWdtZW50Qn1gO1xuICAgIH1cblxuICAgIHJldHVybiBzZWdtZW50QSA+IHNlZ21lbnRCID8gMSA6IC0xO1xuICB9KTtcblxuICBmb3IgKGNvbnN0IHJhd1JvdXRlIG9mIHJhd1JvdXRlcykge1xuICAgIHNvcnRSYXdSb3V0ZXMocmF3Um91dGUuY2hpbGRyZW4pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlcHJpb3JpdGl6ZVNlZ21lbnQoc2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gZGVwcmlvcml0aXplIHBhcmFtIGFuZCB3aWxkY2FyZCBzZWdtZW50c1xuICByZXR1cm4gc2VnbWVudC5yZXBsYWNlKCc6JywgJ35+JykucmVwbGFjZSgnKionLCAnfn5+ficpO1xufVxuXG5leHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZVtdID0gY3JlYXRlUm91dGVzKHsgLi4uRklMRVMsIC4uLkNPTlRFTlRfRklMRVMgfSk7XG4iXX0=
172
+ export const routes = createRoutes({
173
+ ...ANALOG_ROUTE_FILES,
174
+ ...ANALOG_CONTENT_ROUTE_FILES,
175
+ });
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcm91dGVyL3NyYy9saWIvcm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUtyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFXLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUM7O0dBRUc7QUFDSCxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUU1Qjs7R0FFRztBQUNILElBQUksMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBaUJwQzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBWTtJQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXJDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxzREFBc0Q7SUFDdEQsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQzdELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLDRCQUE0QjtRQUM1QixpQ0FBaUM7UUFDakMscUNBQXFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENB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SyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzFDLDJDQUEyQztJQUMzQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBWSxZQUFZLENBQUM7SUFDMUMsR0FBRyxrQkFBa0I7SUFDckIsR0FBRywwQkFBMEI7Q0FDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ2aXRlL2NsaWVudFwiIC8+XG5cbmltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJvdXRlRXhwb3J0LCBSb3V0ZU1ldGEgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyB0b1JvdXRlQ29uZmlnIH0gZnJvbSAnLi9yb3V0ZS1jb25maWcnO1xuaW1wb3J0IHsgdG9NYXJrZG93bk1vZHVsZSB9IGZyb20gJy4vbWFya2Rvd24taGVscGVycyc7XG5pbXBvcnQgeyBBUFBfRElSLCBFTkRQT0lOVF9FWFRFTlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBTkFMT0dfTUVUQV9LRVkgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSByZWZlcmVuY2UgaXMgcmVwbGFjZWQgd2l0aCBhIGdsb2Igb2YgYWxsIHBhZ2Ugcm91dGVzLlxuICovXG5sZXQgQU5BTE9HX1JPVVRFX0ZJTEVTID0ge307XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSByZWZlcmVuY2UgaXMgcmVwbGFjZWQgd2l0aCBhIGdsb2Igb2YgYWxsIGNvbnRlbnQgcm91dGVzLlxuICovXG5sZXQgQU5BTE9HX0NPTlRFTlRfUk9VVEVfRklMRVMgPSB7fTtcblxuZXhwb3J0IHR5cGUgRmlsZXMgPSBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBQcm9taXNlPFJvdXRlRXhwb3J0IHwgc3RyaW5nPj47XG5cbnR5cGUgUmF3Um91dGUgPSB7XG4gIGZpbGVuYW1lOiBzdHJpbmcgfCBudWxsO1xuICByYXdTZWdtZW50OiBzdHJpbmc7XG4gIGFuY2VzdG9yUmF3U2VnbWVudHM6IHN0cmluZ1tdO1xuICBzZWdtZW50OiBzdHJpbmc7XG4gIGxldmVsOiBudW1iZXI7XG4gIGNoaWxkcmVuOiBSYXdSb3V0ZVtdO1xufTtcblxudHlwZSBSYXdSb3V0ZU1hcCA9IFJlY29yZDxzdHJpbmcsIFJhd1JvdXRlPjtcblxudHlwZSBSYXdSb3V0ZUJ5TGV2ZWxNYXAgPSBSZWNvcmQ8bnVtYmVyLCBSYXdSb3V0ZU1hcD47XG5cbi8qKlxuICogQSBmdW5jdGlvbiB1c2VkIHRvIHBhcnNlIGxpc3Qgb2YgZmlsZXMgYW5kIGNyZWF0ZSBjb25maWd1cmF0aW9uIG9mIHJvdXRlcy5cbiAqXG4gKiBAcGFyYW0gZmlsZXNcbiAqIEByZXR1cm5zIEFycmF5IG9mIHJvdXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVzKGZpbGVzOiBGaWxlcyk6IFJvdXRlW10ge1xuICBjb25zdCBmaWxlbmFtZXMgPSBPYmplY3Qua2V5cyhmaWxlcyk7XG5cbiAgaWYgKGZpbGVuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBtYXAgZmlsZW5hbWVzIHRvIHJhdyByb3V0ZXMgYW5kIGdyb3VwIHRoZW0gYnkgbGV2ZWxcbiAgY29uc3QgcmF3Um91dGVzQnlMZXZlbE1hcCA9IGZpbGVuYW1lcy5yZWR1Y2UoKGFjYywgZmlsZW5hbWUpID0+IHtcbiAgICBjb25zdCByYXdQYXRoID0gdG9SYXdQYXRoKGZpbGVuYW1lKTtcbiAgICBjb25zdCByYXdTZWdtZW50cyA9IHJhd1BhdGguc3BsaXQoJy8nKTtcbiAgICAvLyBuZXN0aW5nIGxldmVsIHN0YXJ0cyBhdCAwXG4gICAgLy8gcmF3UGF0aDogL3Byb2R1Y3RzID0+IGxldmVsOiAwXG4gICAgLy8gcmF3UGF0aDogL3Byb2R1Y3RzLzppZCA9PiBsZXZlbDogMVxuICAgIGNvbnN0IGxldmVsID0gcmF3U2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCByYXdTZWdtZW50ID0gcmF3U2VnbWVudHNbbGV2ZWxdO1xuICAgIGNvbnN0IGFuY2VzdG9yUmF3U2VnbWVudHMgPSByYXdTZWdtZW50cy5zbGljZSgwLCBsZXZlbCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjLFxuICAgICAgW2xldmVsXToge1xuICAgICAgICAuLi5hY2NbbGV2ZWxdLFxuICAgICAgICBbcmF3UGF0aF06IHtcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICByYXdTZWdtZW50LFxuICAgICAgICAgIGFuY2VzdG9yUmF3U2VnbWVudHMsXG4gICAgICAgICAgc2VnbWVudDogdG9TZWdtZW50KHJhd1NlZ21lbnQpLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSwge30gYXMgUmF3Um91dGVCeUxldmVsTWFwKTtcblxuICBjb25zdCBhbGxMZXZlbHMgPSBPYmplY3Qua2V5cyhyYXdSb3V0ZXNCeUxldmVsTWFwKS5tYXAoTnVtYmVyKTtcbiAgY29uc3QgbWF4TGV2ZWwgPSBNYXRoLm1heCguLi5hbGxMZXZlbHMpO1xuXG4gIC8vIGFkZCBlYWNoIHJhdyByb3V0ZSB0byBpdHMgcGFyZW50J3MgY2hpbGRyZW4gYXJyYXlcbiAgZm9yIChsZXQgbGV2ZWwgPSBtYXhMZXZlbDsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7XG4gICAgY29uc3QgcmF3Um91dGVzTWFwID0gcmF3Um91dGVzQnlMZXZlbE1hcFtsZXZlbF07XG4gICAgY29uc3QgcmF3UGF0aHMgPSBPYmplY3Qua2V5cyhyYXdSb3V0ZXNNYXApO1xuXG4gICAgZm9yIChjb25zdCByYXdQYXRoIG9mIHJhd1BhdGhzKSB7XG4gICAgICBjb25zdCByYXdSb3V0ZSA9IHJhd1JvdXRlc01hcFtyYXdQYXRoXTtcbiAgICAgIGNvbnN0IHBhcmVudFJhd1BhdGggPSByYXdSb3V0ZS5hbmNlc3RvclJhd1NlZ21lbnRzLmpvaW4oJy8nKTtcbiAgICAgIGNvbnN0IHBhcmVudFJhd1NlZ21lbnRJbmRleCA9IHJhd1JvdXRlLmFuY2VzdG9yUmF3U2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IHBhcmVudFJhd1NlZ21lbnQgPVxuICAgICAgICByYXdSb3V0ZS5hbmNlc3RvclJhd1NlZ21lbnRzW3BhcmVudFJhd1NlZ21lbnRJbmRleF07XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgcGFyZW50IGxldmVsIGFuZC9vciByYXcgcm91dGUgaWYgaXQgZG9lcyBub3QgZXhpc3RcbiAgICAgIC8vIHBhcmVudCByb3V0ZSB3b24ndCBleGlzdCBmb3IgbmVzdGVkIHJvdXRlcyB0aGF0IGRvbid0IGhhdmUgYSBsYXlvdXQgcm91dGVcbiAgICAgIHJhd1JvdXRlc0J5TGV2ZWxNYXBbbGV2ZWwgLSAxXSB8fD0ge307XG4gICAgICByYXdSb3V0ZXNCeUxldmVsTWFwW2xldmVsIC0gMV1bcGFyZW50UmF3UGF0aF0gfHw9IHtcbiAgICAgICAgZmlsZW5hbWU6IG51bGwsXG4gICAgICAgIHJhd1NlZ21lbnQ6IHBhcmVudFJhd1NlZ21lbnQsXG4gICAgICAgIGFuY2VzdG9yUmF3U2VnbWVudHM6IHJhd1JvdXRlLmFuY2VzdG9yUmF3U2VnbWVudHMuc2xpY2UoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBwYXJlbnRSYXdTZWdtZW50SW5kZXhcbiAgICAgICAgKSxcbiAgICAgICAgc2VnbWVudDogdG9TZWdtZW50KHBhcmVudFJhd1NlZ21lbnQpLFxuICAgICAgICBsZXZlbDogbGV2ZWwgLSAxLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuXG4gICAgICByYXdSb3V0ZXNCeUxldmVsTWFwW2xldmVsIC0gMV1bcGFyZW50UmF3UGF0aF0uY2hpbGRyZW4ucHVzaChyYXdSb3V0ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gb25seSB0YWtlIHJhdyByb3V0ZXMgZnJvbSB0aGUgcm9vdCBsZXZlbFxuICAvLyBzaW5jZSB0aGV5IGFscmVhZHkgY29udGFpbiBuZXN0ZWQgcm91dGVzIGFzIHRoZWlyIGNoaWxkcmVuXG4gIGNvbnN0IHJvb3RSYXdSb3V0ZXNNYXAgPSByYXdSb3V0ZXNCeUxldmVsTWFwWzBdO1xuICBjb25zdCByYXdSb3V0ZXMgPSBPYmplY3Qua2V5cyhyb290UmF3Um91dGVzTWFwKS5tYXAoXG4gICAgKHNlZ21lbnQpID0+IHJvb3RSYXdSb3V0ZXNNYXBbc2VnbWVudF1cbiAgKTtcbiAgc29ydFJhd1JvdXRlcyhyYXdSb3V0ZXMpO1xuXG4gIHJldHVybiB0b1JvdXRlcyhyYXdSb3V0ZXMsIGZpbGVzKTtcbn1cblxuZnVuY3Rpb24gdG9SYXdQYXRoKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZmlsZW5hbWVcbiAgICAucmVwbGFjZShcbiAgICAgIC8vIGNvbnZlcnQgdG8gcmVsYXRpdmUgcGF0aCBhbmQgcmVtb3ZlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICAvXlxcLyguKj8pXFwvcm91dGVzXFwvfF5cXC8oLio/KVxcL3BhZ2VzXFwvfFxcL2FwcFxcL3JvdXRlc1xcL3woXFwucGFnZVxcLihqc3x0c3xhbmFsb2cpJCl8KFxcLih0c3xtZHxhbmFsb2cpJCkvZyxcbiAgICAgICcnXG4gICAgKVxuICAgIC5yZXBsYWNlKC9cXFtcXC57M30uK1xcXS8sICcqKicpIC8vIFsuLi5ub3QtZm91bmRdID0+ICoqXG4gICAgLnJlcGxhY2UoL1xcWyhbXlxcXV0rKVxcXS9nLCAnOiQxJyk7IC8vIFtpZF0gPT4gOmlkXG59XG5cbmZ1bmN0aW9uIHRvU2VnbWVudChyYXdTZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmF3U2VnbWVudFxuICAgIC5yZXBsYWNlKC9pbmRleHxcXCguKj9cXCkvZywgJycpIC8vIHJlcGxhY2UgbmFtZWQgZW1wdHkgc2VnbWVudHNcbiAgICAucmVwbGFjZSgvXFwufFxcLysvZywgJy8nKSAvLyByZXBsYWNlIGRvdHMgd2l0aCBzbGFzaGVzIGFuZCByZW1vdmUgcmVkdW5kYW50IHNsYXNoZXNcbiAgICAucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpOyAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xufVxuXG5mdW5jdGlvbiB0b1JvdXRlcyhyYXdSb3V0ZXM6IFJhd1JvdXRlW10sIGZpbGVzOiBGaWxlcyk6IFJvdXRlW10ge1xuICBjb25zdCByb3V0ZXM6IFJvdXRlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJhd1JvdXRlIG9mIHJhd1JvdXRlcykge1xuICAgIGNvbnN0IGNoaWxkcmVuOiBSb3V0ZVtdIHwgdW5kZWZpbmVkID1cbiAgICAgIHJhd1JvdXRlLmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0b1JvdXRlcyhyYXdSb3V0ZS5jaGlsZHJlbiwgZmlsZXMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGxldCBtb2R1bGU6ICgoKSA9PiBQcm9taXNlPFJvdXRlRXhwb3J0PikgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGFuYWxvZ01ldGE6IHsgZW5kcG9pbnQ6IHN0cmluZzsgZW5kcG9pbnRLZXk6IHN0cmluZyB9IHwgdW5kZWZpbmVkID1cbiAgICAgIHVuZGVmaW5lZDtcblxuICAgIGlmIChyYXdSb3V0ZS5maWxlbmFtZSkge1xuICAgICAgY29uc3QgaXNNYXJrZG93bkZpbGUgPSByYXdSb3V0ZS5maWxlbmFtZS5lbmRzV2l0aCgnLm1kJyk7XG4gICAgICBtb2R1bGUgPSBpc01hcmtkb3duRmlsZVxuICAgICAgICA/IHRvTWFya2Rvd25Nb2R1bGUoZmlsZXNbcmF3Um91dGUuZmlsZW5hbWVdIGFzICgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICAgICAgOiAoZmlsZXNbcmF3Um91dGUuZmlsZW5hbWVdIGFzICgpID0+IFByb21pc2U8Um91dGVFeHBvcnQ+KTtcblxuICAgICAgY29uc3QgZW5kcG9pbnRLZXkgPSByYXdSb3V0ZS5maWxlbmFtZS5yZXBsYWNlKFxuICAgICAgICAvXFwucGFnZVxcLih0c3xhbmFsb2cpJC8sXG4gICAgICAgIEVORFBPSU5UX0VYVEVOU0lPTlxuICAgICAgKTtcblxuICAgICAgLy8gZ2V0IGVuZHBvaW50IHBhdGhcbiAgICAgIGNvbnN0IHJhd0VuZHBvaW50ID0gcmF3Um91dGUuZmlsZW5hbWVcbiAgICAgICAgLnJlcGxhY2UoL1xcLnBhZ2VcXC4odHN8YW5hbG9nKSQvLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcW1xcLnszfS4rXFxdLywgJyoqJykgLy8gWy4uLm5vdC1mb3VuZF0gPT4gKipcbiAgICAgICAgLnJlcGxhY2UoL14oLio/KVxcL3BhZ2VzLywgJy9wYWdlcycpO1xuXG4gICAgICAvLyByZXBsYWNlIHBlcmlvZHMsIHJlbW92ZSAoaW5kZXgpIHBhdGhzXG4gICAgICBjb25zdCBlbmRwb2ludCA9IChyYXdFbmRwb2ludCB8fCAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcLi9nLCAnLycpXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXCgoLio/KVxcKSQvLCAnLy0kMS0nKTtcblxuICAgICAgYW5hbG9nTWV0YSA9IHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIGVuZHBvaW50S2V5LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZTogUm91dGUgJiB7IG1ldGE/OiB0eXBlb2YgYW5hbG9nTWV0YSB9ID0gbW9kdWxlXG4gICAgICA/IHtcbiAgICAgICAgICBwYXRoOiByYXdSb3V0ZS5zZWdtZW50LFxuICAgICAgICAgIGxvYWRDaGlsZHJlbjogKCkgPT5cbiAgICAgICAgICAgIG1vZHVsZSEoKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaW1wb3J0Lm1ldGEuZW52LlBST0QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNNb2R1bGVEZWZhdWx0ID0gISFtLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUmVkaXJlY3QgPSAhIW0ucm91dGVNZXRhPy5yZWRpcmVjdFRvO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNNb2R1bGVEZWZhdWx0ICYmICFoYXNSZWRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgW0FuYWxvZ10gTWlzc2luZyBkZWZhdWx0IGV4cG9ydCBhdCAke3Jhd1JvdXRlLmZpbGVuYW1lfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogbS5kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgLi4udG9Sb3V0ZUNvbmZpZyhtLnJvdXRlTWV0YSBhcyBSb3V0ZU1ldGEgfCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICBbQU5BTE9HX01FVEFfS0VZXTogYW5hbG9nTWV0YSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICAgIDogeyBwYXRoOiByYXdSb3V0ZS5zZWdtZW50LCBjaGlsZHJlbiB9O1xuXG4gICAgcm91dGVzLnB1c2gocm91dGUpO1xuICB9XG5cbiAgcmV0dXJuIHJvdXRlcztcbn1cblxuZnVuY3Rpb24gc29ydFJhd1JvdXRlcyhyYXdSb3V0ZXM6IFJhd1JvdXRlW10pOiB2b2lkIHtcbiAgcmF3Um91dGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBsZXQgc2VnbWVudEEgPSBkZXByaW9yaXRpemVTZWdtZW50KGEuc2VnbWVudCk7XG4gICAgbGV0IHNlZ21lbnRCID0gZGVwcmlvcml0aXplU2VnbWVudChiLnNlZ21lbnQpO1xuXG4gICAgLy8gcHJpb3JpdGl6ZSByb3V0ZXMgd2l0aCBmZXdlciBjaGlsZHJlblxuICAgIGlmIChhLmNoaWxkcmVuLmxlbmd0aCA+IGIuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBzZWdtZW50QSA9IGB+JHtzZWdtZW50QX1gO1xuICAgIH0gZWxzZSBpZiAoYS5jaGlsZHJlbi5sZW5ndGggPCBiLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgc2VnbWVudEIgPSBgfiR7c2VnbWVudEJ9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudEEgPiBzZWdtZW50QiA/IDEgOiAtMTtcbiAgfSk7XG5cbiAgZm9yIChjb25zdCByYXdSb3V0ZSBvZiByYXdSb3V0ZXMpIHtcbiAgICBzb3J0UmF3Um91dGVzKHJhd1JvdXRlLmNoaWxkcmVuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXByaW9yaXRpemVTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIGRlcHJpb3JpdGl6ZSBwYXJhbSBhbmQgd2lsZGNhcmQgc2VnbWVudHNcbiAgcmV0dXJuIHNlZ21lbnQucmVwbGFjZSgnOicsICd+ficpLnJlcGxhY2UoJyoqJywgJ35+fn4nKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJvdXRlczogUm91dGVbXSA9IGNyZWF0ZVJvdXRlcyh7XG4gIC4uLkFOQUxPR19ST1VURV9GSUxFUyxcbiAgLi4uQU5BTE9HX0NPTlRFTlRfUk9VVEVfRklMRVMsXG59KTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtcm91dGVyLXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zZXJ2ZXIvc3JjL2FuYWxvZ2pzLXJvdXRlci1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export { provideServerContext } from './provide-server-context';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvc2VydmVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHByb3ZpZGVTZXJ2ZXJDb250ZXh0IH0gZnJvbSAnLi9wcm92aWRlLXNlcnZlci1jb250ZXh0JztcbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import { ɵresetCompiledComponents } from '@angular/core';
2
+ import { ɵSERVER_CONTEXT as SERVER_CONTEXT } from '@angular/platform-server';
3
+ import { BASE_URL, REQUEST, RESPONSE, } from '@analogjs/router/tokens';
4
+ export function provideServerContext({ req, res, }) {
5
+ const baseUrl = getBaseUrl(req);
6
+ if (import.meta.env.DEV) {
7
+ ɵresetCompiledComponents();
8
+ }
9
+ return [
10
+ { provide: SERVER_CONTEXT, useValue: 'ssr-analog' },
11
+ { provide: REQUEST, useValue: req },
12
+ { provide: RESPONSE, useValue: res },
13
+ { provide: BASE_URL, useValue: baseUrl },
14
+ ];
15
+ }
16
+ export function getBaseUrl(req) {
17
+ const protocol = getRequestProtocol(req);
18
+ const { originalUrl, headers } = req;
19
+ const parsedUrl = new URL('', `${protocol}://${headers.host}${originalUrl.endsWith('/')
20
+ ? originalUrl.substring(0, originalUrl.length - 1)
21
+ : originalUrl}`);
22
+ const baseUrl = parsedUrl.origin;
23
+ return baseUrl;
24
+ }
25
+ export function getRequestProtocol(req, opts = {}) {
26
+ if (opts.xForwardedProto !== false &&
27
+ req.headers['x-forwarded-proto'] === 'https') {
28
+ return 'https';
29
+ }
30
+ return req.connection?.encrypted ? 'https' : 'http';
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1zZXJ2ZXItY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci9zZXJ2ZXIvc3JjL3Byb3ZpZGUtc2VydmVyLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxJQUFJLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTdFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsR0FHVCxNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxFQUNuQyxHQUFHLEVBQ0gsR0FBRyxHQUlKO0lBQ0MsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEIsd0JBQXdCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO1FBQ25ELEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ25DLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3BDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0tBQ3pDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFrQjtJQUMzQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FDdkIsRUFBRSxFQUNGLEdBQUcsUUFBUSxNQUFNLE9BQU8sQ0FBQyxJQUFJLEdBQzNCLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsV0FDTixFQUFFLENBQ0gsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFFakMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsR0FBa0IsRUFDbEIsT0FBc0MsRUFBRTtJQUV4QyxJQUNFLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSztRQUM5QixHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssT0FBTyxFQUM1QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELE9BQVEsR0FBRyxDQUFDLFVBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdGljUHJvdmlkZXIsIMm1cmVzZXRDb21waWxlZENvbXBvbmVudHMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1U0VSVkVSX0NPTlRFWFQgYXMgU0VSVkVSX0NPTlRFWFQgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1zZXJ2ZXInO1xuXG5pbXBvcnQge1xuICBCQVNFX1VSTCxcbiAgUkVRVUVTVCxcbiAgUkVTUE9OU0UsXG4gIFNlcnZlclJlcXVlc3QsXG4gIFNlcnZlclJlc3BvbnNlLFxufSBmcm9tICdAYW5hbG9nanMvcm91dGVyL3Rva2Vucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU2VydmVyQ29udGV4dCh7XG4gIHJlcSxcbiAgcmVzLFxufToge1xuICByZXE6IFNlcnZlclJlcXVlc3Q7XG4gIHJlczogU2VydmVyUmVzcG9uc2U7XG59KTogU3RhdGljUHJvdmlkZXJbXSB7XG4gIGNvbnN0IGJhc2VVcmwgPSBnZXRCYXNlVXJsKHJlcSk7XG5cbiAgaWYgKGltcG9ydC5tZXRhLmVudi5ERVYpIHtcbiAgICDJtXJlc2V0Q29tcGlsZWRDb21wb25lbnRzKCk7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogU0VSVkVSX0NPTlRFWFQsIHVzZVZhbHVlOiAnc3NyLWFuYWxvZycgfSxcbiAgICB7IHByb3ZpZGU6IFJFUVVFU1QsIHVzZVZhbHVlOiByZXEgfSxcbiAgICB7IHByb3ZpZGU6IFJFU1BPTlNFLCB1c2VWYWx1ZTogcmVzIH0sXG4gICAgeyBwcm92aWRlOiBCQVNFX1VSTCwgdXNlVmFsdWU6IGJhc2VVcmwgfSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VVcmwocmVxOiBTZXJ2ZXJSZXF1ZXN0KSB7XG4gIGNvbnN0IHByb3RvY29sID0gZ2V0UmVxdWVzdFByb3RvY29sKHJlcSk7XG4gIGNvbnN0IHsgb3JpZ2luYWxVcmwsIGhlYWRlcnMgfSA9IHJlcTtcbiAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChcbiAgICAnJyxcbiAgICBgJHtwcm90b2NvbH06Ly8ke2hlYWRlcnMuaG9zdH0ke1xuICAgICAgb3JpZ2luYWxVcmwuZW5kc1dpdGgoJy8nKVxuICAgICAgICA/IG9yaWdpbmFsVXJsLnN1YnN0cmluZygwLCBvcmlnaW5hbFVybC5sZW5ndGggLSAxKVxuICAgICAgICA6IG9yaWdpbmFsVXJsXG4gICAgfWBcbiAgKTtcbiAgY29uc3QgYmFzZVVybCA9IHBhcnNlZFVybC5vcmlnaW47XG5cbiAgcmV0dXJuIGJhc2VVcmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0UHJvdG9jb2woXG4gIHJlcTogU2VydmVyUmVxdWVzdCxcbiAgb3B0czogeyB4Rm9yd2FyZGVkUHJvdG8/OiBib29sZWFuIH0gPSB7fVxuKSB7XG4gIGlmIChcbiAgICBvcHRzLnhGb3J3YXJkZWRQcm90byAhPT0gZmFsc2UgJiZcbiAgICByZXEuaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXSA9PT0gJ2h0dHBzJ1xuICApIHtcbiAgICByZXR1cm4gJ2h0dHBzJztcbiAgfVxuXG4gIHJldHVybiAocmVxLmNvbm5lY3Rpb24gYXMgYW55KT8uZW5jcnlwdGVkID8gJ2h0dHBzJyA6ICdodHRwJztcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbG9nanMtcm91dGVyLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3JvdXRlci90b2tlbnMvc3JjL2FuYWxvZ2pzLXJvdXRlci10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { InjectionToken, inject } from '@angular/core';
2
+ export const REQUEST = new InjectionToken('@analogjs/router Server Request');
3
+ export const RESPONSE = new InjectionToken('@analogjs/router Server Response');
4
+ export const BASE_URL = new InjectionToken('@analogjs/router Base URL');
5
+ export function injectRequest() {
6
+ return inject(REQUEST, { optional: true });
7
+ }
8
+ export function injectResponse() {
9
+ return inject(RESPONSE, { optional: true });
10
+ }
11
+ export function injectBaseURL() {
12
+ return inject(BASE_URL, { optional: true });
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvdG9rZW5zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVV2RCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQ3ZDLGlDQUFpQyxDQUNsQyxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUN4QyxrQ0FBa0MsQ0FDbkMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBUywyQkFBMkIsQ0FBQyxDQUFDO0FBRWhGLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgSW5jb21pbmdNZXNzYWdlLFxuICBTZXJ2ZXJSZXNwb25zZSBhcyBOb2RlU2VydmVyUmVzcG9uc2UsXG59IGZyb20gJ25vZGU6aHR0cCc7XG5cbmV4cG9ydCB0eXBlIFNlcnZlclJlcXVlc3QgPSBJbmNvbWluZ01lc3NhZ2UgJiB7IG9yaWdpbmFsVXJsOiBzdHJpbmcgfTtcbmV4cG9ydCB0eXBlIFNlcnZlclJlc3BvbnNlID0gTm9kZVNlcnZlclJlc3BvbnNlO1xuZXhwb3J0IHR5cGUgU2VydmVyQ29udGV4dCA9IHsgcmVxOiBTZXJ2ZXJSZXF1ZXN0OyByZXM6IFNlcnZlclJlc3BvbnNlIH07XG5cbmV4cG9ydCBjb25zdCBSRVFVRVNUID0gbmV3IEluamVjdGlvblRva2VuPFNlcnZlclJlcXVlc3Q+KFxuICAnQGFuYWxvZ2pzL3JvdXRlciBTZXJ2ZXIgUmVxdWVzdCdcbik7XG5leHBvcnQgY29uc3QgUkVTUE9OU0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2VydmVyUmVzcG9uc2U+KFxuICAnQGFuYWxvZ2pzL3JvdXRlciBTZXJ2ZXIgUmVzcG9uc2UnXG4pO1xuZXhwb3J0IGNvbnN0IEJBU0VfVVJMID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0BhbmFsb2dqcy9yb3V0ZXIgQmFzZSBVUkwnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFJlcXVlc3QoKSB7XG4gIHJldHVybiBpbmplY3QoUkVRVUVTVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFJlc3BvbnNlKCkge1xuICByZXR1cm4gaW5qZWN0KFJFU1BPTlNFLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0QmFzZVVSTCgpIHtcbiAgcmV0dXJuIGluamVjdChCQVNFX1VSTCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,39 @@
1
+ import { ɵresetCompiledComponents as _resetCompiledComponents } from '@angular/core';
2
+ import { ɵSERVER_CONTEXT as _SERVER_CONTEXT } from '@angular/platform-server';
3
+ import { REQUEST, RESPONSE, BASE_URL } from '@analogjs/router/tokens';
4
+
5
+ function provideServerContext({ req, res, }) {
6
+ const baseUrl = getBaseUrl(req);
7
+ if (import.meta.env.DEV) {
8
+ _resetCompiledComponents();
9
+ }
10
+ return [
11
+ { provide: _SERVER_CONTEXT, useValue: 'ssr-analog' },
12
+ { provide: REQUEST, useValue: req },
13
+ { provide: RESPONSE, useValue: res },
14
+ { provide: BASE_URL, useValue: baseUrl },
15
+ ];
16
+ }
17
+ function getBaseUrl(req) {
18
+ const protocol = getRequestProtocol(req);
19
+ const { originalUrl, headers } = req;
20
+ const parsedUrl = new URL('', `${protocol}://${headers.host}${originalUrl.endsWith('/')
21
+ ? originalUrl.substring(0, originalUrl.length - 1)
22
+ : originalUrl}`);
23
+ const baseUrl = parsedUrl.origin;
24
+ return baseUrl;
25
+ }
26
+ function getRequestProtocol(req, opts = {}) {
27
+ if (opts.xForwardedProto !== false &&
28
+ req.headers['x-forwarded-proto'] === 'https') {
29
+ return 'https';
30
+ }
31
+ return req.connection?.encrypted ? 'https' : 'http';
32
+ }
33
+
34
+ /**
35
+ * Generated bundle index. Do not edit.
36
+ */
37
+
38
+ export { provideServerContext };
39
+ //# sourceMappingURL=analogjs-router-server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-router-server.mjs","sources":["../../../../packages/router/server/src/provide-server-context.ts","../../../../packages/router/server/src/analogjs-router-server.ts"],"sourcesContent":["import { StaticProvider, ɵresetCompiledComponents } from '@angular/core';\nimport { ɵSERVER_CONTEXT as SERVER_CONTEXT } from '@angular/platform-server';\n\nimport {\n BASE_URL,\n REQUEST,\n RESPONSE,\n ServerRequest,\n ServerResponse,\n} from '@analogjs/router/tokens';\n\nexport function provideServerContext({\n req,\n res,\n}: {\n req: ServerRequest;\n res: ServerResponse;\n}): StaticProvider[] {\n const baseUrl = getBaseUrl(req);\n\n if (import.meta.env.DEV) {\n ɵresetCompiledComponents();\n }\n\n return [\n { provide: SERVER_CONTEXT, useValue: 'ssr-analog' },\n { provide: REQUEST, useValue: req },\n { provide: RESPONSE, useValue: res },\n { provide: BASE_URL, useValue: baseUrl },\n ];\n}\n\nexport function getBaseUrl(req: ServerRequest) {\n const protocol = getRequestProtocol(req);\n const { originalUrl, headers } = req;\n const parsedUrl = new URL(\n '',\n `${protocol}://${headers.host}${\n originalUrl.endsWith('/')\n ? originalUrl.substring(0, originalUrl.length - 1)\n : originalUrl\n }`\n );\n const baseUrl = parsedUrl.origin;\n\n return baseUrl;\n}\n\nexport function getRequestProtocol(\n req: ServerRequest,\n opts: { xForwardedProto?: boolean } = {}\n) {\n if (\n opts.xForwardedProto !== false &&\n req.headers['x-forwarded-proto'] === 'https'\n ) {\n return 'https';\n }\n\n return (req.connection as any)?.encrypted ? 'https' : 'http';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵresetCompiledComponents","SERVER_CONTEXT"],"mappings":";;;;SAWgB,oBAAoB,CAAC,EACnC,GAAG,EACH,GAAG,GAIJ,EAAA;AACC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACvB,QAAAA,wBAAwB,EAAE,CAAC;KAC5B;IAED,OAAO;AACL,QAAA,EAAE,OAAO,EAAEC,eAAc,EAAE,QAAQ,EAAE,YAAY,EAAE;AACnD,QAAA,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE;AACnC,QAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE;AACpC,QAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;KACzC,CAAC;AACJ,CAAC;AAEK,SAAU,UAAU,CAAC,GAAkB,EAAA;AAC3C,IAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACzC,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;AACrC,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,EAAE,EACF,CAAG,EAAA,QAAQ,MAAM,OAAO,CAAC,IAAI,CAC3B,EAAA,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;AACvB,UAAE,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAClD,UAAE,WACN,CAAE,CAAA,CACH,CAAC;AACF,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;AAEjC,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;SAEe,kBAAkB,CAChC,GAAkB,EAClB,OAAsC,EAAE,EAAA;AAExC,IAAA,IACE,IAAI,CAAC,eAAe,KAAK,KAAK;QAC9B,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,OAAO,EAC5C;AACA,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,OAAQ,GAAG,CAAC,UAAkB,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAC/D;;AC5DA;;AAEG;;;;"}
@@ -0,0 +1,21 @@
1
+ import { InjectionToken, inject } from '@angular/core';
2
+
3
+ const REQUEST = new InjectionToken('@analogjs/router Server Request');
4
+ const RESPONSE = new InjectionToken('@analogjs/router Server Response');
5
+ const BASE_URL = new InjectionToken('@analogjs/router Base URL');
6
+ function injectRequest() {
7
+ return inject(REQUEST, { optional: true });
8
+ }
9
+ function injectResponse() {
10
+ return inject(RESPONSE, { optional: true });
11
+ }
12
+ function injectBaseURL() {
13
+ return inject(BASE_URL, { optional: true });
14
+ }
15
+
16
+ /**
17
+ * Generated bundle index. Do not edit.
18
+ */
19
+
20
+ export { BASE_URL, REQUEST, RESPONSE, injectBaseURL, injectRequest, injectResponse };
21
+ //# sourceMappingURL=analogjs-router-tokens.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analogjs-router-tokens.mjs","sources":["../../../../packages/router/tokens/src/index.ts","../../../../packages/router/tokens/src/analogjs-router-tokens.ts"],"sourcesContent":["import { InjectionToken, inject } from '@angular/core';\nimport type {\n IncomingMessage,\n ServerResponse as NodeServerResponse,\n} from 'node:http';\n\nexport type ServerRequest = IncomingMessage & { originalUrl: string };\nexport type ServerResponse = NodeServerResponse;\nexport type ServerContext = { req: ServerRequest; res: ServerResponse };\n\nexport const REQUEST = new InjectionToken<ServerRequest>(\n '@analogjs/router Server Request'\n);\nexport const RESPONSE = new InjectionToken<ServerResponse>(\n '@analogjs/router Server Response'\n);\nexport const BASE_URL = new InjectionToken<string>('@analogjs/router Base URL');\n\nexport function injectRequest() {\n return inject(REQUEST, { optional: true });\n}\n\nexport function injectResponse() {\n return inject(RESPONSE, { optional: true });\n}\n\nexport function injectBaseURL() {\n return inject(BASE_URL, { optional: true });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;MAUa,OAAO,GAAG,IAAI,cAAc,CACvC,iCAAiC,EACjC;MACW,QAAQ,GAAG,IAAI,cAAc,CACxC,kCAAkC,EAClC;MACW,QAAQ,GAAG,IAAI,cAAc,CAAS,2BAA2B,EAAE;SAEhE,aAAa,GAAA;IAC3B,OAAO,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;SAEe,cAAc,GAAA;IAC5B,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;SAEe,aAAa,GAAA;IAC3B,OAAO,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C;;AC5BA;;AAEG;;;;"}
@@ -1,6 +1,7 @@
1
- import { inject, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, Injector } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import { firstValueFrom, map } from 'rxjs';
1
+ import { inject, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, Injector, TransferState, makeStateKey } from '@angular/core';
2
+ import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';
3
+ import { injectBaseURL } from '@analogjs/router/tokens';
4
+ import { firstValueFrom, map, from, of } from 'rxjs';
4
5
  import { Meta } from '@angular/platform-browser';
5
6
  import { Router, NavigationEnd, ActivatedRoute, provideRouter } from '@angular/router';
6
7
  import { filter } from 'rxjs/operators';
@@ -52,9 +53,10 @@ function getMetaTagSelector(metaTag) {
52
53
  }
53
54
 
54
55
  const ANALOG_META_KEY = Symbol('@analogjs/router Analog Route Metadata Key');
55
- const PAGE_ENDPOINTS = import.meta.glob([
56
- '/src/app/pages/**/*.server.ts',
57
- ]);
56
+ /**
57
+ * This variable reference is replaced with a glob of all route endpoints.
58
+ */
59
+ let ANALOG_PAGE_ENDPOINTS = {};
58
60
 
59
61
  function toRouteConfig(routeMeta) {
60
62
  if (routeMeta && isRedirectRouteMeta(routeMeta)) {
@@ -76,11 +78,16 @@ function toRouteConfig(routeMeta) {
76
78
  routeConfig.resolve = {
77
79
  ...routeConfig.resolve,
78
80
  load: async (route) => {
81
+ const baseUrl = injectBaseURL();
79
82
  const routeConfig = route.routeConfig;
80
- if (PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {
83
+ if (ANALOG_PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {
81
84
  const { queryParams, fragment: hash, params, parent } = route;
82
85
  const segment = parent?.url.map((segment) => segment.path).join('/') || '';
83
- const url = new URL('', import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL']);
86
+ const url = new URL('', import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] ||
87
+ baseUrl ||
88
+ (typeof window !== 'undefined' && window.location.origin
89
+ ? window.location.origin
90
+ : ''));
84
91
  url.pathname = `${url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'}api/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;
85
92
  url.search = `${new URLSearchParams(queryParams).toString()}`;
86
93
  url.hash = hash ?? '';
@@ -88,7 +95,8 @@ function toRouteConfig(routeMeta) {
88
95
  url.pathname = url.pathname.replace(`[${param}]`, params[param]);
89
96
  });
90
97
  url.pathname = url.pathname.replace('**', segment);
91
- if (globalThis.$fetch) {
98
+ if (!!import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] &&
99
+ globalThis.$fetch) {
92
100
  return globalThis.$fetch(url.pathname);
93
101
  }
94
102
  const http = inject(HttpClient);
@@ -142,13 +150,14 @@ const ENDPOINT_EXTENSION = '.server.ts';
142
150
  const APP_DIR = 'src/app';
143
151
 
144
152
  /// <reference types="vite/client" />
145
- const FILES = import.meta.glob([
146
- '/app/routes/**/*.ts',
147
- '/src/app/routes/**/*.ts',
148
- '/src/app/pages/**/*.page.ts',
149
- '/src/app/pages/**/*.page.analog',
150
- ]);
151
- const CONTENT_FILES = import.meta.glob(['/src/app/routes/**/*.md', '/src/app/pages/**/*.md'], { query: '?analog-content-file=true', import: 'default' });
153
+ /**
154
+ * This variable reference is replaced with a glob of all page routes.
155
+ */
156
+ let ANALOG_ROUTE_FILES = {};
157
+ /**
158
+ * This variable reference is replaced with a glob of all content routes.
159
+ */
160
+ let ANALOG_CONTENT_ROUTE_FILES = {};
152
161
  /**
153
162
  * A function used to parse list of files and create configuration of routes.
154
163
  *
@@ -249,7 +258,7 @@ function toRoutes(rawRoutes, files) {
249
258
  const rawEndpoint = rawRoute.filename
250
259
  .replace(/\.page\.(ts|analog)$/, '')
251
260
  .replace(/\[\.{3}.+\]/, '**') // [...not-found] => **
252
- .split(APP_DIR)[1];
261
+ .replace(/^(.*?)\/pages/, '/pages');
253
262
  // replace periods, remove (index) paths
254
263
  const endpoint = (rawEndpoint || '')
255
264
  .replace(/\./g, '/')
@@ -307,7 +316,10 @@ function deprioritizeSegment(segment) {
307
316
  // deprioritize param and wildcard segments
308
317
  return segment.replace(':', '~~').replace('**', '~~~~');
309
318
  }
310
- const routes = createRoutes({ ...FILES, ...CONTENT_FILES });
319
+ const routes = createRoutes({
320
+ ...ANALOG_ROUTE_FILES,
321
+ ...ANALOG_CONTENT_ROUTE_FILES,
322
+ });
311
323
 
312
324
  /**
313
325
  * @deprecated Use `RouteMeta` type instead.
@@ -367,9 +379,7 @@ const injectActivatedRoute = () => {
367
379
  */
368
380
  function provideFileRouter(...features) {
369
381
  return makeEnvironmentProviders([
370
- // TODO: remove type casting after Angular >=15.1.1 upgrade
371
- // https://github.com/angular/angular/pull/48720
372
- provideRouter(routes, ...features).ɵproviders,
382
+ provideRouter(routes, ...features),
373
383
  {
374
384
  provide: ENVIRONMENT_INITIALIZER,
375
385
  multi: true,
@@ -394,9 +404,79 @@ async function getLoadResolver(route) {
394
404
  return route.routeConfig?.resolve?.['load']?.(route);
395
405
  }
396
406
 
407
+ /**
408
+ * Interceptor that is server-aware when making HttpClient requests.
409
+ * Server-side requests use the full URL
410
+ * Prerendering uses the internal Nitro $fetch function, along with state transfer
411
+ * Client-side requests use the window.location.origin
412
+ *
413
+ * @param req HttpRequest<unknown>
414
+ * @param next HttpHandlerFn
415
+ * @returns
416
+ */
417
+ function requestContextInterceptor(req, next) {
418
+ const baseUrl = injectBaseURL();
419
+ const transferState = inject(TransferState);
420
+ const storeKey = makeStateKey(`analog_${req.urlWithParams}`);
421
+ // during prerendering with Nitro
422
+ if (typeof global !== 'undefined' &&
423
+ global.$fetch &&
424
+ baseUrl &&
425
+ (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {
426
+ const requestUrl = new URL(req.url, baseUrl);
427
+ const fetchUrl = req.url.includes('/api/')
428
+ ? requestUrl.pathname
429
+ : requestUrl.href;
430
+ return from(global.$fetch
431
+ .raw(fetchUrl, {
432
+ method: req.method,
433
+ params: requestUrl.searchParams,
434
+ headers: req.headers.keys().reduce((hdrs, current) => {
435
+ return {
436
+ ...hdrs,
437
+ [current]: req.headers.get(current),
438
+ };
439
+ }, {}),
440
+ })
441
+ .then((res) => {
442
+ const cacheResponse = {
443
+ body: res._data,
444
+ headers: new HttpHeaders(res.headers),
445
+ status: 200,
446
+ statusText: 'OK',
447
+ url: fetchUrl,
448
+ };
449
+ const transferResponse = new HttpResponse(cacheResponse);
450
+ transferState.set(storeKey, cacheResponse);
451
+ return transferResponse;
452
+ }));
453
+ }
454
+ // on the client
455
+ if (!import.meta.env.SSR && req.url.startsWith('/')) {
456
+ const cacheRestoreResponse = transferState.get(storeKey, null);
457
+ if (cacheRestoreResponse) {
458
+ transferState.remove(storeKey);
459
+ return of(new HttpResponse(cacheRestoreResponse));
460
+ }
461
+ return next(req.clone({
462
+ url: `${window.location.origin}${req.url}`,
463
+ }));
464
+ }
465
+ // on the server
466
+ if (baseUrl && (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {
467
+ const requestUrl = req.url.startsWith(baseUrl) && !req.url.startsWith('/')
468
+ ? req.url
469
+ : `${baseUrl}${req.url}`;
470
+ return next(req.clone({
471
+ url: requestUrl,
472
+ }));
473
+ }
474
+ return next(req);
475
+ }
476
+
397
477
  /**
398
478
  * Generated bundle index. Do not edit.
399
479
  */
400
480
 
401
- export { createRoutes, defineRouteMeta, getLoadResolver, injectActivatedRoute, injectLoad, injectRouter, provideFileRouter, routes };
481
+ export { createRoutes, defineRouteMeta, getLoadResolver, injectActivatedRoute, injectLoad, injectRouter, provideFileRouter, requestContextInterceptor, routes };
402
482
  //# sourceMappingURL=analogjs-router.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"analogjs-router.mjs","sources":["../../../../packages/router/src/lib/meta-tags.ts","../../../../packages/router/src/lib/endpoints.ts","../../../../packages/router/src/lib/route-config.ts","../../../../packages/router/src/lib/markdown-helpers.ts","../../../../packages/router/src/lib/constants.ts","../../../../packages/router/src/lib/routes.ts","../../../../packages/router/src/lib/define-route.ts","../../../../packages/router/src/lib/provide-file-router.ts","../../../../packages/router/src/lib/inject-load.ts","../../../../packages/router/src/lib/get-load-resolver.ts","../../../../packages/router/src/analogjs-router.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { Meta, MetaDefinition as NgMetaTag } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\nexport const ROUTE_META_TAGS_KEY = Symbol(\n '@analogjs/router Route Meta Tags Key'\n);\n\nconst CHARSET_KEY = 'charset';\nconst HTTP_EQUIV_KEY = 'httpEquiv';\n// httpEquiv selector key needs to be in kebab case format\nconst HTTP_EQUIV_SELECTOR_KEY = 'http-equiv';\nconst NAME_KEY = 'name';\nconst PROPERTY_KEY = 'property';\nconst CONTENT_KEY = 'content';\n\nexport type MetaTag =\n | (CharsetMetaTag & ExcludeRestMetaTagKeys<typeof CHARSET_KEY>)\n | (HttpEquivMetaTag & ExcludeRestMetaTagKeys<typeof HTTP_EQUIV_KEY>)\n | (NameMetaTag & ExcludeRestMetaTagKeys<typeof NAME_KEY>)\n | (PropertyMetaTag & ExcludeRestMetaTagKeys<typeof PROPERTY_KEY>);\n\ntype CharsetMetaTag = { [CHARSET_KEY]: string };\ntype HttpEquivMetaTag = { [HTTP_EQUIV_KEY]: string; [CONTENT_KEY]: string };\ntype NameMetaTag = { [NAME_KEY]: string; [CONTENT_KEY]: string };\ntype PropertyMetaTag = { [PROPERTY_KEY]: string; [CONTENT_KEY]: string };\n\ntype MetaTagKey =\n | typeof CHARSET_KEY\n | typeof HTTP_EQUIV_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY;\ntype ExcludeRestMetaTagKeys<Key extends MetaTagKey> = {\n [K in Exclude<MetaTagKey, Key>]?: never;\n};\n\ntype MetaTagSelector =\n | typeof CHARSET_KEY\n | `${\n | typeof HTTP_EQUIV_SELECTOR_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY}=\"${string}\"`;\ntype MetaTagMap = Record<MetaTagSelector, MetaTag>;\n\nexport function updateMetaTagsOnRouteChange(): void {\n const router = inject(Router);\n const metaService = inject(Meta);\n\n router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const metaTagMap = getMetaTagMap(router.routerState.snapshot.root);\n\n for (const metaTagSelector in metaTagMap) {\n const metaTag = metaTagMap[\n metaTagSelector as MetaTagSelector\n ] as NgMetaTag;\n metaService.updateTag(metaTag, metaTagSelector);\n }\n });\n}\n\nfunction getMetaTagMap(route: ActivatedRouteSnapshot): MetaTagMap {\n const metaTagMap = {} as MetaTagMap;\n let currentRoute: ActivatedRouteSnapshot | null = route;\n\n while (currentRoute) {\n const metaTags: MetaTag[] = currentRoute.data[ROUTE_META_TAGS_KEY] ?? [];\n for (const metaTag of metaTags) {\n metaTagMap[getMetaTagSelector(metaTag)] = metaTag;\n }\n\n currentRoute = currentRoute.firstChild;\n }\n\n return metaTagMap;\n}\n\nfunction getMetaTagSelector(metaTag: MetaTag): MetaTagSelector {\n if (metaTag.name) {\n return `${NAME_KEY}=\"${metaTag.name}\"`;\n }\n\n if (metaTag.property) {\n return `${PROPERTY_KEY}=\"${metaTag.property}\"`;\n }\n\n if (metaTag.httpEquiv) {\n return `${HTTP_EQUIV_SELECTOR_KEY}=\"${metaTag.httpEquiv}\"`;\n }\n\n return CHARSET_KEY;\n}\n","export const ANALOG_META_KEY = Symbol(\n '@analogjs/router Analog Route Metadata Key'\n);\n\nexport const PAGE_ENDPOINTS = import.meta.glob([\n '/src/app/pages/**/*.server.ts',\n]);\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport type { Route } from '@angular/router';\nimport { firstValueFrom } from 'rxjs';\n\nimport { RedirectRouteMeta, RouteConfig, RouteMeta } from './models';\nimport { ROUTE_META_TAGS_KEY } from './meta-tags';\nimport { PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';\n\nexport function toRouteConfig(routeMeta: RouteMeta | undefined): RouteConfig {\n if (routeMeta && isRedirectRouteMeta(routeMeta)) {\n return routeMeta;\n }\n\n let { meta, ...routeConfig } = routeMeta ?? {};\n\n if (Array.isArray(meta)) {\n routeConfig.data = { ...routeConfig.data, [ROUTE_META_TAGS_KEY]: meta };\n } else if (typeof meta === 'function') {\n routeConfig.resolve = {\n ...routeConfig.resolve,\n [ROUTE_META_TAGS_KEY]: meta,\n };\n }\n\n if (!routeConfig) {\n routeConfig = {};\n }\n\n routeConfig.resolve = {\n ...routeConfig.resolve,\n load: async (route) => {\n const routeConfig = route.routeConfig as Route & {\n [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n };\n\n if (PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {\n const { queryParams, fragment: hash, params, parent } = route;\n const segment =\n parent?.url.map((segment) => segment.path).join('/') || '';\n const url = new URL('', import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL']);\n url.pathname = `${\n url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'\n }api/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;\n url.search = `${new URLSearchParams(queryParams).toString()}`;\n url.hash = hash ?? '';\n\n Object.keys(params).forEach((param) => {\n url.pathname = url.pathname.replace(`[${param}]`, params[param]);\n });\n url.pathname = url.pathname.replace('**', segment);\n\n if ((globalThis as any).$fetch) {\n return (globalThis as any).$fetch(url.pathname);\n }\n\n const http = inject(HttpClient);\n return firstValueFrom(http.get(`${url.href}`));\n }\n\n return {};\n },\n };\n\n return routeConfig;\n}\n\nfunction isRedirectRouteMeta(\n routeMeta: RouteMeta\n): routeMeta is RedirectRouteMeta {\n return !!routeMeta.redirectTo;\n}\n","import { inject } from '@angular/core';\nimport { RouteExport } from './models';\n\ndeclare const Zone: any;\n\n// The Zone is currently enabled by default, so we wouldn't need this check.\n// However, leaving this open space will be useful if zone.js becomes optional\n// in the future. This means we won't have to modify the current code, and it will\n// continue to work seamlessly.\nconst isNgZoneEnabled = typeof Zone !== 'undefined' && !!Zone.root;\n\nexport function toMarkdownModule(\n markdownFileFactory: () => Promise<string>\n): () => Promise<RouteExport> {\n return async () => {\n const createLoader = () =>\n Promise.all([import('@analogjs/content'), markdownFileFactory()]);\n\n const [\n { parseRawContentFile, MarkdownRouteComponent, ContentRenderer },\n markdownFile,\n ]: [typeof import('@analogjs/content'), string] = await (isNgZoneEnabled\n ? // We are not able to use `runOutsideAngular` because we are not inside\n // an injection context to retrieve the `NgZone` instance.\n // The `Zone.root.run` is required when the code is running in the\n // browser since asynchronous tasks being scheduled in the current context\n // are a reason for unnecessary change detection cycles.\n Zone.root.run(createLoader)\n : createLoader());\n\n const { content, attributes } = parseRawContentFile(markdownFile);\n const { title, meta } = attributes;\n\n return {\n default: MarkdownRouteComponent,\n routeMeta: {\n data: { _analogContent: content },\n title,\n meta,\n resolve: {\n renderedAnalogContent: async () => {\n const contentRenderer = inject(ContentRenderer);\n return contentRenderer.render(content);\n },\n },\n },\n };\n };\n}\n","export const ENDPOINT_EXTENSION = '.server.ts';\nexport const APP_DIR = 'src/app';\n","/// <reference types=\"vite/client\" />\n\nimport type { Route } from '@angular/router';\n\nimport type { RouteExport, RouteMeta } from './models';\nimport { toRouteConfig } from './route-config';\nimport { toMarkdownModule } from './markdown-helpers';\nimport { APP_DIR, ENDPOINT_EXTENSION } from './constants';\nimport { ANALOG_META_KEY } from './endpoints';\n\nconst FILES = import.meta.glob<RouteExport>([\n '/app/routes/**/*.ts',\n '/src/app/routes/**/*.ts',\n '/src/app/pages/**/*.page.ts',\n '/src/app/pages/**/*.page.analog',\n]);\n\nconst CONTENT_FILES = import.meta.glob<string>(\n ['/src/app/routes/**/*.md', '/src/app/pages/**/*.md'],\n { query: '?analog-content-file=true', import: 'default' }\n);\n\nexport type Files = Record<string, () => Promise<RouteExport | string>>;\n\ntype RawRoute = {\n filename: string | null;\n rawSegment: string;\n ancestorRawSegments: string[];\n segment: string;\n level: number;\n children: RawRoute[];\n};\n\ntype RawRouteMap = Record<string, RawRoute>;\n\ntype RawRouteByLevelMap = Record<number, RawRouteMap>;\n\n/**\n * A function used to parse list of files and create configuration of routes.\n *\n * @param files\n * @returns Array of routes\n */\nexport function createRoutes(files: Files): Route[] {\n const filenames = Object.keys(files);\n\n if (filenames.length === 0) {\n return [];\n }\n\n // map filenames to raw routes and group them by level\n const rawRoutesByLevelMap = filenames.reduce((acc, filename) => {\n const rawPath = toRawPath(filename);\n const rawSegments = rawPath.split('/');\n // nesting level starts at 0\n // rawPath: /products => level: 0\n // rawPath: /products/:id => level: 1\n const level = rawSegments.length - 1;\n const rawSegment = rawSegments[level];\n const ancestorRawSegments = rawSegments.slice(0, level);\n\n return {\n ...acc,\n [level]: {\n ...acc[level],\n [rawPath]: {\n filename,\n rawSegment,\n ancestorRawSegments,\n segment: toSegment(rawSegment),\n level,\n children: [],\n },\n },\n };\n }, {} as RawRouteByLevelMap);\n\n const allLevels = Object.keys(rawRoutesByLevelMap).map(Number);\n const maxLevel = Math.max(...allLevels);\n\n // add each raw route to its parent's children array\n for (let level = maxLevel; level > 0; level--) {\n const rawRoutesMap = rawRoutesByLevelMap[level];\n const rawPaths = Object.keys(rawRoutesMap);\n\n for (const rawPath of rawPaths) {\n const rawRoute = rawRoutesMap[rawPath];\n const parentRawPath = rawRoute.ancestorRawSegments.join('/');\n const parentRawSegmentIndex = rawRoute.ancestorRawSegments.length - 1;\n const parentRawSegment =\n rawRoute.ancestorRawSegments[parentRawSegmentIndex];\n\n // create the parent level and/or raw route if it does not exist\n // parent route won't exist for nested routes that don't have a layout route\n rawRoutesByLevelMap[level - 1] ||= {};\n rawRoutesByLevelMap[level - 1][parentRawPath] ||= {\n filename: null,\n rawSegment: parentRawSegment,\n ancestorRawSegments: rawRoute.ancestorRawSegments.slice(\n 0,\n parentRawSegmentIndex\n ),\n segment: toSegment(parentRawSegment),\n level: level - 1,\n children: [],\n };\n\n rawRoutesByLevelMap[level - 1][parentRawPath].children.push(rawRoute);\n }\n }\n\n // only take raw routes from the root level\n // since they already contain nested routes as their children\n const rootRawRoutesMap = rawRoutesByLevelMap[0];\n const rawRoutes = Object.keys(rootRawRoutesMap).map(\n (segment) => rootRawRoutesMap[segment]\n );\n sortRawRoutes(rawRoutes);\n\n return toRoutes(rawRoutes, files);\n}\n\nfunction toRawPath(filename: string): string {\n return filename\n .replace(\n // convert to relative path and remove file extension\n /^\\/(.*?)\\/routes\\/|^\\/(.*?)\\/pages\\/|\\/app\\/routes\\/|(\\.page\\.(js|ts|analog)$)|(\\.(ts|md|analog)$)/g,\n ''\n )\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [id] => :id\n}\n\nfunction toSegment(rawSegment: string): string {\n return rawSegment\n .replace(/index|\\(.*?\\)/g, '') // replace named empty segments\n .replace(/\\.|\\/+/g, '/') // replace dots with slashes and remove redundant slashes\n .replace(/^\\/+|\\/+$/g, ''); // remove trailing slashes\n}\n\nfunction toRoutes(rawRoutes: RawRoute[], files: Files): Route[] {\n const routes: Route[] = [];\n\n for (const rawRoute of rawRoutes) {\n const children: Route[] | undefined =\n rawRoute.children.length > 0\n ? toRoutes(rawRoute.children, files)\n : undefined;\n let module: (() => Promise<RouteExport>) | undefined = undefined;\n let analogMeta: { endpoint: string; endpointKey: string } | undefined =\n undefined;\n\n if (rawRoute.filename) {\n const isMarkdownFile = rawRoute.filename.endsWith('.md');\n module = isMarkdownFile\n ? toMarkdownModule(files[rawRoute.filename] as () => Promise<string>)\n : (files[rawRoute.filename] as () => Promise<RouteExport>);\n\n const endpointKey = rawRoute.filename.replace(\n /\\.page\\.(ts|analog)$/,\n ENDPOINT_EXTENSION\n );\n\n // get endpoint path\n const rawEndpoint = rawRoute.filename\n .replace(/\\.page\\.(ts|analog)$/, '')\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .split(APP_DIR)[1];\n\n // replace periods, remove (index) paths\n const endpoint = (rawEndpoint || '')\n .replace(/\\./g, '/')\n .replace(/\\/\\((.*?)\\)$/, '/-$1-');\n\n analogMeta = {\n endpoint,\n endpointKey,\n };\n }\n\n const route: Route & { meta?: typeof analogMeta } = module\n ? {\n path: rawRoute.segment,\n loadChildren: () =>\n module!().then((m) => {\n if (!import.meta.env.PROD) {\n const hasModuleDefault = !!m.default;\n const hasRedirect = !!m.routeMeta?.redirectTo;\n\n if (!hasModuleDefault && !hasRedirect) {\n console.warn(\n `[Analog] Missing default export at ${rawRoute.filename}`\n );\n }\n }\n\n return [\n {\n path: '',\n component: m.default,\n ...toRouteConfig(m.routeMeta as RouteMeta | undefined),\n children,\n [ANALOG_META_KEY]: analogMeta,\n },\n ];\n }),\n }\n : { path: rawRoute.segment, children };\n\n routes.push(route);\n }\n\n return routes;\n}\n\nfunction sortRawRoutes(rawRoutes: RawRoute[]): void {\n rawRoutes.sort((a, b) => {\n let segmentA = deprioritizeSegment(a.segment);\n let segmentB = deprioritizeSegment(b.segment);\n\n // prioritize routes with fewer children\n if (a.children.length > b.children.length) {\n segmentA = `~${segmentA}`;\n } else if (a.children.length < b.children.length) {\n segmentB = `~${segmentB}`;\n }\n\n return segmentA > segmentB ? 1 : -1;\n });\n\n for (const rawRoute of rawRoutes) {\n sortRawRoutes(rawRoute.children);\n }\n}\n\nfunction deprioritizeSegment(segment: string): string {\n // deprioritize param and wildcard segments\n return segment.replace(':', '~~').replace('**', '~~~~');\n}\n\nexport const routes: Route[] = createRoutes({ ...FILES, ...CONTENT_FILES });\n","import { inject } from '@angular/core';\nimport { Route as NgRoute, Router } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\n\ntype RouteOmitted =\n | 'component'\n | 'loadComponent'\n | 'loadChildren'\n | 'path'\n | 'pathMatch';\n\ntype RestrictedRoute = Omit<NgRoute, RouteOmitted>;\n\n/**\n * @deprecated Use `RouteMeta` type instead.\n * For more info see: https://github.com/analogjs/analog/issues/223\n *\n * Defines additional route config metadata. This\n * object is merged into the route config with\n * the predefined file-based route.\n *\n * @usageNotes\n *\n * ```\n * import { Component } from '@angular/core';\n * import { defineRouteMeta } from '@analogjs/router';\n *\n * export const routeMeta = defineRouteMeta({\n * title: 'Welcome'\n * });\n *\n * @Component({\n * template: `Home`,\n * standalone: true,\n * })\n * export default class HomeComponent {}\n * ```\n *\n * @param route\n * @returns\n */\nexport const defineRouteMeta = (route: RestrictedRoute) => {\n return route;\n};\n\n/**\n * Returns the instance of Angular Router\n *\n * @returns The router\n */\nexport const injectRouter = () => {\n return inject(Router);\n};\n\n/**\n * Returns the instance of the Activate Route for the component\n *\n * @returns The activated route\n */\nexport const injectActivatedRoute = () => {\n return inject(ActivatedRoute);\n};\n","import {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n makeEnvironmentProviders,\n Provider,\n} from '@angular/core';\nimport { provideRouter, RouterFeatures } from '@angular/router';\n\nimport { routes } from './routes';\nimport { updateMetaTagsOnRouteChange } from './meta-tags';\n\n/**\n * Sets up providers for the Angular router, and registers\n * file-based routes. Additional features can be provided\n * to further configure the behavior of the router.\n *\n * @param features\n * @returns Providers and features to configure the router with routes\n */\nexport function provideFileRouter(\n ...features: RouterFeatures[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n // TODO: remove type casting after Angular >=15.1.1 upgrade\n // https://github.com/angular/angular/pull/48720\n (\n provideRouter(routes, ...features) as unknown as {\n ɵproviders: Provider[];\n }\n ).ɵproviders,\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => updateMetaTagsOnRouteChange(),\n },\n ]);\n}\n","import { Injector, inject } from '@angular/core';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, map } from 'rxjs';\n\nimport { PageServerLoad } from './route-types';\n\nexport function injectLoad<\n T extends (pageServerLoad: PageServerLoad) => Promise<any>\n>(options?: { injector?: Injector }): Observable<Awaited<ReturnType<T>>> {\n const injector = options?.injector ?? inject(Injector);\n const route = injector.get(ActivatedRoute);\n\n return route.data.pipe(\n map<Data, Awaited<ReturnType<T>>>((data) => data['load'])\n );\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * Get server load resolver data for the route\n *\n * @param route Provides the route to get server load resolver\n * @returns Returns server load resolver data for the route\n */\nexport async function getLoadResolver<T>(\n route: ActivatedRouteSnapshot\n): Promise<T> {\n return route.routeConfig?.resolve?.['load']?.(route);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analogjs-router.mjs","sources":["../../../../packages/router/src/lib/meta-tags.ts","../../../../packages/router/src/lib/endpoints.ts","../../../../packages/router/src/lib/route-config.ts","../../../../packages/router/src/lib/markdown-helpers.ts","../../../../packages/router/src/lib/constants.ts","../../../../packages/router/src/lib/routes.ts","../../../../packages/router/src/lib/define-route.ts","../../../../packages/router/src/lib/provide-file-router.ts","../../../../packages/router/src/lib/inject-load.ts","../../../../packages/router/src/lib/get-load-resolver.ts","../../../../packages/router/src/lib/request-context.ts","../../../../packages/router/src/analogjs-router.ts"],"sourcesContent":["import { inject } from '@angular/core';\nimport { Meta, MetaDefinition as NgMetaTag } from '@angular/platform-browser';\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\n\nexport const ROUTE_META_TAGS_KEY = Symbol(\n '@analogjs/router Route Meta Tags Key'\n);\n\nconst CHARSET_KEY = 'charset';\nconst HTTP_EQUIV_KEY = 'httpEquiv';\n// httpEquiv selector key needs to be in kebab case format\nconst HTTP_EQUIV_SELECTOR_KEY = 'http-equiv';\nconst NAME_KEY = 'name';\nconst PROPERTY_KEY = 'property';\nconst CONTENT_KEY = 'content';\n\nexport type MetaTag =\n | (CharsetMetaTag & ExcludeRestMetaTagKeys<typeof CHARSET_KEY>)\n | (HttpEquivMetaTag & ExcludeRestMetaTagKeys<typeof HTTP_EQUIV_KEY>)\n | (NameMetaTag & ExcludeRestMetaTagKeys<typeof NAME_KEY>)\n | (PropertyMetaTag & ExcludeRestMetaTagKeys<typeof PROPERTY_KEY>);\n\ntype CharsetMetaTag = { [CHARSET_KEY]: string };\ntype HttpEquivMetaTag = { [HTTP_EQUIV_KEY]: string; [CONTENT_KEY]: string };\ntype NameMetaTag = { [NAME_KEY]: string; [CONTENT_KEY]: string };\ntype PropertyMetaTag = { [PROPERTY_KEY]: string; [CONTENT_KEY]: string };\n\ntype MetaTagKey =\n | typeof CHARSET_KEY\n | typeof HTTP_EQUIV_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY;\ntype ExcludeRestMetaTagKeys<Key extends MetaTagKey> = {\n [K in Exclude<MetaTagKey, Key>]?: never;\n};\n\ntype MetaTagSelector =\n | typeof CHARSET_KEY\n | `${\n | typeof HTTP_EQUIV_SELECTOR_KEY\n | typeof NAME_KEY\n | typeof PROPERTY_KEY}=\"${string}\"`;\ntype MetaTagMap = Record<MetaTagSelector, MetaTag>;\n\nexport function updateMetaTagsOnRouteChange(): void {\n const router = inject(Router);\n const metaService = inject(Meta);\n\n router.events\n .pipe(filter((event) => event instanceof NavigationEnd))\n .subscribe(() => {\n const metaTagMap = getMetaTagMap(router.routerState.snapshot.root);\n\n for (const metaTagSelector in metaTagMap) {\n const metaTag = metaTagMap[\n metaTagSelector as MetaTagSelector\n ] as NgMetaTag;\n metaService.updateTag(metaTag, metaTagSelector);\n }\n });\n}\n\nfunction getMetaTagMap(route: ActivatedRouteSnapshot): MetaTagMap {\n const metaTagMap = {} as MetaTagMap;\n let currentRoute: ActivatedRouteSnapshot | null = route;\n\n while (currentRoute) {\n const metaTags: MetaTag[] = currentRoute.data[ROUTE_META_TAGS_KEY] ?? [];\n for (const metaTag of metaTags) {\n metaTagMap[getMetaTagSelector(metaTag)] = metaTag;\n }\n\n currentRoute = currentRoute.firstChild;\n }\n\n return metaTagMap;\n}\n\nfunction getMetaTagSelector(metaTag: MetaTag): MetaTagSelector {\n if (metaTag.name) {\n return `${NAME_KEY}=\"${metaTag.name}\"`;\n }\n\n if (metaTag.property) {\n return `${PROPERTY_KEY}=\"${metaTag.property}\"`;\n }\n\n if (metaTag.httpEquiv) {\n return `${HTTP_EQUIV_SELECTOR_KEY}=\"${metaTag.httpEquiv}\"`;\n }\n\n return CHARSET_KEY;\n}\n","export const ANALOG_META_KEY = Symbol(\n '@analogjs/router Analog Route Metadata Key'\n);\n\n/**\n * This variable reference is replaced with a glob of all route endpoints.\n */\nexport let ANALOG_PAGE_ENDPOINTS: any = {};\n","import { inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport type { Route } from '@angular/router';\nimport { injectBaseURL } from '@analogjs/router/tokens';\nimport { firstValueFrom } from 'rxjs';\n\nimport { RedirectRouteMeta, RouteConfig, RouteMeta } from './models';\nimport { ROUTE_META_TAGS_KEY } from './meta-tags';\nimport { ANALOG_PAGE_ENDPOINTS, ANALOG_META_KEY } from './endpoints';\n\nexport function toRouteConfig(routeMeta: RouteMeta | undefined): RouteConfig {\n if (routeMeta && isRedirectRouteMeta(routeMeta)) {\n return routeMeta;\n }\n\n let { meta, ...routeConfig } = routeMeta ?? {};\n\n if (Array.isArray(meta)) {\n routeConfig.data = { ...routeConfig.data, [ROUTE_META_TAGS_KEY]: meta };\n } else if (typeof meta === 'function') {\n routeConfig.resolve = {\n ...routeConfig.resolve,\n [ROUTE_META_TAGS_KEY]: meta,\n };\n }\n\n if (!routeConfig) {\n routeConfig = {};\n }\n\n routeConfig.resolve = {\n ...routeConfig.resolve,\n load: async (route) => {\n const baseUrl = injectBaseURL();\n const routeConfig = route.routeConfig as Route & {\n [ANALOG_META_KEY]: { endpoint: string; endpointKey: string };\n };\n\n if (ANALOG_PAGE_ENDPOINTS[routeConfig[ANALOG_META_KEY].endpointKey]) {\n const { queryParams, fragment: hash, params, parent } = route;\n const segment =\n parent?.url.map((segment) => segment.path).join('/') || '';\n const url = new URL(\n '',\n import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] ||\n baseUrl ||\n (typeof window !== 'undefined' && window.location.origin\n ? window.location.origin\n : '')\n );\n\n url.pathname = `${\n url.pathname.endsWith('/') ? url.pathname : url.pathname + '/'\n }api/_analog${routeConfig[ANALOG_META_KEY].endpoint}`;\n url.search = `${new URLSearchParams(queryParams).toString()}`;\n url.hash = hash ?? '';\n\n Object.keys(params).forEach((param) => {\n url.pathname = url.pathname.replace(`[${param}]`, params[param]);\n });\n url.pathname = url.pathname.replace('**', segment);\n\n if (\n !!import.meta.env['VITE_ANALOG_PUBLIC_BASE_URL'] &&\n (globalThis as any).$fetch\n ) {\n return (globalThis as any).$fetch(url.pathname);\n }\n\n const http = inject(HttpClient);\n return firstValueFrom(http.get(`${url.href}`));\n }\n\n return {};\n },\n };\n\n return routeConfig;\n}\n\nfunction isRedirectRouteMeta(\n routeMeta: RouteMeta\n): routeMeta is RedirectRouteMeta {\n return !!routeMeta.redirectTo;\n}\n","import { inject } from '@angular/core';\nimport { RouteExport } from './models';\n\ndeclare const Zone: any;\n\n// The Zone is currently enabled by default, so we wouldn't need this check.\n// However, leaving this open space will be useful if zone.js becomes optional\n// in the future. This means we won't have to modify the current code, and it will\n// continue to work seamlessly.\nconst isNgZoneEnabled = typeof Zone !== 'undefined' && !!Zone.root;\n\nexport function toMarkdownModule(\n markdownFileFactory: () => Promise<string>\n): () => Promise<RouteExport> {\n return async () => {\n const createLoader = () =>\n Promise.all([import('@analogjs/content'), markdownFileFactory()]);\n\n const [\n { parseRawContentFile, MarkdownRouteComponent, ContentRenderer },\n markdownFile,\n ]: [typeof import('@analogjs/content'), string] = await (isNgZoneEnabled\n ? // We are not able to use `runOutsideAngular` because we are not inside\n // an injection context to retrieve the `NgZone` instance.\n // The `Zone.root.run` is required when the code is running in the\n // browser since asynchronous tasks being scheduled in the current context\n // are a reason for unnecessary change detection cycles.\n Zone.root.run(createLoader)\n : createLoader());\n\n const { content, attributes } = parseRawContentFile(markdownFile);\n const { title, meta } = attributes;\n\n return {\n default: MarkdownRouteComponent,\n routeMeta: {\n data: { _analogContent: content },\n title,\n meta,\n resolve: {\n renderedAnalogContent: async () => {\n const contentRenderer = inject(ContentRenderer);\n return contentRenderer.render(content);\n },\n },\n },\n };\n };\n}\n","export const ENDPOINT_EXTENSION = '.server.ts';\nexport const APP_DIR = 'src/app';\n","/// <reference types=\"vite/client\" />\n\nimport type { Route } from '@angular/router';\n\nimport type { RouteExport, RouteMeta } from './models';\nimport { toRouteConfig } from './route-config';\nimport { toMarkdownModule } from './markdown-helpers';\nimport { APP_DIR, ENDPOINT_EXTENSION } from './constants';\nimport { ANALOG_META_KEY } from './endpoints';\n\n/**\n * This variable reference is replaced with a glob of all page routes.\n */\nlet ANALOG_ROUTE_FILES = {};\n\n/**\n * This variable reference is replaced with a glob of all content routes.\n */\nlet ANALOG_CONTENT_ROUTE_FILES = {};\n\nexport type Files = Record<string, () => Promise<RouteExport | string>>;\n\ntype RawRoute = {\n filename: string | null;\n rawSegment: string;\n ancestorRawSegments: string[];\n segment: string;\n level: number;\n children: RawRoute[];\n};\n\ntype RawRouteMap = Record<string, RawRoute>;\n\ntype RawRouteByLevelMap = Record<number, RawRouteMap>;\n\n/**\n * A function used to parse list of files and create configuration of routes.\n *\n * @param files\n * @returns Array of routes\n */\nexport function createRoutes(files: Files): Route[] {\n const filenames = Object.keys(files);\n\n if (filenames.length === 0) {\n return [];\n }\n\n // map filenames to raw routes and group them by level\n const rawRoutesByLevelMap = filenames.reduce((acc, filename) => {\n const rawPath = toRawPath(filename);\n const rawSegments = rawPath.split('/');\n // nesting level starts at 0\n // rawPath: /products => level: 0\n // rawPath: /products/:id => level: 1\n const level = rawSegments.length - 1;\n const rawSegment = rawSegments[level];\n const ancestorRawSegments = rawSegments.slice(0, level);\n\n return {\n ...acc,\n [level]: {\n ...acc[level],\n [rawPath]: {\n filename,\n rawSegment,\n ancestorRawSegments,\n segment: toSegment(rawSegment),\n level,\n children: [],\n },\n },\n };\n }, {} as RawRouteByLevelMap);\n\n const allLevels = Object.keys(rawRoutesByLevelMap).map(Number);\n const maxLevel = Math.max(...allLevels);\n\n // add each raw route to its parent's children array\n for (let level = maxLevel; level > 0; level--) {\n const rawRoutesMap = rawRoutesByLevelMap[level];\n const rawPaths = Object.keys(rawRoutesMap);\n\n for (const rawPath of rawPaths) {\n const rawRoute = rawRoutesMap[rawPath];\n const parentRawPath = rawRoute.ancestorRawSegments.join('/');\n const parentRawSegmentIndex = rawRoute.ancestorRawSegments.length - 1;\n const parentRawSegment =\n rawRoute.ancestorRawSegments[parentRawSegmentIndex];\n\n // create the parent level and/or raw route if it does not exist\n // parent route won't exist for nested routes that don't have a layout route\n rawRoutesByLevelMap[level - 1] ||= {};\n rawRoutesByLevelMap[level - 1][parentRawPath] ||= {\n filename: null,\n rawSegment: parentRawSegment,\n ancestorRawSegments: rawRoute.ancestorRawSegments.slice(\n 0,\n parentRawSegmentIndex\n ),\n segment: toSegment(parentRawSegment),\n level: level - 1,\n children: [],\n };\n\n rawRoutesByLevelMap[level - 1][parentRawPath].children.push(rawRoute);\n }\n }\n\n // only take raw routes from the root level\n // since they already contain nested routes as their children\n const rootRawRoutesMap = rawRoutesByLevelMap[0];\n const rawRoutes = Object.keys(rootRawRoutesMap).map(\n (segment) => rootRawRoutesMap[segment]\n );\n sortRawRoutes(rawRoutes);\n\n return toRoutes(rawRoutes, files);\n}\n\nfunction toRawPath(filename: string): string {\n return filename\n .replace(\n // convert to relative path and remove file extension\n /^\\/(.*?)\\/routes\\/|^\\/(.*?)\\/pages\\/|\\/app\\/routes\\/|(\\.page\\.(js|ts|analog)$)|(\\.(ts|md|analog)$)/g,\n ''\n )\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/\\[([^\\]]+)\\]/g, ':$1'); // [id] => :id\n}\n\nfunction toSegment(rawSegment: string): string {\n return rawSegment\n .replace(/index|\\(.*?\\)/g, '') // replace named empty segments\n .replace(/\\.|\\/+/g, '/') // replace dots with slashes and remove redundant slashes\n .replace(/^\\/+|\\/+$/g, ''); // remove trailing slashes\n}\n\nfunction toRoutes(rawRoutes: RawRoute[], files: Files): Route[] {\n const routes: Route[] = [];\n\n for (const rawRoute of rawRoutes) {\n const children: Route[] | undefined =\n rawRoute.children.length > 0\n ? toRoutes(rawRoute.children, files)\n : undefined;\n let module: (() => Promise<RouteExport>) | undefined = undefined;\n let analogMeta: { endpoint: string; endpointKey: string } | undefined =\n undefined;\n\n if (rawRoute.filename) {\n const isMarkdownFile = rawRoute.filename.endsWith('.md');\n module = isMarkdownFile\n ? toMarkdownModule(files[rawRoute.filename] as () => Promise<string>)\n : (files[rawRoute.filename] as () => Promise<RouteExport>);\n\n const endpointKey = rawRoute.filename.replace(\n /\\.page\\.(ts|analog)$/,\n ENDPOINT_EXTENSION\n );\n\n // get endpoint path\n const rawEndpoint = rawRoute.filename\n .replace(/\\.page\\.(ts|analog)$/, '')\n .replace(/\\[\\.{3}.+\\]/, '**') // [...not-found] => **\n .replace(/^(.*?)\\/pages/, '/pages');\n\n // replace periods, remove (index) paths\n const endpoint = (rawEndpoint || '')\n .replace(/\\./g, '/')\n .replace(/\\/\\((.*?)\\)$/, '/-$1-');\n\n analogMeta = {\n endpoint,\n endpointKey,\n };\n }\n\n const route: Route & { meta?: typeof analogMeta } = module\n ? {\n path: rawRoute.segment,\n loadChildren: () =>\n module!().then((m) => {\n if (!import.meta.env.PROD) {\n const hasModuleDefault = !!m.default;\n const hasRedirect = !!m.routeMeta?.redirectTo;\n\n if (!hasModuleDefault && !hasRedirect) {\n console.warn(\n `[Analog] Missing default export at ${rawRoute.filename}`\n );\n }\n }\n\n return [\n {\n path: '',\n component: m.default,\n ...toRouteConfig(m.routeMeta as RouteMeta | undefined),\n children,\n [ANALOG_META_KEY]: analogMeta,\n },\n ];\n }),\n }\n : { path: rawRoute.segment, children };\n\n routes.push(route);\n }\n\n return routes;\n}\n\nfunction sortRawRoutes(rawRoutes: RawRoute[]): void {\n rawRoutes.sort((a, b) => {\n let segmentA = deprioritizeSegment(a.segment);\n let segmentB = deprioritizeSegment(b.segment);\n\n // prioritize routes with fewer children\n if (a.children.length > b.children.length) {\n segmentA = `~${segmentA}`;\n } else if (a.children.length < b.children.length) {\n segmentB = `~${segmentB}`;\n }\n\n return segmentA > segmentB ? 1 : -1;\n });\n\n for (const rawRoute of rawRoutes) {\n sortRawRoutes(rawRoute.children);\n }\n}\n\nfunction deprioritizeSegment(segment: string): string {\n // deprioritize param and wildcard segments\n return segment.replace(':', '~~').replace('**', '~~~~');\n}\n\nexport const routes: Route[] = createRoutes({\n ...ANALOG_ROUTE_FILES,\n ...ANALOG_CONTENT_ROUTE_FILES,\n});\n","import { inject } from '@angular/core';\nimport { Route as NgRoute, Router } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\n\ntype RouteOmitted =\n | 'component'\n | 'loadComponent'\n | 'loadChildren'\n | 'path'\n | 'pathMatch';\n\ntype RestrictedRoute = Omit<NgRoute, RouteOmitted>;\n\n/**\n * @deprecated Use `RouteMeta` type instead.\n * For more info see: https://github.com/analogjs/analog/issues/223\n *\n * Defines additional route config metadata. This\n * object is merged into the route config with\n * the predefined file-based route.\n *\n * @usageNotes\n *\n * ```\n * import { Component } from '@angular/core';\n * import { defineRouteMeta } from '@analogjs/router';\n *\n * export const routeMeta = defineRouteMeta({\n * title: 'Welcome'\n * });\n *\n * @Component({\n * template: `Home`,\n * standalone: true,\n * })\n * export default class HomeComponent {}\n * ```\n *\n * @param route\n * @returns\n */\nexport const defineRouteMeta = (route: RestrictedRoute) => {\n return route;\n};\n\n/**\n * Returns the instance of Angular Router\n *\n * @returns The router\n */\nexport const injectRouter = () => {\n return inject(Router);\n};\n\n/**\n * Returns the instance of the Activate Route for the component\n *\n * @returns The activated route\n */\nexport const injectActivatedRoute = () => {\n return inject(ActivatedRoute);\n};\n","import {\n ENVIRONMENT_INITIALIZER,\n EnvironmentProviders,\n makeEnvironmentProviders,\n} from '@angular/core';\nimport { provideRouter, RouterFeatures } from '@angular/router';\n\nimport { routes } from './routes';\nimport { updateMetaTagsOnRouteChange } from './meta-tags';\n\n/**\n * Sets up providers for the Angular router, and registers\n * file-based routes. Additional features can be provided\n * to further configure the behavior of the router.\n *\n * @param features\n * @returns Providers and features to configure the router with routes\n */\nexport function provideFileRouter(\n ...features: RouterFeatures[]\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideRouter(routes, ...features),\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue: () => updateMetaTagsOnRouteChange(),\n },\n ]);\n}\n","import { Injector, inject } from '@angular/core';\nimport { ActivatedRoute, Data } from '@angular/router';\nimport { Observable, map } from 'rxjs';\n\nimport { PageServerLoad } from './route-types';\n\nexport function injectLoad<\n T extends (pageServerLoad: PageServerLoad) => Promise<any>\n>(options?: { injector?: Injector }): Observable<Awaited<ReturnType<T>>> {\n const injector = options?.injector ?? inject(Injector);\n const route = injector.get(ActivatedRoute);\n\n return route.data.pipe(\n map<Data, Awaited<ReturnType<T>>>((data) => data['load'])\n );\n}\n","import { ActivatedRouteSnapshot } from '@angular/router';\n\n/**\n * Get server load resolver data for the route\n *\n * @param route Provides the route to get server load resolver\n * @returns Returns server load resolver data for the route\n */\nexport async function getLoadResolver<T>(\n route: ActivatedRouteSnapshot\n): Promise<T> {\n return route.routeConfig?.resolve?.['load']?.(route);\n}\n","import { TransferState, inject, makeStateKey } from '@angular/core';\nimport {\n HttpHandlerFn,\n HttpHeaders,\n HttpRequest,\n HttpResponse,\n} from '@angular/common/http';\n\nimport { from, of } from 'rxjs';\n\nimport { injectBaseURL } from '@analogjs/router/tokens';\n\n/**\n * Interceptor that is server-aware when making HttpClient requests.\n * Server-side requests use the full URL\n * Prerendering uses the internal Nitro $fetch function, along with state transfer\n * Client-side requests use the window.location.origin\n *\n * @param req HttpRequest<unknown>\n * @param next HttpHandlerFn\n * @returns\n */\nexport function requestContextInterceptor(\n req: HttpRequest<unknown>,\n next: HttpHandlerFn\n) {\n const baseUrl = injectBaseURL();\n const transferState = inject(TransferState);\n const storeKey = makeStateKey<unknown>(`analog_${req.urlWithParams}`);\n\n // during prerendering with Nitro\n if (\n typeof global !== 'undefined' &&\n global.$fetch &&\n baseUrl &&\n (req.url.startsWith('/') || req.url.startsWith(baseUrl))\n ) {\n const requestUrl = new URL(req.url, baseUrl);\n const fetchUrl = req.url.includes('/api/')\n ? requestUrl.pathname\n : requestUrl.href;\n\n return from(\n global.$fetch\n .raw(fetchUrl, {\n method: req.method as any,\n params: requestUrl.searchParams,\n headers: req.headers.keys().reduce((hdrs, current) => {\n return {\n ...hdrs,\n [current]: req.headers.get(current),\n };\n }, {}),\n })\n .then((res) => {\n const cacheResponse = {\n body: res._data,\n headers: new HttpHeaders(res.headers),\n status: 200,\n statusText: 'OK',\n url: fetchUrl,\n };\n const transferResponse = new HttpResponse(cacheResponse);\n\n transferState.set(storeKey, cacheResponse);\n return transferResponse;\n })\n );\n }\n\n // on the client\n if (!import.meta.env.SSR && req.url.startsWith('/')) {\n const cacheRestoreResponse = transferState.get(storeKey, null);\n\n if (cacheRestoreResponse) {\n transferState.remove(storeKey);\n return of(new HttpResponse(cacheRestoreResponse));\n }\n\n return next(\n req.clone({\n url: `${window.location.origin}${req.url}`,\n })\n );\n }\n\n // on the server\n if (baseUrl && (req.url.startsWith('/') || req.url.startsWith(baseUrl))) {\n const requestUrl =\n req.url.startsWith(baseUrl) && !req.url.startsWith('/')\n ? req.url\n : `${baseUrl}${req.url}`;\n\n return next(\n req.clone({\n url: requestUrl,\n })\n );\n }\n\n return next(req);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export { MetaTag } from './lib/meta-tags';
8
8
  export { PageServerLoad, LoadResult } from './lib/route-types';
9
9
  export { injectLoad } from './lib/inject-load';
10
10
  export { getLoadResolver } from './lib/get-load-resolver';
11
+ export { requestContextInterceptor } from './lib/request-context';
@@ -1,2 +1,5 @@
1
1
  export declare const ANALOG_META_KEY: unique symbol;
2
- export declare const PAGE_ENDPOINTS: Record<string, () => Promise<unknown>>;
2
+ /**
3
+ * This variable reference is replaced with a glob of all route endpoints.
4
+ */
5
+ export declare let ANALOG_PAGE_ENDPOINTS: any;
@@ -0,0 +1,12 @@
1
+ import { HttpHandlerFn, HttpRequest } from '@angular/common/http';
2
+ /**
3
+ * Interceptor that is server-aware when making HttpClient requests.
4
+ * Server-side requests use the full URL
5
+ * Prerendering uses the internal Nitro $fetch function, along with state transfer
6
+ * Client-side requests use the window.location.origin
7
+ *
8
+ * @param req HttpRequest<unknown>
9
+ * @param next HttpHandlerFn
10
+ * @returns
11
+ */
12
+ export declare function requestContextInterceptor(req: HttpRequest<unknown>, next: HttpHandlerFn): import("rxjs").Observable<import("@angular/common/http").HttpEvent<unknown>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/router",
3
- "version": "1.7.0-beta.1",
3
+ "version": "1.7.0-beta.10",
4
4
  "description": "Filesystem-based routing for Angular",
5
5
  "type": "module",
6
6
  "author": "Brandon Roberts <robertsbt@gmail.com>",
@@ -20,12 +20,10 @@
20
20
  "url": "https://github.com/analogjs/analog.git"
21
21
  },
22
22
  "peerDependencies": {
23
+ "@analogjs/content": "^1.7.0-beta.10",
23
24
  "@angular/core": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
24
25
  "@angular/router": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
25
26
  },
26
- "optionalDependencies": {
27
- "@analogjs/content": "^1.7.0-beta.1"
28
- },
29
27
  "dependencies": {
30
28
  "tslib": "^2.0.0"
31
29
  },
@@ -51,6 +49,18 @@
51
49
  "esm2022": "./esm2022/analogjs-router.mjs",
52
50
  "esm": "./esm2022/analogjs-router.mjs",
53
51
  "default": "./fesm2022/analogjs-router.mjs"
52
+ },
53
+ "./server": {
54
+ "types": "./server/index.d.ts",
55
+ "esm2022": "./esm2022/server/analogjs-router-server.mjs",
56
+ "esm": "./esm2022/server/analogjs-router-server.mjs",
57
+ "default": "./fesm2022/analogjs-router-server.mjs"
58
+ },
59
+ "./tokens": {
60
+ "types": "./tokens/index.d.ts",
61
+ "esm2022": "./esm2022/tokens/analogjs-router-tokens.mjs",
62
+ "esm": "./esm2022/tokens/analogjs-router-tokens.mjs",
63
+ "default": "./fesm2022/analogjs-router-tokens.mjs"
54
64
  }
55
65
  },
56
66
  "sideEffects": false
@@ -0,0 +1 @@
1
+ export { provideServerContext } from './provide-server-context';
@@ -0,0 +1,10 @@
1
+ import { StaticProvider } from '@angular/core';
2
+ import { ServerRequest, ServerResponse } from '@analogjs/router/tokens';
3
+ export declare function provideServerContext({ req, res, }: {
4
+ req: ServerRequest;
5
+ res: ServerResponse;
6
+ }): StaticProvider[];
7
+ export declare function getBaseUrl(req: ServerRequest): string;
8
+ export declare function getRequestProtocol(req: ServerRequest, opts?: {
9
+ xForwardedProto?: boolean;
10
+ }): "https" | "http";
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" />
2
+ import { InjectionToken } from '@angular/core';
3
+ import type { IncomingMessage, ServerResponse as NodeServerResponse } from 'node:http';
4
+ export type ServerRequest = IncomingMessage & {
5
+ originalUrl: string;
6
+ };
7
+ export type ServerResponse = NodeServerResponse;
8
+ export type ServerContext = {
9
+ req: ServerRequest;
10
+ res: ServerResponse;
11
+ };
12
+ export declare const REQUEST: InjectionToken<ServerRequest>;
13
+ export declare const RESPONSE: InjectionToken<ServerResponse>;
14
+ export declare const BASE_URL: InjectionToken<string>;
15
+ export declare function injectRequest(): ServerRequest | null;
16
+ export declare function injectResponse(): ServerResponse | null;
17
+ export declare function injectBaseURL(): string | null;