@pie-players/pie-assessment-toolkit 0.3.24 → 0.3.26
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 +58 -16
- package/dist/components/ItemToolBar.custom-element.js +40 -5
- package/dist/components/PieAssessmentToolkit.custom-element.js +40 -1
- package/dist/components/SectionToolBar.custom-element.js +16 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/services/ToolRegistry.d.ts +3 -0
- package/dist/services/ToolRegistry.d.ts.map +1 -1
- package/dist/services/ToolRegistry.js.map +1 -1
- package/dist/services/ToolkitCoordinator.d.ts +26 -5
- package/dist/services/ToolkitCoordinator.d.ts.map +1 -1
- package/dist/services/ToolkitCoordinator.js +75 -36
- package/dist/services/ToolkitCoordinator.js.map +1 -1
- package/dist/services/create-tools-config.d.ts +15 -0
- package/dist/services/create-tools-config.d.ts.map +1 -0
- package/dist/services/create-tools-config.js +13 -0
- package/dist/services/create-tools-config.js.map +1 -0
- package/dist/services/tool-config-validation.d.ts +24 -0
- package/dist/services/tool-config-validation.d.ts.map +1 -0
- package/dist/services/tool-config-validation.js +221 -0
- package/dist/services/tool-config-validation.js.map +1 -0
- package/dist/services/toolbar-items.d.ts +1 -0
- package/dist/services/toolbar-items.d.ts.map +1 -1
- package/dist/services/toolbar-items.js +28 -2
- package/dist/services/toolbar-items.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { normalizeToolsConfig, } from "./tools-config-normalizer.js";
|
|
2
|
+
import { createPackagedToolRegistry } from "./createDefaultToolRegistry.js";
|
|
3
|
+
const DEFAULT_STRICTNESS = "error";
|
|
4
|
+
export function normalizeToolConfigStrictness(value) {
|
|
5
|
+
if (value === "off" || value === "warn" || value === "error") {
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
return DEFAULT_STRICTNESS;
|
|
9
|
+
}
|
|
10
|
+
function createDiagnostic(diagnostic) {
|
|
11
|
+
return diagnostic;
|
|
12
|
+
}
|
|
13
|
+
function getRegistryToolMap(toolRegistry) {
|
|
14
|
+
if (!toolRegistry)
|
|
15
|
+
return new Map();
|
|
16
|
+
return new Map(toolRegistry
|
|
17
|
+
.getAllTools()
|
|
18
|
+
.slice()
|
|
19
|
+
.sort((left, right) => left.toolId.localeCompare(right.toolId))
|
|
20
|
+
.map((tool) => [tool.toolId, tool]));
|
|
21
|
+
}
|
|
22
|
+
function sanitizeProviderConfig(providerId, providerConfig, tool, diagnostics) {
|
|
23
|
+
if (!providerConfig || !tool?.provider?.sanitizeConfig)
|
|
24
|
+
return providerConfig;
|
|
25
|
+
try {
|
|
26
|
+
const sanitized = tool.provider.sanitizeConfig(providerConfig);
|
|
27
|
+
if (!sanitized || typeof sanitized !== "object" || Array.isArray(sanitized)) {
|
|
28
|
+
diagnostics.push(createDiagnostic({
|
|
29
|
+
code: "tools.providerSanitizeFailed",
|
|
30
|
+
severity: "error",
|
|
31
|
+
path: `providers.${providerId}`,
|
|
32
|
+
message: `Provider sanitizer for "${providerId}" must return an object.`,
|
|
33
|
+
providerId,
|
|
34
|
+
toolId: providerId,
|
|
35
|
+
}));
|
|
36
|
+
return providerConfig;
|
|
37
|
+
}
|
|
38
|
+
return sanitized;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
diagnostics.push(createDiagnostic({
|
|
42
|
+
code: "tools.providerSanitizeFailed",
|
|
43
|
+
severity: "error",
|
|
44
|
+
path: `providers.${providerId}`,
|
|
45
|
+
message: `Provider sanitizer failed for "${providerId}": ${error instanceof Error ? error.message : String(error)}`,
|
|
46
|
+
providerId,
|
|
47
|
+
toolId: providerId,
|
|
48
|
+
}));
|
|
49
|
+
return providerConfig;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function validateProviderConfig(providerId, providerConfig, tool, diagnostics) {
|
|
53
|
+
if (!providerConfig || !tool?.provider?.validateConfig)
|
|
54
|
+
return;
|
|
55
|
+
try {
|
|
56
|
+
const providerDiagnostics = tool.provider.validateConfig(providerConfig);
|
|
57
|
+
if (!Array.isArray(providerDiagnostics)) {
|
|
58
|
+
diagnostics.push(createDiagnostic({
|
|
59
|
+
code: "tools.invalidProviderValidation",
|
|
60
|
+
severity: "error",
|
|
61
|
+
path: `providers.${providerId}`,
|
|
62
|
+
message: `Provider validator for "${providerId}" must return an array.`,
|
|
63
|
+
providerId,
|
|
64
|
+
toolId: providerId,
|
|
65
|
+
}));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
for (const diagnostic of providerDiagnostics) {
|
|
69
|
+
diagnostics.push({
|
|
70
|
+
...diagnostic,
|
|
71
|
+
path: diagnostic.path || `providers.${providerId}`,
|
|
72
|
+
providerId: diagnostic.providerId || providerId,
|
|
73
|
+
toolId: diagnostic.toolId || providerId,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
diagnostics.push(createDiagnostic({
|
|
79
|
+
code: "tools.providerValidateFailed",
|
|
80
|
+
severity: "error",
|
|
81
|
+
path: `providers.${providerId}`,
|
|
82
|
+
message: `Provider validator failed for "${providerId}": ${error instanceof Error ? error.message : String(error)}`,
|
|
83
|
+
providerId,
|
|
84
|
+
toolId: providerId,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function collectPlacementDiagnostics(config, toolMap, diagnostics) {
|
|
89
|
+
if (toolMap.size === 0)
|
|
90
|
+
return;
|
|
91
|
+
const levelOrder = ["section", "item", "passage"];
|
|
92
|
+
for (const level of levelOrder) {
|
|
93
|
+
for (const toolId of config.placement[level]) {
|
|
94
|
+
const tool = toolMap.get(toolId);
|
|
95
|
+
if (!tool) {
|
|
96
|
+
diagnostics.push(createDiagnostic({
|
|
97
|
+
code: "tools.unknownToolId",
|
|
98
|
+
severity: "error",
|
|
99
|
+
path: `placement.${level}`,
|
|
100
|
+
message: `Unknown tool id "${toolId}" in placement.${level}.`,
|
|
101
|
+
toolId,
|
|
102
|
+
}));
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (!tool.supportedLevels.includes(level)) {
|
|
106
|
+
diagnostics.push(createDiagnostic({
|
|
107
|
+
code: "tools.unsupportedLevel",
|
|
108
|
+
severity: "error",
|
|
109
|
+
path: `placement.${level}`,
|
|
110
|
+
message: `Tool "${toolId}" does not support level "${level}".`,
|
|
111
|
+
toolId,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function collectPolicyDiagnostics(config, toolMap, diagnostics) {
|
|
118
|
+
if (toolMap.size === 0)
|
|
119
|
+
return;
|
|
120
|
+
for (const toolId of config.policy.allowed || []) {
|
|
121
|
+
if (toolMap.has(toolId))
|
|
122
|
+
continue;
|
|
123
|
+
diagnostics.push(createDiagnostic({
|
|
124
|
+
code: "tools.unknownToolId",
|
|
125
|
+
severity: "error",
|
|
126
|
+
path: "policy.allowed",
|
|
127
|
+
message: `Unknown tool id "${toolId}" in policy.allowed.`,
|
|
128
|
+
toolId,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
for (const toolId of config.policy.blocked || []) {
|
|
132
|
+
if (toolMap.has(toolId))
|
|
133
|
+
continue;
|
|
134
|
+
diagnostics.push(createDiagnostic({
|
|
135
|
+
code: "tools.unknownToolId",
|
|
136
|
+
severity: "error",
|
|
137
|
+
path: "policy.blocked",
|
|
138
|
+
message: `Unknown tool id "${toolId}" in policy.blocked.`,
|
|
139
|
+
toolId,
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function collectProviderKeyDiagnostics(config, toolMap, hasDeprecatedTtsKey, diagnostics) {
|
|
144
|
+
if (hasDeprecatedTtsKey) {
|
|
145
|
+
diagnostics.push(createDiagnostic({
|
|
146
|
+
code: "tools.deprecatedProviderKey",
|
|
147
|
+
severity: "error",
|
|
148
|
+
path: "providers.tts",
|
|
149
|
+
message: `Provider key "tts" is no longer supported. Use "providers.textToSpeech".`,
|
|
150
|
+
providerId: "tts",
|
|
151
|
+
toolId: "textToSpeech",
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
for (const providerId of Object.keys(config.providers).sort()) {
|
|
155
|
+
if (toolMap.size === 0 || toolMap.has(providerId))
|
|
156
|
+
continue;
|
|
157
|
+
diagnostics.push(createDiagnostic({
|
|
158
|
+
code: "tools.unknownProviderKey",
|
|
159
|
+
severity: "error",
|
|
160
|
+
path: `providers.${providerId}`,
|
|
161
|
+
message: `Unknown provider key "${providerId}".`,
|
|
162
|
+
providerId,
|
|
163
|
+
toolId: providerId,
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function emitWarnings(diagnostics, source) {
|
|
168
|
+
if (diagnostics.length === 0)
|
|
169
|
+
return;
|
|
170
|
+
for (const diagnostic of diagnostics) {
|
|
171
|
+
const prefix = `[tool-config-validation:${source}]`;
|
|
172
|
+
console.warn(`${prefix} ${diagnostic.path} - ${diagnostic.message}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function throwValidationError(diagnostics, source) {
|
|
176
|
+
const formatted = diagnostics
|
|
177
|
+
.map((diagnostic) => `- ${diagnostic.path}: ${diagnostic.message}`)
|
|
178
|
+
.join("\n");
|
|
179
|
+
throw new Error(`[tool-config-validation:${source}] Invalid tools config:\n${formatted}`);
|
|
180
|
+
}
|
|
181
|
+
export function normalizeAndValidateToolsConfig(input, options = {}) {
|
|
182
|
+
const strictness = normalizeToolConfigStrictness(options.strictness);
|
|
183
|
+
const source = options.source ?? "tools";
|
|
184
|
+
const registryTools = getRegistryToolMap(options.toolRegistry ?? createPackagedToolRegistry());
|
|
185
|
+
const normalized = normalizeToolsConfig(input);
|
|
186
|
+
const diagnostics = [];
|
|
187
|
+
const hasDeprecatedTtsKey = Object.prototype.hasOwnProperty.call(normalized.providers, "tts");
|
|
188
|
+
const nextProviders = {
|
|
189
|
+
...(normalized.providers || {}),
|
|
190
|
+
};
|
|
191
|
+
for (const providerId of Object.keys(nextProviders).sort()) {
|
|
192
|
+
if (providerId === "tts") {
|
|
193
|
+
delete nextProviders.tts;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const tool = registryTools.get(providerId);
|
|
197
|
+
nextProviders[providerId] = sanitizeProviderConfig(providerId, nextProviders[providerId], tool, diagnostics);
|
|
198
|
+
validateProviderConfig(providerId, nextProviders[providerId], tool, diagnostics);
|
|
199
|
+
}
|
|
200
|
+
const nextConfig = {
|
|
201
|
+
...normalized,
|
|
202
|
+
providers: nextProviders,
|
|
203
|
+
};
|
|
204
|
+
collectPlacementDiagnostics(nextConfig, registryTools, diagnostics);
|
|
205
|
+
collectPolicyDiagnostics(nextConfig, registryTools, diagnostics);
|
|
206
|
+
collectProviderKeyDiagnostics(nextConfig, registryTools, hasDeprecatedTtsKey, diagnostics);
|
|
207
|
+
if (hasDeprecatedTtsKey) {
|
|
208
|
+
throwValidationError(diagnostics.filter((entry) => entry.code === "tools.deprecatedProviderKey"), source);
|
|
209
|
+
}
|
|
210
|
+
if (strictness === "warn") {
|
|
211
|
+
emitWarnings(diagnostics, source);
|
|
212
|
+
}
|
|
213
|
+
if (strictness === "error" && diagnostics.length > 0) {
|
|
214
|
+
throwValidationError(diagnostics, source);
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
config: nextConfig,
|
|
218
|
+
diagnostics,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=tool-config-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-config-validation.js","sourceRoot":"","sources":["../../src/services/tool-config-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ export interface ToolbarLinkItem extends ToolbarItemBase {
|
|
|
21
21
|
}
|
|
22
22
|
export type ToolbarItem = ToolbarButtonItem | ToolbarLinkItem;
|
|
23
23
|
export declare function isToolbarLinkItem(item: ToolbarItem): item is ToolbarLinkItem;
|
|
24
|
+
export declare function isValidToolbarItemShape(value: unknown): value is ToolbarItem;
|
|
24
25
|
export declare function isInlineSvgIcon(icon: string | undefined): boolean;
|
|
25
26
|
export declare function isExternalIconUrl(icon: string | undefined): boolean;
|
|
26
27
|
//# sourceMappingURL=toolbar-items.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-items.d.ts","sourceRoot":"","sources":["../../src/services/toolbar-items.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACzD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,CAAC;CACZ;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,eAAe,CAE5E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEnE"}
|
|
1
|
+
{"version":3,"file":"toolbar-items.d.ts","sourceRoot":"","sources":["../../src/services/toolbar-items.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACzD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,CAAC;CACZ;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,eAAe,CAE5E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAgB5E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEnE"}
|
|
@@ -1,10 +1,36 @@
|
|
|
1
1
|
export function isToolbarLinkItem(item) {
|
|
2
2
|
return typeof item.href === "string";
|
|
3
3
|
}
|
|
4
|
+
export function isValidToolbarItemShape(value) {
|
|
5
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
6
|
+
return false;
|
|
7
|
+
const item = value;
|
|
8
|
+
if (typeof item.id !== "string" || item.id.trim().length === 0)
|
|
9
|
+
return false;
|
|
10
|
+
if (typeof item.label !== "string" || item.label.trim().length === 0)
|
|
11
|
+
return false;
|
|
12
|
+
if (item.ariaLabel !== undefined && typeof item.ariaLabel !== "string")
|
|
13
|
+
return false;
|
|
14
|
+
if (item.icon !== undefined && typeof item.icon !== "string")
|
|
15
|
+
return false;
|
|
16
|
+
if (item.tooltip !== undefined && typeof item.tooltip !== "string")
|
|
17
|
+
return false;
|
|
18
|
+
if (item.active !== undefined && typeof item.active !== "boolean")
|
|
19
|
+
return false;
|
|
20
|
+
if (item.disabled !== undefined && typeof item.disabled !== "boolean")
|
|
21
|
+
return false;
|
|
22
|
+
const hasHref = typeof item.href === "string";
|
|
23
|
+
const hasOnClick = typeof item.onClick === "function";
|
|
24
|
+
if (hasHref === hasOnClick)
|
|
25
|
+
return false;
|
|
26
|
+
if (hasHref)
|
|
27
|
+
return true;
|
|
28
|
+
return hasOnClick;
|
|
29
|
+
}
|
|
4
30
|
export function isInlineSvgIcon(icon) {
|
|
5
|
-
return typeof icon === "string" && icon.startsWith("<svg");
|
|
31
|
+
return typeof icon === "string" && icon.trimStart().startsWith("<svg");
|
|
6
32
|
}
|
|
7
33
|
export function isExternalIconUrl(icon) {
|
|
8
|
-
return typeof icon === "string" && icon.startsWith("http");
|
|
34
|
+
return typeof icon === "string" && icon.trimStart().startsWith("http");
|
|
9
35
|
}
|
|
10
36
|
//# sourceMappingURL=toolbar-items.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-items.js","sourceRoot":"","sources":["../../src/services/toolbar-items.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IAClD,OAAO,OAAQ,IAAwB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAwB;IACvD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"toolbar-items.js","sourceRoot":"","sources":["../../src/services/toolbar-items.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IAClD,OAAO,OAAQ,IAAwB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3E,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAChF,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEpF,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC9C,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC;IACtD,IAAI,OAAO,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAwB;IACvD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACzD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-players/pie-assessment-toolkit",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.26",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "PIE assessment toolkit: composable services + reference implementation for assessment players and tool coordination",
|
|
6
6
|
"license": "MIT",
|
|
@@ -63,15 +63,15 @@
|
|
|
63
63
|
"test": "bun test"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@pie-players/pie-calculator": "0.3.
|
|
67
|
-
"@pie-players/pie-context": "0.3.
|
|
68
|
-
"@pie-players/pie-players-shared": "0.3.
|
|
69
|
-
"@pie-players/pie-tts": "0.3.
|
|
66
|
+
"@pie-players/pie-calculator": "0.3.26",
|
|
67
|
+
"@pie-players/pie-context": "0.3.26",
|
|
68
|
+
"@pie-players/pie-players-shared": "0.3.26",
|
|
69
|
+
"@pie-players/pie-tts": "0.3.26",
|
|
70
70
|
"svelte": "^5.54.0"
|
|
71
71
|
},
|
|
72
72
|
"peerDependencies": {
|
|
73
|
-
"@pie-players/pie-calculator-desmos": "0.3.
|
|
74
|
-
"@pie-players/tts-client-server": "0.3.
|
|
73
|
+
"@pie-players/pie-calculator-desmos": "0.3.26",
|
|
74
|
+
"@pie-players/tts-client-server": "0.3.26"
|
|
75
75
|
},
|
|
76
76
|
"peerDependenciesMeta": {
|
|
77
77
|
"@pie-players/pie-calculator-desmos": {
|