tungsten 0.5.8 → 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- 1789634748309
1
+ 1789636071115
@@ -36,9 +36,13 @@ export declare class Instance {
36
36
  runtimeContext: ClientRuntimeContext | undefined;
37
37
  registeredComponents: DisposableComponent[];
38
38
  constructor(location: string, instanceConfig: InstanceConfig, reqRes: ReqRes | null, appRoutes: AppRoutes, routes: Routes, internalStore: TrueStore<InternalStoreSchema>, stores: TrueStore<any>[], storeSubscriptions: StoreSubscriptionsMap, globalData: GlobalData, matchedRouteInfo: MatchedRouteInfo, runtimeContext?: ClientRuntimeContext);
39
+ routeKeyToUrl: (routeKey: RouteKey) => string;
40
+ urlToRouteKey: (pathname: string) => RouteKey;
39
41
  getRoutes: () => Routes;
40
42
  updateLocation: (location: string) => void;
41
- goto: (routeKey: RouteKey) => Promise<void>;
43
+ goto: (routeKey: RouteKey, { pushHistory }?: {
44
+ pushHistory?: boolean;
45
+ }) => Promise<void>;
42
46
  redirect: (url: string, code?: RedirectCode) => void;
43
47
  setDefaultTitle: (defaultTitle: string) => void;
44
48
  setTitle: (title: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/Instance/Instance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/Instance/Instance.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
4
4
  import { isClient } from '../isClient.js';
5
5
  import { routing } from "../Servers/routing.js";
6
6
  import { RoutingRedirect } from '../routing/RoutingRedirect.js';
7
+ import { routeKeyToUrl, urlToRouteKey } from '../routing/routeUrl.js';
7
8
  import { isProd } from '../isProd.js';
8
9
  import { WebRedirect } from '../routing/WebRedirect.js';
9
10
  import { RouteRedirectComponent } from "../components/RouteRedirectComponent.js";
@@ -41,6 +42,14 @@ export class Instance {
41
42
  _defineProperty(this, "navigating", false);
42
43
  _defineProperty(this, "runtimeContext", void 0);
43
44
  _defineProperty(this, "registeredComponents", []);
45
+ _defineProperty(this, "routeKeyToUrl", routeKey => {
46
+ return routeKeyToUrl(routeKey, this.config.siteBasePath, isProd && this.config.staticSite);
47
+ });
48
+ // unchecked: goto's routing() does the pattern matching and 404 fallback
49
+ _defineProperty(this, "urlToRouteKey", pathname => {
50
+ const routeKey = urlToRouteKey(pathname, this.config.siteBasePath, isProd && this.config.staticSite);
51
+ return routeKey; // eslint-disable-line @typescript-eslint/no-unsafe-type-assertion
52
+ });
44
53
  _defineProperty(this, "getRoutes", () => {
45
54
  return typeof this.appRoutes === 'function' ? this.appRoutes(this.reqRes) : this.appRoutes;
46
55
  });
@@ -51,7 +60,9 @@ export class Instance {
51
60
  this.location = location;
52
61
  this.internalStore.location.set(location);
53
62
  });
54
- _defineProperty(this, "goto", async routeKey => {
63
+ _defineProperty(this, "goto", async (routeKey, {
64
+ pushHistory = true
65
+ } = {}) => {
55
66
  // get route data
56
67
  this.navigating = true;
57
68
  let matchedRouteInfo;
@@ -108,11 +119,9 @@ export class Instance {
108
119
  //console.log('location', location)
109
120
  //console.log('final dest', this.config.siteBasePath + location)
110
121
  this.matchedRouteInfo = matchedRouteInfo;
111
- const publicUrl = isProd && this.config.staticSite === true // add .html suffix for static sites
112
- ? routeKey === '/' ? '/' : routeKey + '.html' : routeKey;
113
- if (isClient) {
122
+ if (isClient && pushHistory) {
114
123
  const runtimeWindow = this.runtimeContext?.window ?? window;
115
- runtimeWindow.history.pushState(null, '', this.config.siteBasePath + publicUrl);
124
+ runtimeWindow.history.pushState(null, '', this.routeKeyToUrl(routeKey));
116
125
  }
117
126
  this.setTitleToDefault();
118
127
  this.updateLocation(routeKey); // this.internalStore.set('location', to)
@@ -206,10 +215,10 @@ export class Instance {
206
215
  runtimeWindow.addEventListener('popstate', event => {
207
216
  //console.log('popstate', window.location.pathname)
208
217
  //this.updateLocation(window.location.pathname)
209
- const newLocation = runtimeWindow.location.pathname;
210
- // unchecked: goto's routing() does the pattern matching and 404 fallback
211
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
212
- void this.goto(newLocation);
218
+ const newLocation = this.urlToRouteKey(runtimeWindow.location.pathname);
219
+ void this.goto(newLocation, {
220
+ pushHistory: false
221
+ });
213
222
  });
214
223
  }
215
224
  }
@@ -6,5 +6,5 @@ export declare class InternalStoreSchema {
6
6
  popMessages: PopMessage[];
7
7
  constructor(location: string, matchedRouteInfo: MatchedRouteInfo);
8
8
  }
9
- export type PartialInternalStoreSchema = Pick<InternalStoreSchema, 'location' | 'popMessages'> & Partial<Omit<InternalStoreSchema, 'location' | 'popMessages'>>;
9
+ export type PartialInternalStoreSchema = Pick<InternalStoreSchema, 'popMessages'> & Partial<Omit<InternalStoreSchema, 'popMessages'>>;
10
10
  //# sourceMappingURL=InternalStoreSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InternalStoreSchema.d.ts","sourceRoot":"","sources":["../../src/Store/InternalStoreSchema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,qBAAa,mBAAmB;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,WAAW,EAAE,UAAU,EAAE,CAAK;gBAClB,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB;CAInE;AAGD,MAAM,MAAM,0BAA0B,GAChC,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,CAAC,GACrD,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"InternalStoreSchema.d.ts","sourceRoot":"","sources":["../../src/Store/InternalStoreSchema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAGvD,qBAAa,mBAAmB;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,WAAW,EAAE,UAAU,EAAE,CAAK;gBAClB,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB;CAInE;AAGD,MAAM,MAAM,0BAA0B,GAChC,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAI3D,MAAM,MAAM,SAAS,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAA;CACxB,CAAA;AAED,qBAAa,IAAK,SAAQ,uBAAuB,CAAC,SAAS,CAAC;IACxD,IAAI,SAIe;IACnB,KAAK,GAAI,OAAO,gBAAgB,UAgB/B;IACD,OAAO,uDAUN;CACJ"}
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAG3D,MAAM,MAAM,SAAS,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAA;CACxB,CAAA;AAED,qBAAa,IAAK,SAAQ,uBAAuB,CAAC,SAAS,CAAC;IACxD,IAAI,SAA+C;IACnD,KAAK,GAAI,OAAO,gBAAgB,UAgB/B;IACD,OAAO,uDAUN;CACJ"}
@@ -2,12 +2,11 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
4
  import { TungstenSimpleComponent } from "../Components.js";
5
- import { isProd } from '../isProd.js';
6
5
  import { jsx as _jsx } from "tungsten/jsx-runtime";
7
6
  export class Link extends TungstenSimpleComponent {
8
7
  constructor(...args) {
9
8
  super(...args);
10
- _defineProperty(this, "href", isProd && this.__instance.config.staticSite ? this.props.to === '/' ? this.__instance.config.siteBasePath + '/' : this.__instance.config.siteBasePath + this.props.to + '.html' : this.props.to);
9
+ _defineProperty(this, "href", this.__instance.routeKeyToUrl(this.props.to));
11
10
  _defineProperty(this, "click", (event /* Event */) => {
12
11
  // GUARD if control key is pressed, allow the link to be opened in a new tab
13
12
  // should this only apply on chrome?
@@ -1 +1 @@
1
- {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/hydrate/hydrate.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAoCxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAO7C,OAAO,EAGH,KAAK,yBAAyB,EAEjC,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAiBlD,OAAO,EAC4B,KAAK,uBAAuB,EAC9D,MAAM,oCAAoC,CAAA;AAS3C,OAAO,0BAA0B,CAAA;AASjC,MAAM,MAAM,WAAW,GAAG;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,uBAAuB,EAAE,CAAA;IAGrC,WAAW,EAAE,OAAO,CAAA;CACvB,CAAA;AACD,wBAAgB,sBAAsB,IAAI,WAAW,CAEpD;AAID,wBAAsB,OAAO,CACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,yBAAyB,GAAG,IAAI,EAC/C,cAAc,EAAE,cAAc,iBAgEjC;AAyBD,wBAAsB,oBAAoB,CACtC,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EAIjB,KAAK,GAAE,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAM,EAChD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CA6DtC"}
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/hydrate/hydrate.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAQnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAoCxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAO7C,OAAO,EAGH,KAAK,yBAAyB,EAEjC,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAmBlD,OAAO,EAC4B,KAAK,uBAAuB,EAC9D,MAAM,oCAAoC,CAAA;AAS3C,OAAO,0BAA0B,CAAA;AASjC,MAAM,MAAM,WAAW,GAAG;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,uBAAuB,EAAE,CAAA;IAGrC,WAAW,EAAE,OAAO,CAAA;CACvB,CAAA;AACD,wBAAgB,sBAAsB,IAAI,WAAW,CAEpD;AAID,wBAAsB,OAAO,CACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,yBAAyB,GAAG,IAAI,EAC/C,cAAc,EAAE,cAAc,iBAkEjC;AAyBD,wBAAsB,oBAAoB,CACtC,aAAa,SAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EAIjB,KAAK,GAAE,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAM,EAChD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CA6DtC"}
@@ -27,6 +27,8 @@ import { checkedValueToBoolean } from '../checkedValueToBoolean.js';
27
27
  import { Default404 } from "../routing/Default404.js";
28
28
  import { MatchedRoute } from '../routing/MatchedRoute.js';
29
29
  import { isDev } from '../isDev.js';
30
+ import { isProd } from '../isProd.js';
31
+ import { urlToRouteKey } from '../routing/routeUrl.js';
30
32
  import { warn } from '../appOutput.js';
31
33
  import { reconcileHydratedAttributes } from './reconcileHydratedAttributes.js';
32
34
  import { markOptionSelected } from '../markOptionSelected.js';
@@ -58,7 +60,7 @@ export async function hydrate(appRoutes, RootComponent, instanceConfig) {
58
60
  // happens next (a read of its value throws below). Rendered again at the end, for the count.
59
61
  if (isDev) renderDocInitErrorBanner();
60
62
  //console.log('hydration global data ', __tungsten_global_data__)
61
- const location = window.location.pathname;
63
+ const location = urlToRouteKey(window.location.pathname, instanceConfig.siteBasePath, isProd && instanceConfig.staticSite);
62
64
  const routes = typeof appRoutes === 'function' ? appRoutes(null) : appRoutes;
63
65
  const matchedRouteInfo = hydrationRouting(__tungsten_matched_route_info__, routes);
64
66
  const globalData = __tungsten_global_data__;
@@ -0,0 +1,4 @@
1
+ import type { SiteBasePath } from '../render/HeadData.js';
2
+ export declare function routeKeyToUrl(routeKey: string, siteBasePath: SiteBasePath, staticFiles: boolean): string;
3
+ export declare function urlToRouteKey(pathname: string, siteBasePath: SiteBasePath, staticFiles: boolean): string;
4
+ //# sourceMappingURL=routeUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeUrl.d.ts","sourceRoot":"","sources":["../../src/routing/routeUrl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAOzD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CASxG;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAWxG"}
@@ -0,0 +1,23 @@
1
+ // staticFiles: the site is served as generated .html files (a prod static site)
2
+ const trimBase = siteBasePath => siteBasePath.replace(/\/$/, '');
3
+ export function routeKeyToUrl(routeKey, siteBasePath, staticFiles) {
4
+ const base = trimBase(siteBasePath);
5
+ if (!staticFiles) return base + routeKey;
6
+ const suffixIndex = routeKey.search(/[?#]/);
7
+ const path = suffixIndex === -1 ? routeKey : routeKey.slice(0, suffixIndex);
8
+ const suffix = suffixIndex === -1 ? '' : routeKey.slice(suffixIndex);
9
+ // a directory route links to the directory; the host serves its index.html
10
+ const file = path.endsWith('/') ? path : path + '.html';
11
+ return base + file + suffix;
12
+ }
13
+ export function urlToRouteKey(pathname, siteBasePath, staticFiles) {
14
+ const base = trimBase(siteBasePath);
15
+ let path = pathname;
16
+ if (base !== '' && (path === base || path.startsWith(base + '/'))) {
17
+ path = path.slice(base.length) || '/';
18
+ }
19
+ if (staticFiles) {
20
+ if (path.endsWith('/index.html')) path = path.slice(0, -'index.html'.length);else if (path.endsWith('.html')) path = path.slice(0, -'.html'.length);
21
+ }
22
+ return path;
23
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"staticGenFunctions.d.ts","sourceRoot":"","sources":["../../src/staticGen/staticGenFunctions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAGzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,UAM1C;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,UAMlE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQnD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAM/E"}
1
+ {"version":3,"file":"staticGenFunctions.d.ts","sourceRoot":"","sources":["../../src/staticGen/staticGenFunctions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAIzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,UAM1C;AACD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,UAElE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQnD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAM/E"}
@@ -1,3 +1,4 @@
1
+ import { routeKeyToUrl } from '../routing/routeUrl.js';
1
2
  export function pathToFileName(path) {
2
3
  // Is this good?
3
4
  // /foo/ becomes /foo/index.html
@@ -5,10 +6,7 @@ export function pathToFileName(path) {
5
6
  if (path.endsWith('/')) return path + 'index.html';else return path + '.html';
6
7
  }
7
8
  export function pathToLink(path, siteBasePath) {
8
- // Is this good?
9
- // /foo/ becomes /foo/index.html
10
- // seems like a bodge
11
- if (path.endsWith('/')) return siteBasePath + path + 'index.html';else return siteBasePath + path + '.html';
9
+ return routeKeyToUrl(path, siteBasePath, true);
12
10
  }
13
11
  export function findLinks(content) {
14
12
  const matches = [...content.matchAll(/href="(.+?)"/g)].map(x => {
@@ -37,7 +37,9 @@ async function hostedRouting(options) {
37
37
  return {
38
38
  routes: options.routes,
39
39
  internalStore: {
40
- location: location ?? '/',
40
+ ...(location !== undefined ? {
41
+ location
42
+ } : {}),
41
43
  ...(matchedRouteInfo !== undefined ? {
42
44
  matchedRouteInfo
43
45
  } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"testingComponentPackage.d.ts","sourceRoot":"","sources":["../../src/testing/testingComponentPackage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAuB,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAGtE,MAAM,MAAM,8BAA8B,GAAG;IAIzC,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAG/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,UAAU,CAAA;IAMvB,aAAa,CAAC,EAAE,0BAA0B,CAAA;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAGhC,SAAS,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IAIjC,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAGrC,SAAS,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAG/B,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;CAClC,CAAA;AASD,eAAO,MAAM,UAAU,GAAI,KAAK,EAAE,cAAc,KAAK;;;oBAK7B,KAAK;;;;CAK5B,CAAA;AAID,eAAO,MAAM,iBAAiB,GAAI,KAAK,EAAE,KAAK,MAAM;;eAEvC,KAAK;;;;gBAIJ,KAAK;CACjB,CAAA;AAuBF,eAAO,MAAM,uBAAuB,GAAI,KAAK,SAAS,MAAM,EACxD,OAAO,KAAK,EACZ,UAAS,8BAAmC,KAC7C,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAyClC,CAAA"}
1
+ {"version":3,"file":"testingComponentPackage.d.ts","sourceRoot":"","sources":["../../src/testing/testingComponentPackage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAuB,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAElE,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAItE,MAAM,MAAM,8BAA8B,GAAG;IAIzC,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAG/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,UAAU,CAAA;IAMvB,aAAa,CAAC,EAAE,0BAA0B,CAAA;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAGhC,SAAS,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IAIjC,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAGrC,SAAS,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAG/B,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACvB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;CAClC,CAAA;AASD,eAAO,MAAM,UAAU,GAAI,KAAK,EAAE,cAAc,KAAK;;;oBAK7B,KAAK;;;;CAK5B,CAAA;AAID,eAAO,MAAM,iBAAiB,GAAI,KAAK,EAAE,KAAK,MAAM;;eAEvC,KAAK;;;;gBAIJ,KAAK;CACjB,CAAA;AAuBF,eAAO,MAAM,uBAAuB,GAAI,KAAK,SAAS,MAAM,EACxD,OAAO,KAAK,EACZ,UAAS,8BAAmC,KAC7C,gBAAgB,CAAC,KAAK,EAAE,SAAS,CA6ClC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { $trueStoreCell } from '../Store/makeStore.js';
2
+ import { routeKeyToUrl } from '../routing/routeUrl.js';
2
3
  const missing = key => {
3
4
  throw new Error(`testingComponentPackage: no ${key} supplied. Pass one in the options if the value is part` + ` of the test, or use createTestApp() for a component that needs a real app.`);
4
5
  };
@@ -88,6 +89,17 @@ export const testingComponentPackage = (props, options = {}) => ({
88
89
  redirect: options.redirect ?? (to => {
89
90
  missing(`redirect (component redirected to '${to}')`);
90
91
  }),
92
+ routeKeyToUrl: routeKey => {
93
+ const {
94
+ siteBasePath,
95
+ prod,
96
+ staticSite
97
+ } = {
98
+ ...defaultConfig,
99
+ ...options.config
100
+ };
101
+ return routeKeyToUrl(routeKey, siteBasePath, prod && staticSite);
102
+ },
91
103
  ...(options.trackWork !== undefined ? {
92
104
  trackWork: options.trackWork
93
105
  } : {})
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tungsten",
3
- "version": "0.5.8",
3
+ "version": "0.5.9",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "bin": {
@@ -94,7 +94,7 @@
94
94
  "npm-run-all": "^4.1.5",
95
95
  "rimraf": "^5.0.10",
96
96
  "rollup-plugin-visualizer": "^5.14.0",
97
- "sxy-test-runner": "^2.4.12",
97
+ "sxy-test-runner": "^2.4.17",
98
98
  "typescript": "^6.0.3",
99
99
  "typescript-eslint": "^8.70.0"
100
100
  },
@@ -120,13 +120,13 @@
120
120
  "__build": "pnpm clean && pnpm build-prep && pnpm build-watch",
121
121
  "build": "run-s -c clean build-prep build-watch",
122
122
  "clean": "rimraf intermed dist",
123
+ "build-prep": "pnpm build-ts-once",
124
+ "build-watch": "run-p build-ts build-babel",
125
+ "build-quick": "pnpm build-watch",
123
126
  "build-once": "rimraf intermed dist && pnpm build-ts-once && pnpm build-babel-once && pnpm build-component-styles",
124
127
  "build-component-styles": "node scripts/buildComponentStyles.ts",
125
128
  "build-vendor": "node scripts/bundleVendor.ts",
126
129
  "build-once-nd": "rimraf intermed dist.building && pnpm build-ts-once && pnpm build-babel-staged && node scripts/syncDist.ts && node scripts/writeBuildMarker.ts",
127
- "build-quick": "pnpm build-watch",
128
- "build-prep": "pnpm build-ts-once",
129
- "build-watch": "run-p build-ts build-babel",
130
130
  "build-ts": "tscmon",
131
131
  "build-ts-once": "tsc",
132
132
  "build-babel": "node scripts/watchBabelAndMark.ts",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "lockfile": {
3
- "size": 239826,
4
- "mtimeMs": 1789513233215.041
3
+ "size": 238795,
4
+ "mtimeMs": 1789635426367.559
5
5
  },
6
6
  "specifiers": {
7
7
  "@babel/core": "babel-core",