@inf-monkeys-tech/monkeys 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +38 -0
  2. package/lib/contracts/artifact.d.ts +112 -0
  3. package/lib/contracts/artifact.d.ts.map +1 -0
  4. package/lib/contracts/artifact.js +60 -0
  5. package/lib/contracts/artifact.js.map +1 -0
  6. package/lib/contracts/capability.d.ts +347 -0
  7. package/lib/contracts/capability.d.ts.map +1 -0
  8. package/lib/contracts/capability.js +135 -0
  9. package/lib/contracts/capability.js.map +1 -0
  10. package/lib/contracts/common.d.ts +32 -0
  11. package/lib/contracts/common.d.ts.map +1 -0
  12. package/lib/contracts/common.js +46 -0
  13. package/lib/contracts/common.js.map +1 -0
  14. package/lib/contracts/context.d.ts +213 -0
  15. package/lib/contracts/context.d.ts.map +1 -0
  16. package/lib/contracts/context.js +96 -0
  17. package/lib/contracts/context.js.map +1 -0
  18. package/lib/contracts/continuity.d.ts +142 -0
  19. package/lib/contracts/continuity.d.ts.map +1 -0
  20. package/lib/contracts/continuity.js +66 -0
  21. package/lib/contracts/continuity.js.map +1 -0
  22. package/lib/contracts/data.d.ts +135 -0
  23. package/lib/contracts/data.d.ts.map +1 -0
  24. package/lib/contracts/data.js +85 -0
  25. package/lib/contracts/data.js.map +1 -0
  26. package/lib/contracts/dtcg-format.schema.json +1759 -0
  27. package/lib/contracts/index.d.ts +14 -0
  28. package/lib/contracts/index.d.ts.map +1 -0
  29. package/lib/contracts/index.js +30 -0
  30. package/lib/contracts/index.js.map +1 -0
  31. package/lib/contracts/page.d.ts +482 -0
  32. package/lib/contracts/page.d.ts.map +1 -0
  33. package/lib/contracts/page.js +307 -0
  34. package/lib/contracts/page.js.map +1 -0
  35. package/lib/contracts/render.d.ts +1032 -0
  36. package/lib/contracts/render.d.ts.map +1 -0
  37. package/lib/contracts/render.js +386 -0
  38. package/lib/contracts/render.js.map +1 -0
  39. package/lib/contracts/semantic.d.ts +477 -0
  40. package/lib/contracts/semantic.d.ts.map +1 -0
  41. package/lib/contracts/semantic.js +111 -0
  42. package/lib/contracts/semantic.js.map +1 -0
  43. package/lib/contracts/tenant.d.ts +2495 -0
  44. package/lib/contracts/tenant.d.ts.map +1 -0
  45. package/lib/contracts/tenant.js +573 -0
  46. package/lib/contracts/tenant.js.map +1 -0
  47. package/lib/contracts/theme.d.ts +30 -0
  48. package/lib/contracts/theme.d.ts.map +1 -0
  49. package/lib/contracts/theme.js +55 -0
  50. package/lib/contracts/theme.js.map +1 -0
  51. package/lib/contracts/trend.d.ts +577 -0
  52. package/lib/contracts/trend.d.ts.map +1 -0
  53. package/lib/contracts/trend.js +276 -0
  54. package/lib/contracts/trend.js.map +1 -0
  55. package/lib/contracts/workflow-definition.d.ts +661 -0
  56. package/lib/contracts/workflow-definition.d.ts.map +1 -0
  57. package/lib/contracts/workflow-definition.js +337 -0
  58. package/lib/contracts/workflow-definition.js.map +1 -0
  59. package/lib/index.d.ts +7 -0
  60. package/lib/index.d.ts.map +1 -0
  61. package/lib/index.js +34 -0
  62. package/lib/index.js.map +1 -0
  63. package/lib/json-schema/agent-runtime-event.schema.json +104 -0
  64. package/lib/json-schema/application-handoff.schema.json +377 -0
  65. package/lib/json-schema/application-run.schema.json +302 -0
  66. package/lib/json-schema/artifact-manifest.schema.json +375 -0
  67. package/lib/json-schema/body-relation-record.schema.json +177 -0
  68. package/lib/json-schema/brand-body.schema.json +140 -0
  69. package/lib/json-schema/brand-genetics-profile.schema.json +169 -0
  70. package/lib/json-schema/capability-manifest.schema.json +412 -0
  71. package/lib/json-schema/capability-registry.schema.json +474 -0
  72. package/lib/json-schema/change-impact-graph.schema.json +274 -0
  73. package/lib/json-schema/completion-event.schema.json +321 -0
  74. package/lib/json-schema/completion-header.schema.json +276 -0
  75. package/lib/json-schema/concept-definition.schema.json +101 -0
  76. package/lib/json-schema/conductor-workflow-definition.schema.json +404 -0
  77. package/lib/json-schema/data-continuity-envelope.schema.json +269 -0
  78. package/lib/json-schema/domain-command-definition.schema.json +121 -0
  79. package/lib/json-schema/domain-command.schema.json +204 -0
  80. package/lib/json-schema/domain-event.schema.json +161 -0
  81. package/lib/json-schema/execution-link.schema.json +190 -0
  82. package/lib/json-schema/expiring-access-grant.schema.json +127 -0
  83. package/lib/json-schema/hotword-body.schema.json +186 -0
  84. package/lib/json-schema/index.json +56 -0
  85. package/lib/json-schema/lineage-record.schema.json +370 -0
  86. package/lib/json-schema/ontology-definition.schema.json +91 -0
  87. package/lib/json-schema/output-record.schema.json +157 -0
  88. package/lib/json-schema/overlay-node.schema.json +892 -0
  89. package/lib/json-schema/page-definition.schema.json +527 -0
  90. package/lib/json-schema/page-runtime-descriptor.schema.json +720 -0
  91. package/lib/json-schema/page-runtime-projection.schema.json +464 -0
  92. package/lib/json-schema/product-body.schema.json +178 -0
  93. package/lib/json-schema/product-declaration.schema.json +1410 -0
  94. package/lib/json-schema/projection-spec.schema.json +151 -0
  95. package/lib/json-schema/radar-action-record.schema.json +144 -0
  96. package/lib/json-schema/radar-analysis-run.schema.json +424 -0
  97. package/lib/json-schema/radar-opportunity-matrix.schema.json +155 -0
  98. package/lib/json-schema/radar-panorama.schema.json +235 -0
  99. package/lib/json-schema/radar-query-body.schema.json +101 -0
  100. package/lib/json-schema/radar-score-model-body.schema.json +88 -0
  101. package/lib/json-schema/radar-score-projection.schema.json +184 -0
  102. package/lib/json-schema/radar-selection.schema.json +134 -0
  103. package/lib/json-schema/radar-writeback-record.schema.json +124 -0
  104. package/lib/json-schema/render-node.schema.json +776 -0
  105. package/lib/json-schema/render-tree.schema.json +815 -0
  106. package/lib/json-schema/request-scope.schema.json +193 -0
  107. package/lib/json-schema/saved-radar-query.schema.json +123 -0
  108. package/lib/json-schema/tenant-product-config.schema.json +2720 -0
  109. package/lib/json-schema/tenant-runtime-config.schema.json +2654 -0
  110. package/lib/json-schema/theme-tokens.schema.json +1836 -0
  111. package/lib/json-schema/trend-ingest-run.schema.json +73 -0
  112. package/lib/json-schema/trend-metric-snapshot.schema.json +126 -0
  113. package/lib/json-schema/trend-source-record.schema.json +206 -0
  114. package/lib/json-schema/view-provider-descriptor.schema.json +317 -0
  115. package/lib/json-schema/workflow-definition.schema.json +2174 -0
  116. package/lib/runtime/capability-registry.d.ts +28 -0
  117. package/lib/runtime/capability-registry.d.ts.map +1 -0
  118. package/lib/runtime/capability-registry.js +147 -0
  119. package/lib/runtime/capability-registry.js.map +1 -0
  120. package/lib/runtime/declaration-compiler.d.ts +44 -0
  121. package/lib/runtime/declaration-compiler.d.ts.map +1 -0
  122. package/lib/runtime/declaration-compiler.js +323 -0
  123. package/lib/runtime/declaration-compiler.js.map +1 -0
  124. package/lib/runtime/index.d.ts +12 -0
  125. package/lib/runtime/index.d.ts.map +1 -0
  126. package/lib/runtime/index.js +28 -0
  127. package/lib/runtime/index.js.map +1 -0
  128. package/lib/runtime/page-compiler.d.ts +36 -0
  129. package/lib/runtime/page-compiler.d.ts.map +1 -0
  130. package/lib/runtime/page-compiler.js +220 -0
  131. package/lib/runtime/page-compiler.js.map +1 -0
  132. package/lib/runtime/product-runtime.d.ts +37 -0
  133. package/lib/runtime/product-runtime.d.ts.map +1 -0
  134. package/lib/runtime/product-runtime.js +80 -0
  135. package/lib/runtime/product-runtime.js.map +1 -0
  136. package/lib/runtime/render-tree-compiler.d.ts +11 -0
  137. package/lib/runtime/render-tree-compiler.d.ts.map +1 -0
  138. package/lib/runtime/render-tree-compiler.js +85 -0
  139. package/lib/runtime/render-tree-compiler.js.map +1 -0
  140. package/lib/runtime/tenant-config.d.ts +13 -0
  141. package/lib/runtime/tenant-config.d.ts.map +1 -0
  142. package/lib/runtime/tenant-config.js +31 -0
  143. package/lib/runtime/tenant-config.js.map +1 -0
  144. package/lib/runtime/tenant-runtime-bindings.d.ts +21 -0
  145. package/lib/runtime/tenant-runtime-bindings.d.ts.map +1 -0
  146. package/lib/runtime/tenant-runtime-bindings.js +50 -0
  147. package/lib/runtime/tenant-runtime-bindings.js.map +1 -0
  148. package/lib/runtime/theme-tokens.d.ts +2 -0
  149. package/lib/runtime/theme-tokens.d.ts.map +1 -0
  150. package/lib/runtime/theme-tokens.js +13 -0
  151. package/lib/runtime/theme-tokens.js.map +1 -0
  152. package/lib/runtime/view-provider-registry.d.ts +23 -0
  153. package/lib/runtime/view-provider-registry.d.ts.map +1 -0
  154. package/lib/runtime/view-provider-registry.js +150 -0
  155. package/lib/runtime/view-provider-registry.js.map +1 -0
  156. package/lib/runtime/view-render-model.d.ts +28 -0
  157. package/lib/runtime/view-render-model.d.ts.map +1 -0
  158. package/lib/runtime/view-render-model.js +125 -0
  159. package/lib/runtime/view-render-model.js.map +1 -0
  160. package/lib/runtime/workflow-compiler.d.ts +29 -0
  161. package/lib/runtime/workflow-compiler.d.ts.map +1 -0
  162. package/lib/runtime/workflow-compiler.js +100 -0
  163. package/lib/runtime/workflow-compiler.js.map +1 -0
  164. package/lib/schemas/index.d.ts +4461 -0
  165. package/lib/schemas/index.d.ts.map +1 -0
  166. package/lib/schemas/index.js +187 -0
  167. package/lib/schemas/index.js.map +1 -0
  168. package/lib/theme-tokens/core.d.ts +65 -0
  169. package/lib/theme-tokens/core.d.ts.map +1 -0
  170. package/lib/theme-tokens/core.js +490 -0
  171. package/lib/theme-tokens/core.js.map +1 -0
  172. package/lib/types/i18n.d.ts +19 -0
  173. package/lib/types/i18n.d.ts.map +1 -0
  174. package/lib/types/i18n.js +3 -0
  175. package/lib/types/i18n.js.map +1 -0
  176. package/lib/types/index.d.ts +4 -0
  177. package/lib/types/index.d.ts.map +1 -0
  178. package/lib/types/index.js +20 -0
  179. package/lib/types/index.js.map +1 -0
  180. package/lib/types/tool.d.ts +123 -0
  181. package/lib/types/tool.d.ts.map +1 -0
  182. package/lib/types/tool.js +20 -0
  183. package/lib/types/tool.js.map +1 -0
  184. package/lib/types/workflow.d.ts +80 -0
  185. package/lib/types/workflow.d.ts.map +1 -0
  186. package/lib/types/workflow.js +23 -0
  187. package/lib/types/workflow.js.map +1 -0
  188. package/package.json +58 -0
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./capability-registry"), exports);
18
+ __exportStar(require("./declaration-compiler"), exports);
19
+ __exportStar(require("./page-compiler"), exports);
20
+ __exportStar(require("./product-runtime"), exports);
21
+ __exportStar(require("./render-tree-compiler"), exports);
22
+ __exportStar(require("./tenant-config"), exports);
23
+ __exportStar(require("./tenant-runtime-bindings"), exports);
24
+ __exportStar(require("./theme-tokens"), exports);
25
+ __exportStar(require("./view-provider-registry"), exports);
26
+ __exportStar(require("./view-render-model"), exports);
27
+ __exportStar(require("./workflow-compiler"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,yDAAuC;AACvC,kDAAgC;AAChC,oDAAkC;AAClC,yDAAuC;AACvC,kDAAgC;AAChC,4DAA0C;AAC1C,iDAA+B;AAC/B,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC"}
@@ -0,0 +1,36 @@
1
+ import type { CapabilityManifest } from '../contracts/capability';
2
+ import type { PageDefinition, PageGuardProjection, PageNavigationProjection, PageRendererProjection, PageRouteProjection, PageRuntimeProjection } from '../contracts/page';
3
+ import type { ProductContext, ViewProviderDescriptor } from '../contracts/render';
4
+ export interface PageAccessContext {
5
+ authenticated: boolean;
6
+ permissionCodes: readonly string[];
7
+ featureFlags: Readonly<Record<string, boolean>>;
8
+ }
9
+ export interface PageAccessDecision {
10
+ allowed: boolean;
11
+ reasons: readonly ('authentication' | 'permission-all' | 'permission-any' | 'feature-flag')[];
12
+ }
13
+ export interface CompilePageRuntimeProjectionInput {
14
+ product: ProductContext;
15
+ pages: readonly PageDefinition[];
16
+ capabilities: readonly CapabilityManifest[];
17
+ providers: readonly ViewProviderDescriptor[];
18
+ }
19
+ export interface CompiledPageRuntimeProjection {
20
+ document: PageRuntimeProjection;
21
+ pagesById: ReadonlyMap<string, PageDefinition>;
22
+ providersById: ReadonlyMap<string, ViewProviderDescriptor>;
23
+ routesById: ReadonlyMap<string, PageRouteProjection>;
24
+ navigationByPageId: ReadonlyMap<string, PageNavigationProjection>;
25
+ guardsByPageId: ReadonlyMap<string, PageGuardProjection>;
26
+ renderersByPageId: ReadonlyMap<string, PageRendererProjection>;
27
+ evaluateAccess(pageId: string, context: PageAccessContext): PageAccessDecision;
28
+ visibleNavigation(context: PageAccessContext): readonly PageNavigationProjection[];
29
+ matchRoute(pathname: string): PageDefinition | undefined;
30
+ requireRoute(routeId: string): PageRouteProjection;
31
+ requireGuard(pageId: string): PageGuardProjection;
32
+ requireRenderer(pageId: string): PageRendererProjection;
33
+ }
34
+ /** Compiles route, navigation, guard and renderer tables from one canonical PageDefinition set. */
35
+ export declare const compilePageRuntimeProjection: (input: CompilePageRuntimeProjectionInput) => CompiledPageRuntimeProjection;
36
+ //# sourceMappingURL=page-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-compiler.d.ts","sourceRoot":"","sources":["../../src/runtime/page-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA0DlF,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,CACd,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,CACjB,EAAE,CAAC;CACL;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5C,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,qBAAqB,CAAC;IAChC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC/C,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC3D,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACrD,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAClE,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACzD,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC/D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAC/E,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,wBAAwB,EAAE,CAAC;IACnF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACzD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAClD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAAC;CACzD;AAED,mGAAmG;AACnG,eAAO,MAAM,4BAA4B,UAChC,iCAAiC,KACvC,6BA+JF,CAAC"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compilePageRuntimeProjection = void 0;
4
+ const page_1 = require("../contracts/page");
5
+ const view_provider_registry_1 = require("./view-provider-registry");
6
+ const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
7
+ const routePattern = (path) => {
8
+ const parts = path.split('/').filter(Boolean);
9
+ const expression = parts.map((part, index) => {
10
+ if (part === '*')
11
+ return index === parts.length - 1 ? '(?:/.*)?' : '/.*';
12
+ if (part.startsWith(':') || part.startsWith('$'))
13
+ return '/[^/]+';
14
+ if (part.endsWith('*'))
15
+ return `/${escapeRegExp(part.slice(0, -1))}.*`;
16
+ return `/${escapeRegExp(part)}`;
17
+ }).join('');
18
+ return new RegExp(`^${expression || '/'}\/?$`);
19
+ };
20
+ const routeSignature = (path) => path
21
+ .split('/')
22
+ .map((part) => {
23
+ if (part === '*' || part.endsWith('*'))
24
+ return '*';
25
+ if (part.startsWith(':') || part.startsWith('$'))
26
+ return ':';
27
+ return part;
28
+ })
29
+ .join('/');
30
+ const routeSpecificity = (path) => path.split('/').filter(Boolean).reduce((score, part) => {
31
+ if (part === '*' || part.endsWith('*'))
32
+ return score;
33
+ if (part.startsWith(':') || part.startsWith('$'))
34
+ return score + 1;
35
+ return score + 10;
36
+ }, 0);
37
+ const unique = (values, key, label) => {
38
+ const result = new Map();
39
+ for (const value of values) {
40
+ const id = key(value);
41
+ if (result.has(id))
42
+ throw new Error(`Duplicate ${label}: ${id}`);
43
+ result.set(id, value);
44
+ }
45
+ return result;
46
+ };
47
+ const referenceVersion = (version) => version === undefined ? undefined : String(version);
48
+ const assertCapabilityReference = (owner, reference, capability) => {
49
+ if (!capability)
50
+ throw new Error(`${owner} references unknown capability ${reference.id}.`);
51
+ if (referenceVersion(reference.version) !== capability.capabilityVersion) {
52
+ throw new Error(`${owner} references inactive capability version ${String(reference.version)} for ${reference.id}.`);
53
+ }
54
+ if (reference.ownerRepo !== capability.ownerRepo) {
55
+ throw new Error(`${owner} capability ${reference.id} owner must be ${capability.ownerRepo}.`);
56
+ }
57
+ };
58
+ /** Compiles route, navigation, guard and renderer tables from one canonical PageDefinition set. */
59
+ const compilePageRuntimeProjection = (input) => {
60
+ const pages = input.pages.map((page) => page_1.PageDefinitionSchema.parse(page));
61
+ const providerRegistry = (0, view_provider_registry_1.compileViewProviderRegistry)(input);
62
+ const capabilities = providerRegistry.capabilities;
63
+ const providers = providerRegistry.providers;
64
+ const pagesById = unique(pages, (page) => page.pageId, 'pageId');
65
+ unique(pages, (page) => page.routeId, 'routeId');
66
+ unique(pages, (page) => page.routePath, 'route path');
67
+ unique(pages, (page) => routeSignature(page.routePath), 'route pattern');
68
+ const capabilitiesById = providerRegistry.capabilitiesById;
69
+ const providersById = providerRegistry.providersById;
70
+ for (const page of pages) {
71
+ if (page.record.deleted) {
72
+ throw new Error(`Deleted page ${page.pageId} cannot be compiled into a runtime projection.`);
73
+ }
74
+ if (!page.visibility.productContexts.includes(input.product)) {
75
+ throw new Error(`Page ${page.pageId} is not visible in ${input.product}.`);
76
+ }
77
+ if (page.navigation.parentPageId && !pagesById.has(page.navigation.parentPageId)) {
78
+ throw new Error(`Page ${page.pageId} references unknown parent ${page.navigation.parentPageId}.`);
79
+ }
80
+ for (const reference of [page.capabilityRef, ...page.capabilityRefs]) {
81
+ assertCapabilityReference(`Page ${page.pageId}`, reference, capabilitiesById.get(reference.id));
82
+ }
83
+ const provider = providerRegistry.resolveProvider(page.capabilityRef.id, input.product);
84
+ if (provider.rendererKey !== page.rendererKey || provider.capabilityRef.id !== page.capabilityRef.id) {
85
+ throw new Error(`Page ${page.pageId} renderer ${page.rendererKey} does not match provider ${provider.providerId}.`);
86
+ }
87
+ if (!provider.supportedPageTypes.includes(page.pageType)) {
88
+ throw new Error(`Provider ${provider.providerId} does not support page type ${page.pageType}.`);
89
+ }
90
+ if (!provider.supportedSurfaces.includes(page.surface)) {
91
+ throw new Error(`Provider ${provider.providerId} does not support surface ${page.surface}.`);
92
+ }
93
+ }
94
+ for (const page of pages) {
95
+ const ancestors = new Set([page.pageId]);
96
+ let parent = page.navigation.parentPageId;
97
+ while (parent) {
98
+ if (ancestors.has(parent))
99
+ throw new Error(`Navigation cycle contains page ${page.pageId}.`);
100
+ ancestors.add(parent);
101
+ parent = pagesById.get(parent)?.navigation.parentPageId;
102
+ }
103
+ }
104
+ const routes = pages.map((page) => ({
105
+ pageId: page.pageId,
106
+ routeId: page.routeId,
107
+ path: page.routePath,
108
+ }));
109
+ const navigation = pages
110
+ .filter((page) => !page.navigation.hidden)
111
+ .map((page) => ({
112
+ pageId: page.pageId,
113
+ routeId: page.routeId,
114
+ path: page.routePath,
115
+ label: page.navigation.label,
116
+ iconRef: page.navigation.iconRef,
117
+ parentPageId: page.navigation.parentPageId,
118
+ order: page.navigation.order,
119
+ pinned: page.navigation.pinned,
120
+ }))
121
+ .sort((left, right) => (left.order ?? Number.MAX_SAFE_INTEGER) - (right.order ?? Number.MAX_SAFE_INTEGER)
122
+ || left.pageId.localeCompare(right.pageId));
123
+ const guards = pages.map((page) => ({
124
+ pageId: page.pageId,
125
+ authenticated: page.visibility.authenticated,
126
+ permissionAllOf: page.visibility.permissionAllOf,
127
+ permissionAnyOf: page.visibility.permissionAnyOf,
128
+ featureFlags: page.visibility.featureFlags,
129
+ actions: page.access.actions,
130
+ }));
131
+ const renderers = pages.map((page) => {
132
+ const provider = providerRegistry.resolveProvider(page.capabilityRef.id, input.product);
133
+ return {
134
+ pageId: page.pageId,
135
+ surface: page.surface,
136
+ rendererKey: page.rendererKey,
137
+ capabilityRef: page.capabilityRef,
138
+ capabilityRefs: page.capabilityRefs,
139
+ providerRef: {
140
+ kind: 'view-provider',
141
+ id: provider.providerId,
142
+ version: provider.providerVersion,
143
+ ownerRepo: provider.ownerRepo,
144
+ },
145
+ binding: page.binding,
146
+ rendererConfig: page.rendererConfig,
147
+ workflowRef: page.workflowRef,
148
+ };
149
+ });
150
+ const document = page_1.PageRuntimeProjectionSchema.parse({
151
+ contract: 'PageRuntimeProjection',
152
+ product: input.product,
153
+ routes,
154
+ navigation,
155
+ guards,
156
+ renderers,
157
+ });
158
+ const routesById = unique(document.routes, (route) => route.routeId, 'projected routeId');
159
+ const navigationByPageId = unique(document.navigation, (item) => item.pageId, 'navigation pageId');
160
+ const guardsByPageId = unique(document.guards, (guard) => guard.pageId, 'guard pageId');
161
+ const renderersByPageId = unique(document.renderers, (renderer) => renderer.pageId, 'renderer pageId');
162
+ const matchers = pages
163
+ .map((page) => ({ page, pattern: routePattern(page.routePath), specificity: routeSpecificity(page.routePath) }))
164
+ .sort((left, right) => right.specificity - left.specificity || left.page.pageId.localeCompare(right.page.pageId));
165
+ const evaluateAccess = (pageId, context) => {
166
+ const guard = guardsByPageId.get(pageId);
167
+ if (!guard)
168
+ throw new Error(`Unknown page guard: ${pageId}`);
169
+ const reasons = [];
170
+ if (guard.authenticated && !context.authenticated)
171
+ reasons.push('authentication');
172
+ const permissions = new Set(context.permissionCodes);
173
+ if (guard.permissionAllOf.some((permission) => !permissions.has(permission))) {
174
+ reasons.push('permission-all');
175
+ }
176
+ if (guard.permissionAnyOf.length > 0 && !guard.permissionAnyOf.some((permission) => permissions.has(permission))) {
177
+ reasons.push('permission-any');
178
+ }
179
+ if (guard.featureFlags.some((flag) => context.featureFlags[flag] !== true))
180
+ reasons.push('feature-flag');
181
+ return Object.freeze({ allowed: reasons.length === 0, reasons: Object.freeze(reasons) });
182
+ };
183
+ return Object.freeze({
184
+ document: Object.freeze(document),
185
+ pagesById,
186
+ providersById,
187
+ routesById,
188
+ navigationByPageId,
189
+ guardsByPageId,
190
+ renderersByPageId,
191
+ evaluateAccess,
192
+ visibleNavigation(context) {
193
+ return Object.freeze(document.navigation.filter((item) => evaluateAccess(item.pageId, context).allowed));
194
+ },
195
+ matchRoute(pathname) {
196
+ const path = pathname.split('?')[0]?.split('#')[0] || '/';
197
+ return matchers.find((matcher) => matcher.pattern.test(path))?.page;
198
+ },
199
+ requireRoute(routeId) {
200
+ const route = routesById.get(routeId);
201
+ if (!route)
202
+ throw new Error(`Unknown route: ${routeId}`);
203
+ return route;
204
+ },
205
+ requireGuard(pageId) {
206
+ const guard = guardsByPageId.get(pageId);
207
+ if (!guard)
208
+ throw new Error(`Unknown page guard: ${pageId}`);
209
+ return guard;
210
+ },
211
+ requireRenderer(pageId) {
212
+ const renderer = renderersByPageId.get(pageId);
213
+ if (!renderer)
214
+ throw new Error(`Unknown page renderer: ${pageId}`);
215
+ return renderer;
216
+ },
217
+ });
218
+ };
219
+ exports.compilePageRuntimeProjection = compilePageRuntimeProjection;
220
+ //# sourceMappingURL=page-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-compiler.js","sourceRoot":"","sources":["../../src/runtime/page-compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { CapabilityManifest } from '../contracts/capability';
2
+ import type { PageRuntimeProjection } from '../contracts/page';
3
+ import type { PageDefinition } from '../contracts/page';
4
+ import type { ProductDeclaration } from '../contracts/semantic';
5
+ import type { ApplicationHandoff, ProductContext, ViewProviderDescriptor } from '../contracts/render';
6
+ import type { PageAccessContext, PageAccessDecision } from './page-compiler';
7
+ import { type CompiledProductDeclaration } from './declaration-compiler';
8
+ export declare const APPLICATION_HANDOFF_QUERY_PARAMETER = "monkeys-handoff";
9
+ export interface ProductRuntimeCatalogInput {
10
+ product: ProductContext;
11
+ declaration: ProductDeclaration;
12
+ providers: readonly ViewProviderDescriptor[];
13
+ }
14
+ export interface ProductRuntimeCatalog {
15
+ product: ProductContext;
16
+ declaration: CompiledProductDeclaration;
17
+ pages: readonly PageDefinition[];
18
+ capabilities: readonly CapabilityManifest[];
19
+ providers: readonly ViewProviderDescriptor[];
20
+ pagesById: ReadonlyMap<string, PageDefinition>;
21
+ pagesByRouteId: ReadonlyMap<string, PageDefinition>;
22
+ capabilitiesById: ReadonlyMap<string, CapabilityManifest>;
23
+ providersById: ReadonlyMap<string, ViewProviderDescriptor>;
24
+ projection: PageRuntimeProjection;
25
+ document: PageRuntimeProjection;
26
+ navigation: readonly PageDefinition[];
27
+ evaluateAccess(pageId: string, context: PageAccessContext): PageAccessDecision;
28
+ matchPage(pathname: string): PageDefinition | undefined;
29
+ matchRoute(pathname: string): PageDefinition | undefined;
30
+ requireRenderer(pageId: string): PageRuntimeProjection['renderers'][number];
31
+ }
32
+ export declare const compileProductRuntimeCatalog: (input: ProductRuntimeCatalogInput) => ProductRuntimeCatalog;
33
+ export declare const serializeApplicationHandoff: (handoff: ApplicationHandoff) => string;
34
+ export declare const parseApplicationHandoff: (value: string | null | undefined) => ApplicationHandoff | undefined;
35
+ export declare const readApplicationHandoffFromUrl: (input: string | URL) => ApplicationHandoff | undefined;
36
+ export declare const buildApplicationHandoffUrl: (targetPath: string, handoff: ApplicationHandoff) => string;
37
+ //# sourceMappingURL=product-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/product-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAA6B,KAAK,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpG,eAAO,MAAM,mCAAmC,oBAAoB,CAAC;AAErE,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,kBAAkB,CAAC;IAChC,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,0BAA0B,CAAC;IACxC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IACjC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5C,SAAS,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC7C,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC/C,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC1D,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC3D,UAAU,EAAE,qBAAqB,CAAC;IAClC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IACtC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAC/E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACxD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACzD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;CAC7E;AAYD,eAAO,MAAM,4BAA4B,UAAW,0BAA0B,KAAG,qBAmChF,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAAa,kBAAkB,KAAG,MACjB,CAAC;AAE1D,eAAO,MAAM,uBAAuB,UAAW,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,kBAAkB,GAAG,SAO/F,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAAW,MAAM,GAAG,GAAG,KAAG,kBAAkB,GAAG,SAGxF,CAAC;AAEF,eAAO,MAAM,0BAA0B,eAAgB,MAAM,WAAW,kBAAkB,KAAG,MAM5F,CAAC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildApplicationHandoffUrl = exports.readApplicationHandoffFromUrl = exports.parseApplicationHandoff = exports.serializeApplicationHandoff = exports.compileProductRuntimeCatalog = exports.APPLICATION_HANDOFF_QUERY_PARAMETER = void 0;
4
+ const render_1 = require("../contracts/render");
5
+ const page_compiler_1 = require("./page-compiler");
6
+ const declaration_compiler_1 = require("./declaration-compiler");
7
+ exports.APPLICATION_HANDOFF_QUERY_PARAMETER = 'monkeys-handoff';
8
+ const indexUnique = (values, key, label) => {
9
+ const result = new Map();
10
+ for (const value of values) {
11
+ const id = key(value);
12
+ if (result.has(id))
13
+ throw new Error(`Duplicate ${label}: ${id}`);
14
+ result.set(id, value);
15
+ }
16
+ return result;
17
+ };
18
+ const compileProductRuntimeCatalog = (input) => {
19
+ const declaration = (0, declaration_compiler_1.compileProductDeclaration)(input.declaration);
20
+ const compiled = (0, page_compiler_1.compilePageRuntimeProjection)({
21
+ product: input.product,
22
+ pages: declaration.declaration.pages,
23
+ capabilities: declaration.declaration.capabilities,
24
+ providers: input.providers,
25
+ });
26
+ const pages = [...compiled.pagesById.values()];
27
+ const capabilities = [...declaration.declaration.capabilities];
28
+ const providers = [...compiled.providersById.values()];
29
+ const pagesById = compiled.pagesById;
30
+ const pagesByRouteId = indexUnique(pages, (page) => page.routeId, 'routeId');
31
+ const capabilitiesById = indexUnique(capabilities, (capability) => capability.id, 'capability id');
32
+ const providersById = compiled.providersById;
33
+ const navigation = compiled.document.navigation.map((item) => pagesById.get(item.pageId));
34
+ return Object.freeze({
35
+ product: input.product,
36
+ declaration,
37
+ pages: Object.freeze(pages),
38
+ capabilities: Object.freeze(capabilities),
39
+ providers: Object.freeze(providers),
40
+ pagesById,
41
+ pagesByRouteId,
42
+ capabilitiesById,
43
+ providersById,
44
+ projection: compiled.document,
45
+ document: compiled.document,
46
+ navigation: Object.freeze(navigation),
47
+ evaluateAccess: compiled.evaluateAccess,
48
+ matchPage: compiled.matchRoute,
49
+ matchRoute: compiled.matchRoute,
50
+ requireRenderer: compiled.requireRenderer,
51
+ });
52
+ };
53
+ exports.compileProductRuntimeCatalog = compileProductRuntimeCatalog;
54
+ const serializeApplicationHandoff = (handoff) => JSON.stringify(render_1.ApplicationHandoffSchema.parse(handoff));
55
+ exports.serializeApplicationHandoff = serializeApplicationHandoff;
56
+ const parseApplicationHandoff = (value) => {
57
+ if (!value)
58
+ return undefined;
59
+ try {
60
+ return render_1.ApplicationHandoffSchema.parse(JSON.parse(value));
61
+ }
62
+ catch {
63
+ return undefined;
64
+ }
65
+ };
66
+ exports.parseApplicationHandoff = parseApplicationHandoff;
67
+ const readApplicationHandoffFromUrl = (input) => {
68
+ const url = typeof input === 'string' ? new URL(input, 'https://monkeys.local') : input;
69
+ return (0, exports.parseApplicationHandoff)(url.searchParams.get(exports.APPLICATION_HANDOFF_QUERY_PARAMETER));
70
+ };
71
+ exports.readApplicationHandoffFromUrl = readApplicationHandoffFromUrl;
72
+ const buildApplicationHandoffUrl = (targetPath, handoff) => {
73
+ const parsed = render_1.ApplicationHandoffSchema.parse(handoff);
74
+ const isRelative = targetPath.startsWith('/') && !targetPath.startsWith('//');
75
+ const url = new URL(targetPath, 'https://monkeys.local');
76
+ url.searchParams.set(exports.APPLICATION_HANDOFF_QUERY_PARAMETER, (0, exports.serializeApplicationHandoff)(parsed));
77
+ return isRelative ? `${url.pathname}${url.search}${url.hash}` : url.toString();
78
+ };
79
+ exports.buildApplicationHandoffUrl = buildApplicationHandoffUrl;
80
+ //# sourceMappingURL=product-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-runtime.js","sourceRoot":"","sources":["../../src/runtime/product-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { RenderNode, RenderTree } from '../contracts/render';
2
+ export interface CompiledRenderTree {
3
+ tree: RenderTree;
4
+ root: RenderNode;
5
+ nodesById: ReadonlyMap<string, RenderNode>;
6
+ traversal: readonly RenderNode[];
7
+ childrenOf(nodeId: string): readonly RenderNode[];
8
+ ancestorsOf(nodeId: string): readonly RenderNode[];
9
+ }
10
+ export declare const compileRenderTree: (input: RenderTree) => CompiledRenderTree;
11
+ //# sourceMappingURL=render-tree-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-tree-compiler.d.ts","sourceRoot":"","sources":["../../src/runtime/render-tree-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGlE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3C,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC;IACjC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE,CAAC;IAClD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,UAAU,EAAE,CAAC;CACpD;AAED,eAAO,MAAM,iBAAiB,UAAW,UAAU,KAAG,kBAyErD,CAAC"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileRenderTree = void 0;
4
+ const render_1 = require("../contracts/render");
5
+ const compileRenderTree = (input) => {
6
+ const tree = render_1.RenderTreeSchema.parse(input);
7
+ const nodesById = new Map();
8
+ for (const node of tree.nodes) {
9
+ if (nodesById.has(node.nodeId))
10
+ throw new Error(`Duplicate render node id: ${node.nodeId}`);
11
+ nodesById.set(node.nodeId, node);
12
+ }
13
+ const root = nodesById.get(tree.rootNodeId);
14
+ if (!root)
15
+ throw new Error(`Render tree ${tree.treeId} has no root node ${tree.rootNodeId}.`);
16
+ if (root.parentNodeId !== undefined)
17
+ throw new Error(`Render tree root ${root.nodeId} cannot declare a parent.`);
18
+ for (const node of tree.nodes) {
19
+ if (node.nodeId !== root.nodeId && node.parentNodeId === undefined) {
20
+ throw new Error(`Render node ${node.nodeId} is disconnected from root ${root.nodeId}.`);
21
+ }
22
+ if (node.parentNodeId !== undefined) {
23
+ const parent = nodesById.get(node.parentNodeId);
24
+ if (!parent)
25
+ throw new Error(`Render node ${node.nodeId} references missing parent ${node.parentNodeId}.`);
26
+ if (!parent.children.includes(node.nodeId)) {
27
+ throw new Error(`Render node ${node.nodeId} is not declared by parent ${parent.nodeId}.`);
28
+ }
29
+ }
30
+ for (const childId of node.children) {
31
+ const child = nodesById.get(childId);
32
+ if (!child)
33
+ throw new Error(`Render node ${node.nodeId} references missing child ${childId}.`);
34
+ if (child.parentNodeId !== node.nodeId) {
35
+ throw new Error(`Render child ${childId} does not point back to parent ${node.nodeId}.`);
36
+ }
37
+ }
38
+ }
39
+ const visiting = new Set();
40
+ const visited = new Set();
41
+ const traversal = [];
42
+ const visit = (node) => {
43
+ if (visiting.has(node.nodeId))
44
+ throw new Error(`Render tree ${tree.treeId} contains a cycle at ${node.nodeId}.`);
45
+ if (visited.has(node.nodeId))
46
+ return;
47
+ visiting.add(node.nodeId);
48
+ traversal.push(node);
49
+ node.children.forEach((childId) => visit(nodesById.get(childId)));
50
+ visiting.delete(node.nodeId);
51
+ visited.add(node.nodeId);
52
+ };
53
+ visit(root);
54
+ if (visited.size !== nodesById.size) {
55
+ const disconnected = tree.nodes.find((node) => !visited.has(node.nodeId));
56
+ throw new Error(`Render node ${disconnected.nodeId} is not reachable from root ${root.nodeId}.`);
57
+ }
58
+ const childrenOf = (nodeId) => {
59
+ const node = nodesById.get(nodeId);
60
+ if (!node)
61
+ throw new Error(`Unknown render node: ${nodeId}`);
62
+ return Object.freeze(node.children.map((childId) => nodesById.get(childId)));
63
+ };
64
+ const ancestorsOf = (nodeId) => {
65
+ let node = nodesById.get(nodeId);
66
+ if (!node)
67
+ throw new Error(`Unknown render node: ${nodeId}`);
68
+ const ancestors = [];
69
+ while (node.parentNodeId !== undefined) {
70
+ node = nodesById.get(node.parentNodeId);
71
+ ancestors.push(node);
72
+ }
73
+ return Object.freeze(ancestors);
74
+ };
75
+ return Object.freeze({
76
+ tree,
77
+ root,
78
+ nodesById,
79
+ traversal: Object.freeze(traversal),
80
+ childrenOf,
81
+ ancestorsOf,
82
+ });
83
+ };
84
+ exports.compileRenderTree = compileRenderTree;
85
+ //# sourceMappingURL=render-tree-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-tree-compiler.js","sourceRoot":"","sources":["../../src/runtime/render-tree-compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ThemeTokens } from '../contracts/theme';
2
+ import type { TenantProductConfig, TenantRuntimeConfig } from '../contracts/tenant';
3
+ export interface CompileTenantRuntimeConfigInput {
4
+ productConfig: TenantProductConfig;
5
+ resolvedDesignTokens: ThemeTokens;
6
+ }
7
+ /**
8
+ * Builds the only browser-facing tenant configuration projection.
9
+ * The source list is deliberately not copied, and resolving again guarantees
10
+ * that aliases cannot escape the server boundary.
11
+ */
12
+ export declare const compileTenantRuntimeConfig: (input: CompileTenantRuntimeConfigInput) => TenantRuntimeConfig;
13
+ //# sourceMappingURL=tenant-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-config.d.ts","sourceRoot":"","sources":["../../src/runtime/tenant-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,mBAAmB,CAAC;IACnC,oBAAoB,EAAE,WAAW,CAAC;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,UAC9B,+BAA+B,KACrC,mBAmBF,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileTenantRuntimeConfig = void 0;
4
+ const tenant_1 = require("../contracts/tenant");
5
+ const theme_tokens_1 = require("./theme-tokens");
6
+ /**
7
+ * Builds the only browser-facing tenant configuration projection.
8
+ * The source list is deliberately not copied, and resolving again guarantees
9
+ * that aliases cannot escape the server boundary.
10
+ */
11
+ const compileTenantRuntimeConfig = (input) => {
12
+ const productConfig = tenant_1.TenantProductConfigSchema.parse(input.productConfig);
13
+ const designTokens = (0, theme_tokens_1.resolveThemeTokens)(input.resolvedDesignTokens).resolvedDocument;
14
+ return Object.freeze(tenant_1.TenantRuntimeConfigSchema.parse({
15
+ contract: 'TenantRuntimeConfig',
16
+ tenantId: productConfig.tenantId,
17
+ appId: productConfig.appId,
18
+ environment: productConfig.environment,
19
+ designTokens,
20
+ moduleRefs: productConfig.moduleRefs,
21
+ pageRefs: productConfig.pageRefs,
22
+ featureFlags: productConfig.featureFlags,
23
+ authBinding: productConfig.authBinding,
24
+ dataBinding: productConfig.dataBinding,
25
+ sourceMap: productConfig.sourceMap,
26
+ warnings: productConfig.warnings,
27
+ applicationConfig: productConfig.applicationConfig,
28
+ }));
29
+ };
30
+ exports.compileTenantRuntimeConfig = compileTenantRuntimeConfig;
31
+ //# sourceMappingURL=tenant-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-config.js","sourceRoot":"","sources":["../../src/runtime/tenant-config.ts"],"names":[],"mappings":";;;AAKA,gDAG6B;AAC7B,iDAAoD;AAOpD;;;;GAIG;AACI,MAAM,0BAA0B,GAAG,CACxC,KAAsC,EACjB,EAAE;IACvB,MAAM,aAAa,GAAG,kCAAyB,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAA,iCAAkB,EAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,CAAC;IAErF,OAAO,MAAM,CAAC,MAAM,CAAC,kCAAyB,CAAC,KAAK,CAAC;QACnD,QAAQ,EAAE,qBAAqB;QAC/B,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,YAAY;QACZ,UAAU,EAAE,aAAa,CAAC,UAAU;QACpC,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,YAAY,EAAE,aAAa,CAAC,YAAY;QACxC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,QAAQ,EAAE,aAAa,CAAC,QAAQ;QAChC,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;KACnD,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AArBW,QAAA,0BAA0B,8BAqBrC"}
@@ -0,0 +1,21 @@
1
+ import type { TenantAuthBinding, TenantDataBinding, TenantRuntimeConfig } from '../contracts/tenant';
2
+ export interface TenantRuntimeBindingPolicy {
3
+ authProviderIds: readonly string[];
4
+ dataProviderIds: readonly string[];
5
+ projectionRefs?: readonly string[];
6
+ requiredAuthBindings?: readonly string[];
7
+ requiredDataBindings?: readonly string[];
8
+ }
9
+ export interface CompiledTenantRuntimeBindings {
10
+ readonly auth: Readonly<Record<string, TenantAuthBinding>>;
11
+ readonly data: Readonly<Record<string, TenantDataBinding>>;
12
+ requireAuth(bindingId?: string): TenantAuthBinding;
13
+ requireData(bindingId?: string): TenantDataBinding;
14
+ }
15
+ /**
16
+ * Compiles tenant provider references against the providers actually shipped by
17
+ * a product. This is the browser-side fail-closed boundary: a typo or an
18
+ * uninstalled provider cannot silently fall back to a legacy endpoint.
19
+ */
20
+ export declare const compileTenantRuntimeBindings: (config: Pick<TenantRuntimeConfig, 'authBinding' | 'dataBinding'>, policy: TenantRuntimeBindingPolicy) => CompiledTenantRuntimeBindings;
21
+ //# sourceMappingURL=tenant-runtime-bindings.d.ts.map