ose-plugin 0.1.3 → 0.1.4
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 +3 -2
- package/index.d.ts +6 -0
- package/package.json +1 -1
- package/schema/theme.schema.json +5 -0
- package/schema/widget.schema.json +9 -0
- package/validate.mjs +20 -0
package/README.md
CHANGED
|
@@ -313,8 +313,9 @@ npx ose-plugin check <папка> --json # для скриптов и CI
|
|
|
313
313
|
|
|
314
314
|
- Код пакета живёт в рамке-песочнице (`iframe` без доступа к странице оверлея),
|
|
315
315
|
но сеть ей доступна — ставить можно только доверенный код.
|
|
316
|
-
-
|
|
317
|
-
|
|
316
|
+
- 3D-виджет и его тема — два пакета: в одном каталоге один манифест, а тема
|
|
317
|
+
ссылается на тип виджета через `threeDWidgets`.
|
|
318
|
+
- Установка — папкой или zip; обновления и подписи — следующий этап.
|
|
318
319
|
|
|
319
320
|
## Публикация в npm
|
|
320
321
|
|
package/index.d.ts
CHANGED
|
@@ -260,6 +260,10 @@ declare namespace Ose {
|
|
|
260
260
|
entry: string;
|
|
261
261
|
styles?: string[];
|
|
262
262
|
icon?: string;
|
|
263
|
+
/** 3D-виджет: canvas или 3d-webgl. По умолчанию — обычный DOM-виджет. */
|
|
264
|
+
renderType?: "2d" | "canvas" | "3d-webgl";
|
|
265
|
+
/** Семейство темы; обязательно для 3D-виджета. */
|
|
266
|
+
theme?: string;
|
|
263
267
|
defaultGeometry?: Partial<Pick<Geometry, "x" | "y" | "w" | "h">>;
|
|
264
268
|
minW?: number;
|
|
265
269
|
minH?: number;
|
|
@@ -270,6 +274,8 @@ declare namespace Ose {
|
|
|
270
274
|
kind: "theme";
|
|
271
275
|
tokens: Record<`--${string}`, string>;
|
|
272
276
|
css?: string;
|
|
277
|
+
/** Типы 3D-виджетов этой темы: включаются тумблером «3D» на карточке. */
|
|
278
|
+
threeDWidgets?: string[];
|
|
273
279
|
}
|
|
274
280
|
}
|
|
275
281
|
|
package/package.json
CHANGED
package/schema/theme.schema.json
CHANGED
|
@@ -52,6 +52,11 @@
|
|
|
52
52
|
"type": "string",
|
|
53
53
|
"pattern": "\\.css$",
|
|
54
54
|
"description": "CSS-файл внутри пакета; правила пишутся под [data-theme=\"plugin:<id>\"]."
|
|
55
|
+
},
|
|
56
|
+
"threeDWidgets": {
|
|
57
|
+
"type": "array",
|
|
58
|
+
"description": "Типы 3D-виджетов этой темы (plugin:<id>): на карточке появится тумблер «3D», и они включатся вместе с ним.",
|
|
59
|
+
"items": { "type": "string" }
|
|
55
60
|
}
|
|
56
61
|
},
|
|
57
62
|
"additionalProperties": true
|
|
@@ -55,6 +55,15 @@
|
|
|
55
55
|
"type": "string",
|
|
56
56
|
"description": "Ключ из shared/icons.js; неизвестный заменяется на widgetCustom."
|
|
57
57
|
},
|
|
58
|
+
"renderType": {
|
|
59
|
+
"enum": ["2d", "canvas", "3d-webgl"],
|
|
60
|
+
"description": "canvas и 3d-webgl — 3D-виджет: он попадает в набор темы и рисуется на холсте внутри песочницы."
|
|
61
|
+
},
|
|
62
|
+
"theme": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"minLength": 1,
|
|
65
|
+
"description": "Семейство темы. Обязательно для 3D-виджета: по нему он включается и выключается вместе с набором."
|
|
66
|
+
},
|
|
58
67
|
"defaultGeometry": {
|
|
59
68
|
"type": "object",
|
|
60
69
|
"description": "Положение и размер в процентах холста (0–100).",
|
package/validate.mjs
CHANGED
|
@@ -179,6 +179,15 @@ function checkWidget(packageDir, manifest, errors, warnings) {
|
|
|
179
179
|
|
|
180
180
|
checkGeometry(manifest, errors, warnings);
|
|
181
181
|
checkSettings(manifest, errors, warnings);
|
|
182
|
+
|
|
183
|
+
// 3D-виджет рисует на canvas: приложение отличит его от обычного по этим
|
|
184
|
+
// полям и включит вместе с набором темы.
|
|
185
|
+
const renderType = manifest.renderType === undefined ? "2d" : manifest.renderType;
|
|
186
|
+
if (!["2d", "canvas", "3d-webgl"].includes(renderType)) {
|
|
187
|
+
errors.push(`renderType «${String(manifest.renderType)}» неизвестен: 2d, canvas или 3d-webgl`);
|
|
188
|
+
} else if (renderType !== "2d" && !text(manifest.theme)) {
|
|
189
|
+
errors.push("3D-виджету (canvas или 3d-webgl) нужно поле theme — семейство темы");
|
|
190
|
+
}
|
|
182
191
|
}
|
|
183
192
|
|
|
184
193
|
function checkTheme(packageDir, manifest, errors, warnings) {
|
|
@@ -200,6 +209,17 @@ function checkTheme(packageDir, manifest, errors, warnings) {
|
|
|
200
209
|
checkFile(packageDir, manifest.css, ".css", "css", errors);
|
|
201
210
|
}
|
|
202
211
|
}
|
|
212
|
+
|
|
213
|
+
if (manifest.threeDWidgets !== undefined) {
|
|
214
|
+
if (!Array.isArray(manifest.threeDWidgets)) {
|
|
215
|
+
errors.push("threeDWidgets должен быть массивом типов");
|
|
216
|
+
} else {
|
|
217
|
+
manifest.threeDWidgets.forEach((kind) => {
|
|
218
|
+
if (typeof kind !== "string") errors.push("threeDWidgets содержит не строку");
|
|
219
|
+
else if (!text(kind)) warnings.push("пустой тип в threeDWidgets пропускается");
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
203
223
|
}
|
|
204
224
|
|
|
205
225
|
/** Проверить один пакет: папку с widget.json или theme.json. */
|