@things-factory/station 10.1.33
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/README.md +124 -0
- package/dist-client/index.d.ts +11 -0
- package/dist-client/index.js +13 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/station/scene/index.d.ts +11 -0
- package/dist-client/station/scene/index.js +12 -0
- package/dist-client/station/scene/index.js.map +1 -0
- package/dist-client/station/scene/station-context-binding.d.ts +25 -0
- package/dist-client/station/scene/station-context-binding.js +39 -0
- package/dist-client/station/scene/station-context-binding.js.map +1 -0
- package/dist-client/station/scene/station-context-scene.d.ts +28 -0
- package/dist-client/station/scene/station-context-scene.js +138 -0
- package/dist-client/station/scene/station-context-scene.js.map +1 -0
- package/dist-client/station/scene/station-counts-scene.d.ts +6 -0
- package/dist-client/station/scene/station-counts-scene.js +51 -0
- package/dist-client/station/scene/station-counts-scene.js.map +1 -0
- package/dist-client/station/scene/station-field-scene.d.ts +6 -0
- package/dist-client/station/scene/station-field-scene.js +89 -0
- package/dist-client/station/scene/station-field-scene.js.map +1 -0
- package/dist-client/station/scene/station-icons.d.ts +82 -0
- package/dist-client/station/scene/station-icons.js +131 -0
- package/dist-client/station/scene/station-icons.js.map +1 -0
- package/dist-client/station/scene/station-numpad-scene.d.ts +9 -0
- package/dist-client/station/scene/station-numpad-scene.js +144 -0
- package/dist-client/station/scene/station-numpad-scene.js.map +1 -0
- package/dist-client/station/scene/station-scene-style.d.ts +51 -0
- package/dist-client/station/scene/station-scene-style.js +108 -0
- package/dist-client/station/scene/station-scene-style.js.map +1 -0
- package/dist-client/station/scene/station-scene.d.ts +295 -0
- package/dist-client/station/scene/station-scene.js +68 -0
- package/dist-client/station/scene/station-scene.js.map +1 -0
- package/dist-client/station/scene/station-who-scene.d.ts +6 -0
- package/dist-client/station/scene/station-who-scene.js +48 -0
- package/dist-client/station/scene/station-who-scene.js.map +1 -0
- package/dist-client/station/scene/station-work-panel-scene.d.ts +28 -0
- package/dist-client/station/scene/station-work-panel-scene.js +37 -0
- package/dist-client/station/scene/station-work-panel-scene.js.map +1 -0
- package/dist-client/station/station-board-binding.d.ts +16 -0
- package/dist-client/station/station-board-binding.js +20 -0
- package/dist-client/station/station-board-binding.js.map +1 -0
- package/dist-client/station/station-context.d.ts +178 -0
- package/dist-client/station/station-context.js +30 -0
- package/dist-client/station/station-context.js.map +1 -0
- package/dist-client/station/station-palette.d.ts +34 -0
- package/dist-client/station/station-palette.js +119 -0
- package/dist-client/station/station-palette.js.map +1 -0
- package/dist-client/station/station-runtime.d.ts +47 -0
- package/dist-client/station/station-runtime.js +47 -0
- package/dist-client/station/station-runtime.js.map +1 -0
- package/dist-client/station/station-scene-context.d.ts +68 -0
- package/dist-client/station/station-scene-context.js +62 -0
- package/dist-client/station/station-scene-context.js.map +1 -0
- package/dist-client/station/station-screen-flow.d.ts +16 -0
- package/dist-client/station/station-screen-flow.js +58 -0
- package/dist-client/station/station-screen-flow.js.map +1 -0
- package/dist-client/station/station-tile-registry.d.ts +89 -0
- package/dist-client/station/station-tile-registry.js +86 -0
- package/dist-client/station/station-tile-registry.js.map +1 -0
- package/dist-client/station/station-work-panel-view.d.ts +23 -0
- package/dist-client/station/station-work-panel-view.js +125 -0
- package/dist-client/station/station-work-panel-view.js.map +1 -0
- package/dist-client/station/station-work-runtime.d.ts +47 -0
- package/dist-client/station/station-work-runtime.js +161 -0
- package/dist-client/station/station-work-runtime.js.map +1 -0
- package/dist-client/station/station-work-scenarios.d.ts +41 -0
- package/dist-client/station/station-work-scenarios.js +59 -0
- package/dist-client/station/station-work-scenarios.js.map +1 -0
- package/dist-client/station/task-counts.d.ts +32 -0
- package/dist-client/station/task-counts.js +26 -0
- package/dist-client/station/task-counts.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-server/activities/activity-station-screen-control-withdrawal.d.ts +62 -0
- package/dist-server/activities/activity-station-screen-control-withdrawal.js +147 -0
- package/dist-server/activities/activity-station-screen-control-withdrawal.js.map +1 -0
- package/dist-server/activities/activity-station-screen-release.d.ts +81 -0
- package/dist-server/activities/activity-station-screen-release.js +147 -0
- package/dist-server/activities/activity-station-screen-release.js.map +1 -0
- package/dist-server/activities/index.d.ts +49 -0
- package/dist-server/activities/index.js +21 -0
- package/dist-server/activities/index.js.map +1 -0
- package/dist-server/index.d.ts +3 -0
- package/dist-server/index.js +8 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/service/index.d.ts +23 -0
- package/dist-server/service/index.js +41 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/station/deletion-changes.d.ts +14 -0
- package/dist-server/service/station/deletion-changes.js +25 -0
- package/dist-server/service/station/deletion-changes.js.map +1 -0
- package/dist-server/service/station/index.d.ts +13 -0
- package/dist-server/service/station/index.js +25 -0
- package/dist-server/service/station/index.js.map +1 -0
- package/dist-server/service/station/reversibility.d.ts +21 -0
- package/dist-server/service/station/reversibility.js +24 -0
- package/dist-server/service/station/reversibility.js.map +1 -0
- package/dist-server/service/station/screen-model-digest.d.ts +60 -0
- package/dist-server/service/station/screen-model-digest.js +97 -0
- package/dist-server/service/station/screen-model-digest.js.map +1 -0
- package/dist-server/service/station/staged-material.d.ts +62 -0
- package/dist-server/service/station/staged-material.js +44 -0
- package/dist-server/service/station/staged-material.js.map +1 -0
- package/dist-server/service/station/station-argument-sources.d.ts +31 -0
- package/dist-server/service/station/station-argument-sources.js +66 -0
- package/dist-server/service/station/station-argument-sources.js.map +1 -0
- package/dist-server/service/station/station-assignment-choice.d.ts +81 -0
- package/dist-server/service/station/station-assignment-choice.js +105 -0
- package/dist-server/service/station/station-assignment-choice.js.map +1 -0
- package/dist-server/service/station/station-assignment-resolver.d.ts +104 -0
- package/dist-server/service/station/station-assignment-resolver.js +426 -0
- package/dist-server/service/station/station-assignment-resolver.js.map +1 -0
- package/dist-server/service/station/station-assignment-service.d.ts +33 -0
- package/dist-server/service/station/station-assignment-service.js +64 -0
- package/dist-server/service/station/station-assignment-service.js.map +1 -0
- package/dist-server/service/station/station-axes.d.ts +9 -0
- package/dist-server/service/station/station-axes.js +16 -0
- package/dist-server/service/station/station-axes.js.map +1 -0
- package/dist-server/service/station/station-flow.d.ts +156 -0
- package/dist-server/service/station/station-flow.js +255 -0
- package/dist-server/service/station/station-flow.js.map +1 -0
- package/dist-server/service/station/station-generate.d.ts +76 -0
- package/dist-server/service/station/station-generate.js +178 -0
- package/dist-server/service/station/station-generate.js.map +1 -0
- package/dist-server/service/station/station-product.d.ts +123 -0
- package/dist-server/service/station/station-product.js +77 -0
- package/dist-server/service/station/station-product.js.map +1 -0
- package/dist-server/service/station/station-runtime-binding.d.ts +6 -0
- package/dist-server/service/station/station-runtime-binding.js +46 -0
- package/dist-server/service/station/station-runtime-binding.js.map +1 -0
- package/dist-server/service/station/station-screen-assignment.d.ts +94 -0
- package/dist-server/service/station/station-screen-assignment.js +154 -0
- package/dist-server/service/station/station-screen-assignment.js.map +1 -0
- package/dist-server/service/station/station-screen-control-withdrawal-resolver.d.ts +37 -0
- package/dist-server/service/station/station-screen-control-withdrawal-resolver.js +130 -0
- package/dist-server/service/station/station-screen-control-withdrawal-resolver.js.map +1 -0
- package/dist-server/service/station/station-screen-control-withdrawal.d.ts +104 -0
- package/dist-server/service/station/station-screen-control-withdrawal.js +128 -0
- package/dist-server/service/station/station-screen-control-withdrawal.js.map +1 -0
- package/dist-server/service/station/station-screen-draft-resolver.d.ts +47 -0
- package/dist-server/service/station/station-screen-draft-resolver.js +153 -0
- package/dist-server/service/station/station-screen-draft-resolver.js.map +1 -0
- package/dist-server/service/station/station-screen-layout.d.ts +119 -0
- package/dist-server/service/station/station-screen-layout.js +202 -0
- package/dist-server/service/station/station-screen-layout.js.map +1 -0
- package/dist-server/service/station/station-screen-list-resolver.d.ts +69 -0
- package/dist-server/service/station/station-screen-list-resolver.js +215 -0
- package/dist-server/service/station/station-screen-list-resolver.js.map +1 -0
- package/dist-server/service/station/station-screen-publish-subscriber.d.ts +22 -0
- package/dist-server/service/station/station-screen-publish-subscriber.js +90 -0
- package/dist-server/service/station/station-screen-publish-subscriber.js.map +1 -0
- package/dist-server/service/station/station-screen-release-gate.d.ts +66 -0
- package/dist-server/service/station/station-screen-release-gate.js +67 -0
- package/dist-server/service/station/station-screen-release-gate.js.map +1 -0
- package/dist-server/service/station/station-screen-release-record.d.ts +62 -0
- package/dist-server/service/station/station-screen-release-record.js +139 -0
- package/dist-server/service/station/station-screen-release-record.js.map +1 -0
- package/dist-server/service/station/station-screen-release-signature.d.ts +23 -0
- package/dist-server/service/station/station-screen-release-signature.js +32 -0
- package/dist-server/service/station/station-screen-release-signature.js.map +1 -0
- package/dist-server/service/station/station-screen-scorecard.d.ts +15 -0
- package/dist-server/service/station/station-screen-scorecard.js +35 -0
- package/dist-server/service/station/station-screen-scorecard.js.map +1 -0
- package/dist-server/service/station/station-screen-spec-resolver.d.ts +36 -0
- package/dist-server/service/station/station-screen-spec-resolver.js +202 -0
- package/dist-server/service/station/station-screen-spec-resolver.js.map +1 -0
- package/dist-server/service/station/station-screen-spec.d.ts +104 -0
- package/dist-server/service/station/station-screen-spec.js +114 -0
- package/dist-server/service/station/station-screen-spec.js.map +1 -0
- package/dist-server/service/station/station-screen-thumbnail.d.ts +11 -0
- package/dist-server/service/station/station-screen-thumbnail.js +36 -0
- package/dist-server/service/station/station-screen-thumbnail.js.map +1 -0
- package/dist-server/service/station/station-service-resolver.d.ts +27 -0
- package/dist-server/service/station/station-service-resolver.js +95 -0
- package/dist-server/service/station/station-service-resolver.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/package.json +44 -0
- package/shared/station-axes.d.ts +4 -0
- package/shared/station-axes.js +155 -0
- package/shared/station-screen-flow-check.d.ts +12 -0
- package/shared/station-screen-flow-check.js +74 -0
- package/things-scene.config.js +15 -0
- package/translations/en.json +42 -0
- package/translations/ja.json +42 -0
- package/translations/ko.json +42 -0
- package/translations/ms.json +42 -0
- package/translations/zh.json +42 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StationServiceResolver = exports.StationServiceType = exports.StationServiceFieldType = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const type_graphql_1 = require("type-graphql");
|
|
6
|
+
const shell_1 = require("@things-factory/shell");
|
|
7
|
+
const station_argument_sources_js_1 = require("./station-argument-sources.js");
|
|
8
|
+
const station_product_js_1 = require("./station-product.js");
|
|
9
|
+
let StationServiceFieldType = class StationServiceFieldType {
|
|
10
|
+
};
|
|
11
|
+
exports.StationServiceFieldType = StationServiceFieldType;
|
|
12
|
+
tslib_1.__decorate([
|
|
13
|
+
(0, type_graphql_1.Field)({ description: 'the field name, exactly as the schema spells it' }),
|
|
14
|
+
tslib_1.__metadata("design:type", String)
|
|
15
|
+
], StationServiceFieldType.prototype, "name", void 0);
|
|
16
|
+
tslib_1.__decorate([
|
|
17
|
+
(0, type_graphql_1.Field)({ description: 'without a value here the call fails' }),
|
|
18
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
19
|
+
], StationServiceFieldType.prototype, "required", void 0);
|
|
20
|
+
tslib_1.__decorate([
|
|
21
|
+
(0, type_graphql_1.Field)({ nullable: true, description: "what the field's own owner wrote about it — shown instead of the name" }),
|
|
22
|
+
tslib_1.__metadata("design:type", String)
|
|
23
|
+
], StationServiceFieldType.prototype, "describes", void 0);
|
|
24
|
+
tslib_1.__decorate([
|
|
25
|
+
(0, type_graphql_1.Field)({ description: 'empty here reads as 「nobody wrote it down」, which is not the same as zero' }),
|
|
26
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
27
|
+
], StationServiceFieldType.prototype, "notable", void 0);
|
|
28
|
+
tslib_1.__decorate([
|
|
29
|
+
(0, type_graphql_1.Field)(type => shell_1.ScalarObject, {
|
|
30
|
+
nullable: true,
|
|
31
|
+
description: 'where this would come from if the author says nothing — a suggestion, always overridable'
|
|
32
|
+
}),
|
|
33
|
+
tslib_1.__metadata("design:type", Object)
|
|
34
|
+
], StationServiceFieldType.prototype, "suggested", void 0);
|
|
35
|
+
exports.StationServiceFieldType = StationServiceFieldType = tslib_1.__decorate([
|
|
36
|
+
(0, type_graphql_1.ObjectType)({ description: 'one argument a station service takes' })
|
|
37
|
+
], StationServiceFieldType);
|
|
38
|
+
let StationServiceType = class StationServiceType {
|
|
39
|
+
};
|
|
40
|
+
exports.StationServiceType = StationServiceType;
|
|
41
|
+
tslib_1.__decorate([
|
|
42
|
+
(0, type_graphql_1.Field)({ description: 'the mutation name' }),
|
|
43
|
+
tslib_1.__metadata("design:type", String)
|
|
44
|
+
], StationServiceType.prototype, "name", void 0);
|
|
45
|
+
tslib_1.__decorate([
|
|
46
|
+
(0, type_graphql_1.Field)({ description: 'what the author is doing when they pick this — a copy key' }),
|
|
47
|
+
tslib_1.__metadata("design:type", String)
|
|
48
|
+
], StationServiceType.prototype, "describes", void 0);
|
|
49
|
+
tslib_1.__decorate([
|
|
50
|
+
(0, type_graphql_1.Field)(type => [StationServiceFieldType]),
|
|
51
|
+
tslib_1.__metadata("design:type", Array)
|
|
52
|
+
], StationServiceType.prototype, "fields", void 0);
|
|
53
|
+
exports.StationServiceType = StationServiceType = tslib_1.__decorate([
|
|
54
|
+
(0, type_graphql_1.ObjectType)({ description: 'something a station step can call' })
|
|
55
|
+
], StationServiceType);
|
|
56
|
+
/**
|
|
57
|
+
* What a step can call, and what each call needs.
|
|
58
|
+
*
|
|
59
|
+
* ── Why the server answers this and not introspection in the browser ─────
|
|
60
|
+
* The browser could ask the schema itself. It would get every mutation in the app, and then the
|
|
61
|
+
* composer would have to decide which of them belong at a bench — a judgement, made in a place
|
|
62
|
+
* nobody would think to look. Worse, introspection alone cannot say that `goodCount` is nullable
|
|
63
|
+
* *and* must not be left empty; that is domain knowledge, and it lives beside the declaration.
|
|
64
|
+
*
|
|
65
|
+
* The field names and their nullability still come from the schema's own metadata. Nothing here
|
|
66
|
+
* is a second copy of the input types.
|
|
67
|
+
*/
|
|
68
|
+
let StationServiceResolver = class StationServiceResolver {
|
|
69
|
+
async stationServices() {
|
|
70
|
+
return (0, station_product_js_1.stationProduct)().services.map(declared => ({
|
|
71
|
+
name: declared.name,
|
|
72
|
+
describes: declared.describes,
|
|
73
|
+
fields: (0, station_product_js_1.fieldsOfService)(declared).map(field => ({
|
|
74
|
+
name: field.name,
|
|
75
|
+
required: field.required,
|
|
76
|
+
describes: field.describes,
|
|
77
|
+
notable: Boolean(field.notable),
|
|
78
|
+
suggested: (0, station_argument_sources_js_1.suggestSource)(field.name)
|
|
79
|
+
}))
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
exports.StationServiceResolver = StationServiceResolver;
|
|
84
|
+
tslib_1.__decorate([
|
|
85
|
+
(0, type_graphql_1.Directive)('@privilege(category: "station", privilege: "query", domainOwnerGranted: true)'),
|
|
86
|
+
(0, type_graphql_1.Query)(returns => [StationServiceType], { description: 'services a station step can call' }),
|
|
87
|
+
tslib_1.__metadata("design:type", Function),
|
|
88
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
89
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
90
|
+
], StationServiceResolver.prototype, "stationServices", null);
|
|
91
|
+
exports.StationServiceResolver = StationServiceResolver = tslib_1.__decorate([
|
|
92
|
+
(0, type_graphql_1.Resolver)(),
|
|
93
|
+
(0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
|
|
94
|
+
], StationServiceResolver);
|
|
95
|
+
//# sourceMappingURL=station-service-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"station-service-resolver.js","sourceRoot":"","sources":["../../../server/service/station/station-service-resolver.ts"],"names":[],"mappings":";;;;AAAA,+CAA2F;AAE3F,iDAAmE;AAEnE,+EAA6D;AAC7D,6DAAsE;AAG/D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAkBnC,CAAA;AAlBY,0DAAuB;AAElC;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,iDAAiD,EAAE,CAAC;;qDAC9D;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;;yDAC7C;AAGjB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,uEAAuE,EAAE,CAAC;;0DAC9F;AAGlB;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,2EAA2E,EAAE,CAAC;;wDACpF;AAMhB;IAJC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE;QAC3B,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,0FAA0F;KACxG,CAAC;;0DACiC;kCAjBxB,uBAAuB;IADnC,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;GACvD,uBAAuB,CAkBnC;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CAS9B,CAAA;AATY,gDAAkB;AAE7B;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;;gDAChC;AAGZ;IADC,IAAA,oBAAK,EAAC,EAAE,WAAW,EAAE,2DAA2D,EAAE,CAAC;;qDACnE;AAGjB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC;;kDACR;6BARtB,kBAAkB;IAD9B,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;GACpD,kBAAkB,CAS9B;AAED;;;;;;;;;;;GAWG;AAGI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAG3B,AAAN,KAAK,CAAC,eAAe;QACnB,OAAO,IAAA,mCAAc,GAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,MAAM,EAAE,IAAA,oCAAe,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC/B,SAAS,EAAE,IAAA,2CAAa,EAAC,KAAK,CAAC,IAAI,CAAwC;aAC5E,CAAC,CAAC;SACJ,CAAC,CAAC,CAAA;IACL,CAAC;CACF,CAAA;AAhBY,wDAAsB;AAG3B;IAFL,IAAA,wBAAS,EAAC,+EAA+E,CAAC;IAC1F,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;;;;6DAa3F;iCAfU,sBAAsB;IAFlC,IAAA,uBAAQ,GAAE;IACV,IAAA,4BAAa,EAAC,qBAAa,CAAC;GAChB,sBAAsB,CAgBlC","sourcesContent":["import { Directive, Field, ObjectType, Query, Resolver, UseMiddleware } from 'type-graphql'\n\nimport { ScalarObject, SpeakRefusals } from '@things-factory/shell'\n\nimport { suggestSource } from './station-argument-sources.js'\nimport { fieldsOfService, stationProduct } from './station-product.js'\n\n@ObjectType({ description: 'one argument a station service takes' })\nexport class StationServiceFieldType {\n @Field({ description: 'the field name, exactly as the schema spells it' })\n name: string\n\n @Field({ description: 'without a value here the call fails' })\n required: boolean\n\n @Field({ nullable: true, description: \"what the field's own owner wrote about it — shown instead of the name\" })\n describes?: string\n\n @Field({ description: 'empty here reads as 「nobody wrote it down」, which is not the same as zero' })\n notable: boolean\n\n @Field(type => ScalarObject, {\n nullable: true,\n description: 'where this would come from if the author says nothing — a suggestion, always overridable'\n })\n suggested?: Record<string, unknown>\n}\n\n@ObjectType({ description: 'something a station step can call' })\nexport class StationServiceType {\n @Field({ description: 'the mutation name' })\n name: string\n\n @Field({ description: 'what the author is doing when they pick this — a copy key' })\n describes: string\n\n @Field(type => [StationServiceFieldType])\n fields: StationServiceFieldType[]\n}\n\n/**\n * What a step can call, and what each call needs.\n *\n * ── Why the server answers this and not introspection in the browser ─────\n * The browser could ask the schema itself. It would get every mutation in the app, and then the\n * composer would have to decide which of them belong at a bench — a judgement, made in a place\n * nobody would think to look. Worse, introspection alone cannot say that `goodCount` is nullable\n * *and* must not be left empty; that is domain knowledge, and it lives beside the declaration.\n *\n * The field names and their nullability still come from the schema's own metadata. Nothing here\n * is a second copy of the input types.\n */\n@Resolver()\n@UseMiddleware(SpeakRefusals)\nexport class StationServiceResolver {\n @Directive('@privilege(category: \"station\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => [StationServiceType], { description: 'services a station step can call' })\n async stationServices(): Promise<StationServiceType[]> {\n return stationProduct().services.map(declared => ({\n name: declared.name,\n describes: declared.describes,\n fields: fieldsOfService(declared).map(field => ({\n name: field.name,\n required: field.required,\n describes: field.describes,\n notable: Boolean(field.notable),\n suggested: suggestSource(field.name) as Record<string, unknown> | undefined\n }))\n }))\n }\n}\n"]}
|