@cosmicdrift/kumiko-dev-server 0.66.0 → 0.67.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.
- package/package.json +3 -3
- package/src/run-dev-app.ts +22 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cosmicdrift/kumiko-dev-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0",
|
|
4
4
|
"description": "Development server bootstrap for Kumiko apps. Bundles the client, mints dev-JWTs, injects the resolved AppSchema, and seeds an admin. Not for production.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"kumiko-schema-check": "./bin/kumiko-schema-check.ts"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@cosmicdrift/kumiko-bundled-features": "0.
|
|
54
|
-
"@cosmicdrift/kumiko-framework": "0.
|
|
53
|
+
"@cosmicdrift/kumiko-bundled-features": "0.67.0",
|
|
54
|
+
"@cosmicdrift/kumiko-framework": "0.67.0",
|
|
55
55
|
"ts-morph": "^28.0.0"
|
|
56
56
|
},
|
|
57
57
|
"publishConfig": {
|
package/src/run-dev-app.ts
CHANGED
|
@@ -234,18 +234,28 @@ export async function runDevApp(options: RunDevAppOptions): Promise<KumikoServer
|
|
|
234
234
|
const finalEffectiveFeatures: EffectiveFeaturesResolver | undefined =
|
|
235
235
|
options.effectiveFeatures ??
|
|
236
236
|
(tierResolverUsage
|
|
237
|
-
? (
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
237
|
+
? Object.assign(
|
|
238
|
+
(tenantId: TenantId) => {
|
|
239
|
+
// Defensive: Server starts AFTER onAfterSetup completes, so the
|
|
240
|
+
// resolver is filled before any request comes in. Throwing here
|
|
241
|
+
// means a programming error (boot order) rather than silent
|
|
242
|
+
// "all-features-on" misbehavior.
|
|
243
|
+
if (!tierResolverHolder.resolver) {
|
|
244
|
+
throw new Error(
|
|
245
|
+
"tier-resolver: extension found but resolver not yet built — boot order issue?",
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
return tierResolverHolder.resolver(tenantId);
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
// Late-bind: der echte trialGate hängt erst nach plugin.build() am
|
|
252
|
+
// holder.resolver. Delegieren (nicht kopieren), weil dieses
|
|
253
|
+
// Wrapper-Closure vor build() konstruiert wird. Kein Trial → false.
|
|
254
|
+
trialGate: (tenantId: TenantId, featureName: string): Promise<boolean> =>
|
|
255
|
+
tierResolverHolder.resolver?.trialGate?.(tenantId, featureName) ??
|
|
256
|
+
Promise.resolve(false),
|
|
257
|
+
},
|
|
258
|
+
)
|
|
249
259
|
: undefined);
|
|
250
260
|
|
|
251
261
|
// configResolver-default fürs config-feature — im auth-mode immer
|