@kite3d/engine 0.18.0 → 0.19.0-alpha.1
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/dist/authoring.d.ts +1 -1
- package/dist/authoring.js +7 -7
- package/dist/authoring.js.map +1 -1
- package/dist/authoringValidation.d.ts +2 -5
- package/dist/authoringValidation.js +266 -289
- package/dist/authoringValidation.js.map +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +1145 -1440
- package/dist/index.js.map +1 -1
- package/dist/projectFormat.js +70 -81
- package/dist/projectFormat.js.map +1 -1
- package/dist/runtime/createGame.d.ts +1 -1
- package/dist/runtime/index.d.ts +0 -2
- package/dist/runtime/projectFormat.d.ts +7 -14
- package/dist/runtime.js +14086 -15497
- package/dist/runtime.js.map +1 -1
- package/dist/sceneSerialization.js +57 -52
- package/dist/sceneSerialization.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/src/authoring.ts +3 -3
- package/src/authoringValidation.ts +3 -40
- package/src/index.ts +0 -2
- package/src/runtime/createGame.ts +1 -5
- package/src/runtime/index.ts +0 -2
- package/src/runtime/projectFormat.ts +20 -47
- package/src/sceneSerialization.ts +10 -2
- package/dist/generatorParams.d.ts +0 -23
- package/dist/plugins/GeneratorComponent.d.ts +0 -44
- package/src/generatorParams.ts +0 -182
- package/src/plugins/GeneratorComponent.ts +0 -287
package/dist/projectFormat.js
CHANGED
|
@@ -1,125 +1,114 @@
|
|
|
1
|
-
import { parse as
|
|
2
|
-
const
|
|
3
|
-
function O(
|
|
4
|
-
const
|
|
1
|
+
import { parse as v } from "jsonc-parser";
|
|
2
|
+
const y = "kite3d", w = `/${y}/`, j = "Generator components were removed in Kite3D 0.19.0.";
|
|
3
|
+
function O(e, n) {
|
|
4
|
+
const t = `${w}@`;
|
|
5
5
|
return (o) => {
|
|
6
|
-
var
|
|
7
|
-
if (o.startsWith(
|
|
8
|
-
const
|
|
6
|
+
var f;
|
|
7
|
+
if (o.startsWith(t)) {
|
|
8
|
+
const i = new URL(o, "https://kite3d.invalid"), a = decodeURIComponent(i.pathname.slice(t.length)), c = a.indexOf("/"), d = c < 0 ? a : a.slice(0, c), p = c < 0 ? "" : a.slice(c + 1), s = n.files[d];
|
|
9
9
|
if (!(s != null && s.path)) throw new Error(`Unknown asset id in URL: ${d}`);
|
|
10
|
-
const
|
|
11
|
-
if (
|
|
12
|
-
if (s.files) throw new Error(`Unknown file for asset ${d}: ${
|
|
13
|
-
return /^f\.[^/]+$/i.test(
|
|
10
|
+
const r = (f = s.files) == null ? void 0 : f[p];
|
|
11
|
+
if (r) return new URL(r, e).href;
|
|
12
|
+
if (s.files) throw new Error(`Unknown file for asset ${d}: ${p}`);
|
|
13
|
+
return /^f\.[^/]+$/i.test(p) ? new URL(s.path, e).href : new URL(p, new URL(s.path, e)).href;
|
|
14
14
|
}
|
|
15
|
-
return o.startsWith(
|
|
15
|
+
return o.startsWith(w) ? new URL(o.slice(w.length), e).href : o;
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
const
|
|
20
|
-
return
|
|
18
|
+
function R(e, n) {
|
|
19
|
+
const t = n.dependencies;
|
|
20
|
+
return S(t) && Object.prototype.hasOwnProperty.call(t, e);
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
22
|
+
function U(e) {
|
|
23
|
+
const n = v(e);
|
|
24
|
+
if (!n || typeof n != "object" || Array.isArray(n))
|
|
25
25
|
throw new Error("Invalid package.json file: expected an object");
|
|
26
|
-
const
|
|
27
|
-
if (typeof
|
|
26
|
+
const t = n;
|
|
27
|
+
if (typeof t.mainScene != "string" || !t.mainScene.toLowerCase().endsWith(".gltf"))
|
|
28
28
|
throw new Error("package.json mainScene must name a text .gltf file");
|
|
29
|
-
return
|
|
29
|
+
return t;
|
|
30
30
|
}
|
|
31
|
-
function
|
|
32
|
-
const
|
|
33
|
-
if (
|
|
31
|
+
function b(e) {
|
|
32
|
+
const n = v(e);
|
|
33
|
+
if (n.files && typeof n.files != "object")
|
|
34
34
|
throw new Error("Invalid assets.json file: files should be an object");
|
|
35
|
-
if (
|
|
35
|
+
if (n.version !== void 0 && typeof n.version != "number")
|
|
36
36
|
throw new Error("Invalid assets.json file: version should be a number");
|
|
37
|
-
return
|
|
37
|
+
return n.files || (n.files = {}), n.version || (n.version = 1), n;
|
|
38
38
|
}
|
|
39
|
-
function k(
|
|
40
|
-
const
|
|
41
|
-
if (!
|
|
42
|
-
throw new Error(`${
|
|
39
|
+
function k(e, n) {
|
|
40
|
+
const t = JSON.parse(n);
|
|
41
|
+
if (!t || typeof t != "object" || !t.asset)
|
|
42
|
+
throw new Error(`${e} is not a JSON glTF document`);
|
|
43
43
|
}
|
|
44
|
-
function
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
nodeIndex: c,
|
|
54
|
-
nodeName: typeof p.name == "string" ? p.name : `Node ${c}`,
|
|
55
|
-
params: h(r.state.params) ? r.state.params : {},
|
|
56
|
-
schema: {}
|
|
57
|
-
});
|
|
58
|
-
return o;
|
|
59
|
-
} catch {
|
|
60
|
-
return [];
|
|
61
|
-
}
|
|
44
|
+
function A(e) {
|
|
45
|
+
var o;
|
|
46
|
+
const n = JSON.parse(e), t = [];
|
|
47
|
+
for (const [f, i] of (n.nodes || []).entries())
|
|
48
|
+
Object.values(((o = i.extras) == null ? void 0 : o.EntityComponentPlugin) || {}).some(({ type: c }) => c === "Generator") && t.push({
|
|
49
|
+
nodeIndex: f,
|
|
50
|
+
nodeName: typeof i.name == "string" && i.name.trim() ? i.name : `Node ${f}`
|
|
51
|
+
});
|
|
52
|
+
return t;
|
|
62
53
|
}
|
|
63
|
-
function
|
|
64
|
-
|
|
65
|
-
const o = JSON.parse(t), c = (f = (d = (r = (a = (p = o.nodes) == null ? void 0 : p[e.nodeIndex]) == null ? void 0 : a.extras) == null ? void 0 : r.EntityComponentPlugin) == null ? void 0 : d[e.componentId]) == null ? void 0 : f.state;
|
|
66
|
-
if (!h(c)) throw new Error(`Generator component is missing on ${e.nodeName}`);
|
|
67
|
-
return Object.assign(c, n), { text: JSON.stringify(o, null, 2), state: c };
|
|
54
|
+
function $(e) {
|
|
55
|
+
return `${j} Convert ${e} to asset files. See the guide's Scene asset management section.`;
|
|
68
56
|
}
|
|
69
|
-
async function N(
|
|
70
|
-
var d,
|
|
71
|
-
const
|
|
72
|
-
...
|
|
57
|
+
async function N(e, n) {
|
|
58
|
+
var d, p;
|
|
59
|
+
const t = e[y] ?? {}, o = [], i = {
|
|
60
|
+
...e.dependencies && typeof e.dependencies == "object" && !Array.isArray(e.dependencies) ? e.dependencies : {}
|
|
73
61
|
};
|
|
74
|
-
o.push(...Object.entries(
|
|
62
|
+
o.push(...Object.entries(i).map(([s, r]) => ({ key: s, version: r }))), t.imports && o.push(...Object.entries(t.imports).map(([s, r]) => ({
|
|
75
63
|
key: s,
|
|
76
|
-
url:
|
|
77
|
-
version:
|
|
64
|
+
url: r.startsWith("@") ? void 0 : r,
|
|
65
|
+
version: r.startsWith("@") ? r.slice(1) : ""
|
|
78
66
|
})));
|
|
79
|
-
const a = ((d =
|
|
67
|
+
const a = ((d = t.plugins) == null ? void 0 : d.map((s) => {
|
|
80
68
|
if (typeof s != "string") return s;
|
|
81
|
-
const
|
|
82
|
-
let
|
|
83
|
-
if (
|
|
84
|
-
const
|
|
85
|
-
if (l = s.slice(0,
|
|
69
|
+
const r = s.match(/\((.*)\)$/);
|
|
70
|
+
let h, l = s;
|
|
71
|
+
if (r) {
|
|
72
|
+
const g = r[1].trim();
|
|
73
|
+
if (l = s.slice(0, r.index).trim(), g)
|
|
86
74
|
try {
|
|
87
75
|
const m = [];
|
|
88
|
-
if (
|
|
76
|
+
if (h = v(`[${g}]`, m), !Array.isArray(h) || m.length)
|
|
89
77
|
throw console.error(m), new Error("Plugin params is not a valid array");
|
|
90
78
|
} catch (m) {
|
|
91
|
-
return console.error("Unable to parse plugin params, skipping plugin", s,
|
|
79
|
+
return console.error("Unable to parse plugin params, skipping plugin", s, g, m), null;
|
|
92
80
|
}
|
|
93
81
|
}
|
|
94
82
|
const u = l.lastIndexOf(":");
|
|
95
83
|
return {
|
|
96
84
|
import: u !== -1 ? l.slice(0, u) : l,
|
|
97
85
|
className: u !== -1 ? l.slice(u + 1) : void 0,
|
|
98
|
-
params:
|
|
86
|
+
params: h
|
|
99
87
|
};
|
|
100
|
-
})) || [],
|
|
88
|
+
})) || [], c = ((p = t.scripts) == null ? void 0 : p.map(
|
|
101
89
|
(s) => typeof s == "string" ? { import: s } : s
|
|
102
90
|
)) || [];
|
|
103
91
|
return {
|
|
104
92
|
plugins: a.filter(Boolean),
|
|
105
|
-
scripts:
|
|
93
|
+
scripts: c,
|
|
106
94
|
dependencies: o,
|
|
107
|
-
viewer:
|
|
95
|
+
viewer: t.viewer || {}
|
|
108
96
|
};
|
|
109
97
|
}
|
|
110
|
-
function
|
|
111
|
-
return !!
|
|
98
|
+
function S(e) {
|
|
99
|
+
return !!e && typeof e == "object" && !Array.isArray(e);
|
|
112
100
|
}
|
|
113
101
|
export {
|
|
114
|
-
|
|
102
|
+
j as REMOVED_GENERATOR_GUIDANCE,
|
|
103
|
+
w as assetUrlPrefix,
|
|
115
104
|
O as createProjectAssetURLModifier,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
105
|
+
A as findRemovedGeneratorNodes,
|
|
106
|
+
R as isDependencyModuleSpecifier,
|
|
107
|
+
b as parseAssetsJSONManifest,
|
|
108
|
+
U as parsePackageJSON,
|
|
119
109
|
N as parsePackageJsonSettingsConfig,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
E as updateProjectGeneratorState,
|
|
110
|
+
$ as removedGeneratorMessage,
|
|
111
|
+
y as settingsKey,
|
|
123
112
|
k as validateSceneSource
|
|
124
113
|
};
|
|
125
114
|
//# sourceMappingURL=projectFormat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectFormat.js","sources":["../src/runtime/projectFormat.ts"],"sourcesContent":["import {parse, ParseError} from 'jsonc-parser'\nimport type {GeneratorParamSchema} from '../generatorParams.ts'\n\nexport const settingsKey = 'kite3d'\nexport const assetUrlPrefix = `/${settingsKey}/`\n\nexport type JSONValue = string | number | boolean | null | JSONValue[] | {[key: string]: JSONValue}\nexport type ProjectPackageJSON = Record<string, JSONValue> & {mainScene: string}\n\nexport interface ProjectGeneratorState {\n componentId: string\n module: string\n nodeIndex: number\n nodeName: string\n params: Record<string, unknown>\n schema: GeneratorParamSchema\n}\n\nexport interface AssetsJSONManifest {\n files: Record<string, {\n path: string\n files?: Record<string, string>\n }>\n version: number\n}\n\nexport function createProjectAssetURLModifier(base: URL, assets: AssetsJSONManifest) {\n const assetIdPrefix = `${assetUrlPrefix}@`\n return (url: string): string => {\n if (url.startsWith(assetIdPrefix)) {\n const request = new URL(url, 'https://kite3d.invalid')\n const relative = decodeURIComponent(request.pathname.slice(assetIdPrefix.length))\n const slash = relative.indexOf('/')\n const id = slash < 0 ? relative : relative.slice(0, slash)\n const assetPath = slash < 0 ? '' : relative.slice(slash + 1)\n const asset = assets.files[id]\n if (!asset?.path) throw new Error(`Unknown asset id in URL: ${id}`)\n const registered = asset.files?.[assetPath]\n if (registered) return new URL(registered, base).href\n if (asset.files) throw new Error(`Unknown file for asset ${id}: ${assetPath}`)\n if (/^f\\.[^/]+$/i.test(assetPath)) return new URL(asset.path, base).href\n return new URL(assetPath, new URL(asset.path, base)).href\n }\n if (url.startsWith(assetUrlPrefix)) {\n return new URL(url.slice(assetUrlPrefix.length), base).href\n }\n return url\n }\n}\n\nexport interface ProjectDependency {\n key: string\n version: string\n url?: string\n}\n\nexport interface ExternalPlugin {\n import: string\n /** @default `default` */\n className?: string\n /** @default true */\n active?: boolean\n /** Constructor parameters. */\n params?: JSONValue[]\n}\n\nexport interface ExternalScript {\n import: string\n /** @default true */\n active?: boolean\n}\n\nexport interface ProjectViewerSettings {\n msaa?: boolean\n rgbm?: boolean\n zPrepass?: boolean\n renderScale?: number | 'auto'\n maxRenderScale?: number\n backgroundColor?: string | number | null\n modelRootScale?: number\n stencil?: boolean\n debug?: boolean\n tonemap?: boolean\n camera?: {\n type?: 'perspective' | 'orthographic'\n controlsMode?: string\n position?: [number, number, number]\n target?: [number, number, number]\n }\n maxHDRIntensity?: number\n powerPreference?: 'default' | 'high-performance' | 'low-power'\n}\n\nexport interface ProjectConfigSettings {\n plugins: ExternalPlugin[]\n scripts: ExternalScript[]\n dependencies: ProjectDependency[]\n viewer: ProjectViewerSettings\n}\n\nexport interface ProjectConfigSettingsJSON {\n plugins?: (ExternalPlugin | string)[]\n imports?: Record<string, string>\n scripts?: (ExternalScript | string)[]\n viewer?: ProjectViewerSettings\n}\n\n/** A configured script or plugin is package-backed only when it names a declared dependency exactly. */\nexport function isDependencyModuleSpecifier(\n specifier: string,\n packageJson: ProjectPackageJSON,\n): boolean {\n const dependencies = packageJson.dependencies\n return isRecord(dependencies) && Object.prototype.hasOwnProperty.call(dependencies, specifier)\n}\n\nexport function parsePackageJSON(text: string): ProjectPackageJSON {\n const json = parse(text) as unknown\n if (!json || typeof json !== 'object' || Array.isArray(json)) {\n throw new Error('Invalid package.json file: expected an object')\n }\n const packageJson = json as ProjectPackageJSON\n if (typeof packageJson.mainScene !== 'string' || !packageJson.mainScene.toLowerCase().endsWith('.gltf')) {\n throw new Error('package.json mainScene must name a text .gltf file')\n }\n return packageJson\n}\n\nexport function parseAssetsJSONManifest(text: string): AssetsJSONManifest {\n const json = parse(text) as AssetsJSONManifest\n\n if (json.files && typeof json.files !== 'object') {\n throw new Error('Invalid assets.json file: files should be an object')\n }\n if (json.version !== undefined && typeof json.version !== 'number') {\n throw new Error('Invalid assets.json file: version should be a number')\n }\n\n if (!json.files) json.files = {}\n if (!json.version) json.version = 1\n\n return json\n}\n\nexport function validateSceneSource(path: string, text: string): void {\n const document = JSON.parse(text) as {asset?: unknown}\n if (!document || typeof document !== 'object' || !document.asset) {\n throw new Error(`${path} is not a JSON glTF document`)\n }\n}\n\nexport function readProjectGeneratorStates(text: string): ProjectGeneratorState[] {\n try {\n const document = JSON.parse(text) as {\n nodes?: Array<{\n name?: unknown\n extras?: {EntityComponentPlugin?: Record<string, {type?: unknown, state?: unknown}>}\n }>\n }\n const generators: ProjectGeneratorState[] = []\n for (const [nodeIndex, node] of (document.nodes || []).entries()) {\n for (const [componentId, component] of Object.entries(node.extras?.EntityComponentPlugin || {})) {\n if (component.type !== 'Generator' || !isRecord(component.state)) continue\n generators.push({\n componentId,\n module: typeof component.state.module === 'string' ? component.state.module : '',\n nodeIndex,\n nodeName: typeof node.name === 'string' ? node.name : `Node ${nodeIndex}`,\n params: isRecord(component.state.params) ? component.state.params : {},\n schema: {},\n })\n }\n }\n return generators\n } catch {\n return []\n }\n}\n\nexport function updateProjectGeneratorState(\n text: string,\n generator: Pick<ProjectGeneratorState, 'componentId' | 'nodeIndex' | 'nodeName'>,\n update: Partial<Pick<ProjectGeneratorState, 'module' | 'params'>>,\n): {text: string, state: Record<string, unknown>} {\n const document = JSON.parse(text) as {\n nodes?: Array<{extras?: {EntityComponentPlugin?: Record<string, {state?: unknown}>}}>\n }\n const state = document.nodes?.[generator.nodeIndex]?.extras?.EntityComponentPlugin?.[generator.componentId]?.state\n if (!isRecord(state)) throw new Error(`Generator component is missing on ${generator.nodeName}`)\n Object.assign(state, update)\n return {text: JSON.stringify(document, null, 2), state}\n}\n\nexport async function parsePackageJsonSettingsConfig(json: ProjectPackageJSON, _project?: unknown): Promise<ProjectConfigSettings> {\n const config = (json[settingsKey] ?? {}) as ProjectConfigSettingsJSON\n const dependencies: ProjectDependency[] = []\n const packageDependencies = json.dependencies && typeof json.dependencies === 'object' && !Array.isArray(json.dependencies)\n ? json.dependencies as Record<string, string>\n : {}\n const deps: Record<string, string> = {\n ...packageDependencies,\n }\n\n dependencies.push(...Object.entries(deps).map(([key, version]) => ({key, version})))\n\n if (config.imports) {\n dependencies.push(...Object.entries(config.imports).map(([key, url]) => ({\n key,\n url: !url.startsWith('@') ? url : undefined,\n version: url.startsWith('@') ? url.slice(1) : '',\n })))\n }\n\n const plugins = config.plugins?.map((entry) => {\n if (typeof entry !== 'string') return entry\n\n const match = entry.match(/\\((.*)\\)$/)\n let params: JSONValue[] | undefined\n let spec = entry\n\n if (match) {\n const paramString = match[1].trim()\n spec = entry.slice(0, match.index).trim()\n if (paramString) {\n try {\n const errors: ParseError[] = []\n params = parse(`[${paramString}]`, errors)\n if (!Array.isArray(params) || errors.length) {\n console.error(errors)\n throw new Error('Plugin params is not a valid array')\n }\n } catch (error) {\n console.error('Unable to parse plugin params, skipping plugin', entry, paramString, error)\n return null\n }\n }\n }\n\n const separator = spec.lastIndexOf(':')\n return {\n import: separator !== -1 ? spec.slice(0, separator) : spec,\n className: separator !== -1 ? spec.slice(separator + 1) : undefined,\n params,\n } satisfies ExternalPlugin\n }) || []\n\n const scripts = config.scripts?.map((entry) =>\n typeof entry === 'string' ? {import: entry} : entry\n ) || []\n\n return {\n plugins: plugins.filter(Boolean) as ExternalPlugin[],\n scripts,\n dependencies,\n viewer: config.viewer || {},\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n"],"names":["settingsKey","assetUrlPrefix","createProjectAssetURLModifier","base","assets","assetIdPrefix","url","request","relative","slash","id","assetPath","asset","registered","_a","isDependencyModuleSpecifier","specifier","packageJson","dependencies","isRecord","parsePackageJSON","text","json","parse","parseAssetsJSONManifest","validateSceneSource","path","document","readProjectGeneratorStates","generators","nodeIndex","node","componentId","component","updateProjectGeneratorState","generator","update","state","_e","_d","_c","_b","parsePackageJsonSettingsConfig","_project","config","deps","key","version","plugins","entry","match","params","spec","paramString","errors","error","separator","scripts","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"projectFormat.js","sources":["../src/runtime/projectFormat.ts"],"sourcesContent":["import {parse, ParseError} from 'jsonc-parser'\n\nexport const settingsKey = 'kite3d'\nexport const assetUrlPrefix = `/${settingsKey}/`\nexport const REMOVED_GENERATOR_GUIDANCE = 'Generator components were removed in Kite3D 0.19.0.'\n\nexport type JSONValue = string | number | boolean | null | JSONValue[] | {[key: string]: JSONValue}\nexport type ProjectPackageJSON = Record<string, JSONValue> & {mainScene: string}\n\nexport interface AssetsJSONManifest {\n files: Record<string, {\n path: string\n files?: Record<string, string>\n }>\n version: number\n}\n\nexport function createProjectAssetURLModifier(base: URL, assets: AssetsJSONManifest) {\n const assetIdPrefix = `${assetUrlPrefix}@`\n return (url: string): string => {\n if (url.startsWith(assetIdPrefix)) {\n const request = new URL(url, 'https://kite3d.invalid')\n const relative = decodeURIComponent(request.pathname.slice(assetIdPrefix.length))\n const slash = relative.indexOf('/')\n const id = slash < 0 ? relative : relative.slice(0, slash)\n const assetPath = slash < 0 ? '' : relative.slice(slash + 1)\n const asset = assets.files[id]\n if (!asset?.path) throw new Error(`Unknown asset id in URL: ${id}`)\n const registered = asset.files?.[assetPath]\n if (registered) return new URL(registered, base).href\n if (asset.files) throw new Error(`Unknown file for asset ${id}: ${assetPath}`)\n if (/^f\\.[^/]+$/i.test(assetPath)) return new URL(asset.path, base).href\n return new URL(assetPath, new URL(asset.path, base)).href\n }\n if (url.startsWith(assetUrlPrefix)) {\n return new URL(url.slice(assetUrlPrefix.length), base).href\n }\n return url\n }\n}\n\nexport interface ProjectDependency {\n key: string\n version: string\n url?: string\n}\n\nexport interface ExternalPlugin {\n import: string\n /** @default `default` */\n className?: string\n /** @default true */\n active?: boolean\n /** Constructor parameters. */\n params?: JSONValue[]\n}\n\nexport interface ExternalScript {\n import: string\n /** @default true */\n active?: boolean\n}\n\nexport interface ProjectViewerSettings {\n msaa?: boolean\n rgbm?: boolean\n zPrepass?: boolean\n renderScale?: number | 'auto'\n maxRenderScale?: number\n backgroundColor?: string | number | null\n modelRootScale?: number\n stencil?: boolean\n debug?: boolean\n tonemap?: boolean\n camera?: {\n type?: 'perspective' | 'orthographic'\n controlsMode?: string\n position?: [number, number, number]\n target?: [number, number, number]\n }\n maxHDRIntensity?: number\n powerPreference?: 'default' | 'high-performance' | 'low-power'\n}\n\nexport interface ProjectConfigSettings {\n plugins: ExternalPlugin[]\n scripts: ExternalScript[]\n dependencies: ProjectDependency[]\n viewer: ProjectViewerSettings\n}\n\nexport interface ProjectConfigSettingsJSON {\n plugins?: (ExternalPlugin | string)[]\n imports?: Record<string, string>\n scripts?: (ExternalScript | string)[]\n viewer?: ProjectViewerSettings\n}\n\n/** A configured script or plugin is package-backed only when it names a declared dependency exactly. */\nexport function isDependencyModuleSpecifier(\n specifier: string,\n packageJson: ProjectPackageJSON,\n): boolean {\n const dependencies = packageJson.dependencies\n return isRecord(dependencies) && Object.prototype.hasOwnProperty.call(dependencies, specifier)\n}\n\nexport function parsePackageJSON(text: string): ProjectPackageJSON {\n const json = parse(text) as unknown\n if (!json || typeof json !== 'object' || Array.isArray(json)) {\n throw new Error('Invalid package.json file: expected an object')\n }\n const packageJson = json as ProjectPackageJSON\n if (typeof packageJson.mainScene !== 'string' || !packageJson.mainScene.toLowerCase().endsWith('.gltf')) {\n throw new Error('package.json mainScene must name a text .gltf file')\n }\n return packageJson\n}\n\nexport function parseAssetsJSONManifest(text: string): AssetsJSONManifest {\n const json = parse(text) as AssetsJSONManifest\n\n if (json.files && typeof json.files !== 'object') {\n throw new Error('Invalid assets.json file: files should be an object')\n }\n if (json.version !== undefined && typeof json.version !== 'number') {\n throw new Error('Invalid assets.json file: version should be a number')\n }\n\n if (!json.files) json.files = {}\n if (!json.version) json.version = 1\n\n return json\n}\n\nexport function validateSceneSource(path: string, text: string): void {\n const document = JSON.parse(text) as {asset?: unknown}\n if (!document || typeof document !== 'object' || !document.asset) {\n throw new Error(`${path} is not a JSON glTF document`)\n }\n}\n\n/** Find nodes that still carry the component removed in Kite3D 0.19.0. */\nexport function findRemovedGeneratorNodes(text: string): Array<{nodeIndex: number, nodeName: string}> {\n const document = JSON.parse(text) as {\n nodes?: Array<{\n name?: unknown\n extras?: {EntityComponentPlugin?: Record<string, {type?: unknown}>}\n }>\n }\n const nodes: Array<{nodeIndex: number, nodeName: string}> = []\n for (const [nodeIndex, node] of (document.nodes || []).entries()) {\n const components = Object.values(node.extras?.EntityComponentPlugin || {})\n if (!components.some(({type}) => type === 'Generator')) continue\n nodes.push({\n nodeIndex,\n nodeName: typeof node.name === 'string' && node.name.trim() ? node.name : `Node ${nodeIndex}`,\n })\n }\n return nodes\n}\n\nexport function removedGeneratorMessage(nodeName: string): string {\n return `${REMOVED_GENERATOR_GUIDANCE} Convert ${nodeName} to asset files. See the guide's Scene asset management section.`\n}\n\nexport async function parsePackageJsonSettingsConfig(json: ProjectPackageJSON, _project?: unknown): Promise<ProjectConfigSettings> {\n const config = (json[settingsKey] ?? {}) as ProjectConfigSettingsJSON\n const dependencies: ProjectDependency[] = []\n const packageDependencies = json.dependencies && typeof json.dependencies === 'object' && !Array.isArray(json.dependencies)\n ? json.dependencies as Record<string, string>\n : {}\n const deps: Record<string, string> = {\n ...packageDependencies,\n }\n\n dependencies.push(...Object.entries(deps).map(([key, version]) => ({key, version})))\n\n if (config.imports) {\n dependencies.push(...Object.entries(config.imports).map(([key, url]) => ({\n key,\n url: !url.startsWith('@') ? url : undefined,\n version: url.startsWith('@') ? url.slice(1) : '',\n })))\n }\n\n const plugins = config.plugins?.map((entry) => {\n if (typeof entry !== 'string') return entry\n\n const match = entry.match(/\\((.*)\\)$/)\n let params: JSONValue[] | undefined\n let spec = entry\n\n if (match) {\n const paramString = match[1].trim()\n spec = entry.slice(0, match.index).trim()\n if (paramString) {\n try {\n const errors: ParseError[] = []\n params = parse(`[${paramString}]`, errors)\n if (!Array.isArray(params) || errors.length) {\n console.error(errors)\n throw new Error('Plugin params is not a valid array')\n }\n } catch (error) {\n console.error('Unable to parse plugin params, skipping plugin', entry, paramString, error)\n return null\n }\n }\n }\n\n const separator = spec.lastIndexOf(':')\n return {\n import: separator !== -1 ? spec.slice(0, separator) : spec,\n className: separator !== -1 ? spec.slice(separator + 1) : undefined,\n params,\n } satisfies ExternalPlugin\n }) || []\n\n const scripts = config.scripts?.map((entry) =>\n typeof entry === 'string' ? {import: entry} : entry\n ) || []\n\n return {\n plugins: plugins.filter(Boolean) as ExternalPlugin[],\n scripts,\n dependencies,\n viewer: config.viewer || {},\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n"],"names":["settingsKey","assetUrlPrefix","REMOVED_GENERATOR_GUIDANCE","createProjectAssetURLModifier","base","assets","assetIdPrefix","url","request","relative","slash","id","assetPath","asset","registered","_a","isDependencyModuleSpecifier","specifier","packageJson","dependencies","isRecord","parsePackageJSON","text","json","parse","parseAssetsJSONManifest","validateSceneSource","path","document","findRemovedGeneratorNodes","nodes","nodeIndex","node","type","removedGeneratorMessage","nodeName","parsePackageJsonSettingsConfig","_project","config","deps","key","version","plugins","entry","match","params","spec","paramString","errors","error","separator","scripts","_b","value"],"mappings":";AAEO,MAAMA,IAAc,UACdC,IAAiB,IAAID,CAAW,KAChCE,IAA6B;AAanC,SAASC,EAA8BC,GAAWC,GAA4B;AACjF,QAAMC,IAAgB,GAAGL,CAAc;AACvC,SAAO,CAACM,MAAwB;;AAC5B,QAAIA,EAAI,WAAWD,CAAa,GAAG;AAC/B,YAAME,IAAU,IAAI,IAAID,GAAK,wBAAwB,GAC/CE,IAAW,mBAAmBD,EAAQ,SAAS,MAAMF,EAAc,MAAM,CAAC,GAC1EI,IAAQD,EAAS,QAAQ,GAAG,GAC5BE,IAAKD,IAAQ,IAAID,IAAWA,EAAS,MAAM,GAAGC,CAAK,GACnDE,IAAYF,IAAQ,IAAI,KAAKD,EAAS,MAAMC,IAAQ,CAAC,GACrDG,IAAQR,EAAO,MAAMM,CAAE;AAC7B,UAAI,EAACE,KAAA,QAAAA,EAAO,MAAM,OAAM,IAAI,MAAM,4BAA4BF,CAAE,EAAE;AAClE,YAAMG,KAAaC,IAAAF,EAAM,UAAN,gBAAAE,EAAcH;AACjC,UAAIE,EAAY,QAAO,IAAI,IAAIA,GAAYV,CAAI,EAAE;AACjD,UAAIS,EAAM,MAAO,OAAM,IAAI,MAAM,0BAA0BF,CAAE,KAAKC,CAAS,EAAE;AAC7E,aAAI,cAAc,KAAKA,CAAS,IAAU,IAAI,IAAIC,EAAM,MAAMT,CAAI,EAAE,OAC7D,IAAI,IAAIQ,GAAW,IAAI,IAAIC,EAAM,MAAMT,CAAI,CAAC,EAAE;AAAA,IACzD;AACA,WAAIG,EAAI,WAAWN,CAAc,IACtB,IAAI,IAAIM,EAAI,MAAMN,EAAe,MAAM,GAAGG,CAAI,EAAE,OAEpDG;AAAA,EACX;AACJ;AA4DO,SAASS,EACZC,GACAC,GACO;AACP,QAAMC,IAAeD,EAAY;AACjC,SAAOE,EAASD,CAAY,KAAK,OAAO,UAAU,eAAe,KAAKA,GAAcF,CAAS;AACjG;AAEO,SAASI,EAAiBC,GAAkC;AAC/D,QAAMC,IAAOC,EAAMF,CAAI;AACvB,MAAI,CAACC,KAAQ,OAAOA,KAAS,YAAY,MAAM,QAAQA,CAAI;AACvD,UAAM,IAAI,MAAM,+CAA+C;AAEnE,QAAML,IAAcK;AACpB,MAAI,OAAOL,EAAY,aAAc,YAAY,CAACA,EAAY,UAAU,YAAA,EAAc,SAAS,OAAO;AAClG,UAAM,IAAI,MAAM,oDAAoD;AAExE,SAAOA;AACX;AAEO,SAASO,EAAwBH,GAAkC;AACtE,QAAMC,IAAOC,EAAMF,CAAI;AAEvB,MAAIC,EAAK,SAAS,OAAOA,EAAK,SAAU;AACpC,UAAM,IAAI,MAAM,qDAAqD;AAEzE,MAAIA,EAAK,YAAY,UAAa,OAAOA,EAAK,WAAY;AACtD,UAAM,IAAI,MAAM,sDAAsD;AAG1E,SAAKA,EAAK,UAAOA,EAAK,QAAQ,CAAA,IACzBA,EAAK,YAASA,EAAK,UAAU,IAE3BA;AACX;AAEO,SAASG,EAAoBC,GAAcL,GAAoB;AAClE,QAAMM,IAAW,KAAK,MAAMN,CAAI;AAChC,MAAI,CAACM,KAAY,OAAOA,KAAa,YAAY,CAACA,EAAS;AACvD,UAAM,IAAI,MAAM,GAAGD,CAAI,8BAA8B;AAE7D;AAGO,SAASE,EAA0BP,GAA4D;;AAClG,QAAMM,IAAW,KAAK,MAAMN,CAAI,GAM1BQ,IAAsD,CAAA;AAC5D,aAAW,CAACC,GAAWC,CAAI,MAAMJ,EAAS,SAAS,IAAI;AAEnD,IADmB,OAAO,SAAOb,IAAAiB,EAAK,WAAL,gBAAAjB,EAAa,0BAAyB,EAAE,EACzD,KAAK,CAAC,EAAC,MAAAkB,QAAUA,MAAS,WAAW,KACrDH,EAAM,KAAK;AAAA,MACP,WAAAC;AAAA,MACA,UAAU,OAAOC,EAAK,QAAS,YAAYA,EAAK,KAAK,KAAA,IAASA,EAAK,OAAO,QAAQD,CAAS;AAAA,IAAA,CAC9F;AAEL,SAAOD;AACX;AAEO,SAASI,EAAwBC,GAA0B;AAC9D,SAAO,GAAGjC,CAA0B,YAAYiC,CAAQ;AAC5D;AAEA,eAAsBC,EAA+Bb,GAA0Bc,GAAoD;;AAC/H,QAAMC,IAAUf,EAAKvB,CAAW,KAAK,CAAA,GAC/BmB,IAAoC,CAAA,GAIpCoB,IAA+B;AAAA,IACjC,GAJwBhB,EAAK,gBAAgB,OAAOA,EAAK,gBAAiB,YAAY,CAAC,MAAM,QAAQA,EAAK,YAAY,IACpHA,EAAK,eACL,CAAA;AAAA,EAEC;AAGP,EAAAJ,EAAa,KAAK,GAAG,OAAO,QAAQoB,CAAI,EAAE,IAAI,CAAC,CAACC,GAAKC,CAAO,OAAO,EAAC,KAAAD,GAAK,SAAAC,EAAA,EAAS,CAAC,GAE/EH,EAAO,WACPnB,EAAa,KAAK,GAAG,OAAO,QAAQmB,EAAO,OAAO,EAAE,IAAI,CAAC,CAACE,GAAKjC,CAAG,OAAO;AAAA,IACrE,KAAAiC;AAAA,IACA,KAAMjC,EAAI,WAAW,GAAG,IAAU,SAANA;AAAA,IAC5B,SAASA,EAAI,WAAW,GAAG,IAAIA,EAAI,MAAM,CAAC,IAAI;AAAA,EAAA,EAChD,CAAC;AAGP,QAAMmC,MAAU3B,IAAAuB,EAAO,YAAP,gBAAAvB,EAAgB,IAAI,CAAC4B,MAAU;AAC3C,QAAI,OAAOA,KAAU,SAAU,QAAOA;AAEtC,UAAMC,IAAQD,EAAM,MAAM,WAAW;AACrC,QAAIE,GACAC,IAAOH;AAEX,QAAIC,GAAO;AACP,YAAMG,IAAcH,EAAM,CAAC,EAAE,KAAA;AAE7B,UADAE,IAAOH,EAAM,MAAM,GAAGC,EAAM,KAAK,EAAE,KAAA,GAC/BG;AACA,YAAI;AACA,gBAAMC,IAAuB,CAAA;AAE7B,cADAH,IAASrB,EAAM,IAAIuB,CAAW,KAAKC,CAAM,GACrC,CAAC,MAAM,QAAQH,CAAM,KAAKG,EAAO;AACjC,0BAAQ,MAAMA,CAAM,GACd,IAAI,MAAM,oCAAoC;AAAA,QAE5D,SAASC,GAAO;AACZ,yBAAQ,MAAM,kDAAkDN,GAAOI,GAAaE,CAAK,GAClF;AAAA,QACX;AAAA,IAER;AAEA,UAAMC,IAAYJ,EAAK,YAAY,GAAG;AACtC,WAAO;AAAA,MACH,QAAQI,MAAc,KAAKJ,EAAK,MAAM,GAAGI,CAAS,IAAIJ;AAAA,MACtD,WAAWI,MAAc,KAAKJ,EAAK,MAAMI,IAAY,CAAC,IAAI;AAAA,MAC1D,QAAAL;AAAA,IAAA;AAAA,EAER,OAAM,CAAA,GAEAM,MAAUC,IAAAd,EAAO,YAAP,gBAAAc,EAAgB;AAAA,IAAI,CAACT,MACjC,OAAOA,KAAU,WAAW,EAAC,QAAQA,MAASA;AAAA,QAC7C,CAAA;AAEL,SAAO;AAAA,IACH,SAASD,EAAQ,OAAO,OAAO;AAAA,IAC/B,SAAAS;AAAA,IACA,cAAAhC;AAAA,IACA,QAAQmB,EAAO,UAAU,CAAA;AAAA,EAAC;AAElC;AAEA,SAASlB,EAASiC,GAAkD;AAChE,SAAO,EAAQA,KAAU,OAAOA,KAAU,YAAY,CAAC,MAAM,QAAQA,CAAK;AAC9E;"}
|
|
@@ -25,5 +25,5 @@ export interface CreatedGame {
|
|
|
25
25
|
dispose(): RuntimeCleanupReport;
|
|
26
26
|
}
|
|
27
27
|
export declare function createGame(options: CreateGameOptions): Promise<CreatedGame>;
|
|
28
|
-
/** Load the saved project
|
|
28
|
+
/** Load the saved project without starting components, physics, the timeline, or main.js. */
|
|
29
29
|
export declare function createStoppedGame(options: CreateGameOptions): Promise<CreatedGame>;
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -6,8 +6,6 @@ export * from './migrations.ts';
|
|
|
6
6
|
export { RuntimeNestedAssetLoader } from './nestedAssets.ts';
|
|
7
7
|
export { registerScripts, walkScriptExports } from '../scripts.ts';
|
|
8
8
|
export { HtmlUiComponent } from '../plugins/HtmlUiComponent.ts';
|
|
9
|
-
export { GeneratorComponent, markGenerated, removeGeneratedChildren, resolveGeneratorModule, runGenerator } from '../plugins/GeneratorComponent.ts';
|
|
10
|
-
export type { GeneratorContext, GeneratorModule, GeneratorParams, GeneratorViewerOptions, RunGeneratorOptions } from '../plugins/GeneratorComponent.ts';
|
|
11
9
|
export { CannonPhysicsPlugin } from '../plugins/cannon/CannonPhysicsPlugin.ts';
|
|
12
10
|
export { serializeSceneGltf, serializeSceneGltfDocument } from '../sceneSerialization.ts';
|
|
13
11
|
export type { SerializeSceneGltfOptions, SerializedSceneFile, SerializedSceneGltf } from '../sceneSerialization.ts';
|
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import { GeneratorParamSchema } from '../generatorParams.ts';
|
|
2
1
|
export declare const settingsKey = "kite3d";
|
|
3
2
|
export declare const assetUrlPrefix = "/kite3d/";
|
|
3
|
+
export declare const REMOVED_GENERATOR_GUIDANCE = "Generator components were removed in Kite3D 0.19.0.";
|
|
4
4
|
export type JSONValue = string | number | boolean | null | JSONValue[] | {
|
|
5
5
|
[key: string]: JSONValue;
|
|
6
6
|
};
|
|
7
7
|
export type ProjectPackageJSON = Record<string, JSONValue> & {
|
|
8
8
|
mainScene: string;
|
|
9
9
|
};
|
|
10
|
-
export interface ProjectGeneratorState {
|
|
11
|
-
componentId: string;
|
|
12
|
-
module: string;
|
|
13
|
-
nodeIndex: number;
|
|
14
|
-
nodeName: string;
|
|
15
|
-
params: Record<string, unknown>;
|
|
16
|
-
schema: GeneratorParamSchema;
|
|
17
|
-
}
|
|
18
10
|
export interface AssetsJSONManifest {
|
|
19
11
|
files: Record<string, {
|
|
20
12
|
path: string;
|
|
@@ -79,9 +71,10 @@ export declare function isDependencyModuleSpecifier(specifier: string, packageJs
|
|
|
79
71
|
export declare function parsePackageJSON(text: string): ProjectPackageJSON;
|
|
80
72
|
export declare function parseAssetsJSONManifest(text: string): AssetsJSONManifest;
|
|
81
73
|
export declare function validateSceneSource(path: string, text: string): void;
|
|
82
|
-
|
|
83
|
-
export declare function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
74
|
+
/** Find nodes that still carry the component removed in Kite3D 0.19.0. */
|
|
75
|
+
export declare function findRemovedGeneratorNodes(text: string): Array<{
|
|
76
|
+
nodeIndex: number;
|
|
77
|
+
nodeName: string;
|
|
78
|
+
}>;
|
|
79
|
+
export declare function removedGeneratorMessage(nodeName: string): string;
|
|
87
80
|
export declare function parsePackageJsonSettingsConfig(json: ProjectPackageJSON, _project?: unknown): Promise<ProjectConfigSettings>;
|