worldorbit 2.5.1-5.2

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.
Files changed (117) hide show
  1. package/LICENSE.md +5 -0
  2. package/README.md +468 -0
  3. package/dist/browser/core/dist/index.js +4009 -0
  4. package/dist/browser/markdown/dist/index.js +3951 -0
  5. package/dist/browser/viewer/dist/index.js +5981 -0
  6. package/dist/constants.d.ts +8 -0
  7. package/dist/constants.js +84 -0
  8. package/dist/errors.d.ts +7 -0
  9. package/dist/errors.js +16 -0
  10. package/dist/index.d.ts +18 -0
  11. package/dist/index.js +25 -0
  12. package/dist/normalize.d.ts +2 -0
  13. package/dist/normalize.js +243 -0
  14. package/dist/parse.d.ts +2 -0
  15. package/dist/parse.js +126 -0
  16. package/dist/render.d.ts +6 -0
  17. package/dist/render.js +683 -0
  18. package/dist/tokenize.d.ts +4 -0
  19. package/dist/tokenize.js +68 -0
  20. package/dist/types.d.ts +208 -0
  21. package/dist/types.js +1 -0
  22. package/dist/unpkg/core/dist/index.js +4081 -0
  23. package/dist/unpkg/markdown/dist/index.js +3979 -0
  24. package/dist/unpkg/viewer/dist/index.js +6038 -0
  25. package/dist/unpkg/worldorbit-core.min.js +12 -0
  26. package/dist/unpkg/worldorbit-markdown.min.js +95 -0
  27. package/dist/unpkg/worldorbit-viewer.min.js +251 -0
  28. package/dist/unpkg/worldorbit.d.ts +2 -0
  29. package/dist/unpkg/worldorbit.esm.js +2 -0
  30. package/dist/unpkg/worldorbit.js +8524 -0
  31. package/dist/unpkg/worldorbit.min.js +255 -0
  32. package/dist/validate.d.ts +2 -0
  33. package/dist/validate.js +31 -0
  34. package/dist/viewer-state.d.ts +16 -0
  35. package/dist/viewer-state.js +130 -0
  36. package/dist/viewer.d.ts +2 -0
  37. package/dist/viewer.js +434 -0
  38. package/package.json +68 -0
  39. package/packages/core/README.md +17 -0
  40. package/packages/core/dist/atlas-edit.d.ts +11 -0
  41. package/packages/core/dist/atlas-edit.js +273 -0
  42. package/packages/core/dist/atlas-utils.d.ts +22 -0
  43. package/packages/core/dist/atlas-utils.js +189 -0
  44. package/packages/core/dist/atlas-validate.d.ts +2 -0
  45. package/packages/core/dist/atlas-validate.js +285 -0
  46. package/packages/core/dist/diagnostics.d.ts +10 -0
  47. package/packages/core/dist/diagnostics.js +109 -0
  48. package/packages/core/dist/draft-parse.d.ts +3 -0
  49. package/packages/core/dist/draft-parse.js +1275 -0
  50. package/packages/core/dist/draft.d.ts +18 -0
  51. package/packages/core/dist/draft.js +387 -0
  52. package/packages/core/dist/errors.d.ts +7 -0
  53. package/packages/core/dist/errors.js +16 -0
  54. package/packages/core/dist/format.d.ts +4 -0
  55. package/packages/core/dist/format.js +520 -0
  56. package/packages/core/dist/index.d.ts +28 -0
  57. package/packages/core/dist/index.js +44 -0
  58. package/packages/core/dist/load.d.ts +4 -0
  59. package/packages/core/dist/load.js +175 -0
  60. package/packages/core/dist/markdown.d.ts +2 -0
  61. package/packages/core/dist/markdown.js +37 -0
  62. package/packages/core/dist/normalize.d.ts +2 -0
  63. package/packages/core/dist/normalize.js +311 -0
  64. package/packages/core/dist/parse.d.ts +2 -0
  65. package/packages/core/dist/parse.js +133 -0
  66. package/packages/core/dist/scene.d.ts +3 -0
  67. package/packages/core/dist/scene.js +1565 -0
  68. package/packages/core/dist/schema.d.ts +8 -0
  69. package/packages/core/dist/schema.js +298 -0
  70. package/packages/core/dist/tokenize.d.ts +4 -0
  71. package/packages/core/dist/tokenize.js +68 -0
  72. package/packages/core/dist/types.d.ts +476 -0
  73. package/packages/core/dist/types.js +1 -0
  74. package/packages/core/dist/validate.d.ts +2 -0
  75. package/packages/core/dist/validate.js +56 -0
  76. package/packages/editor/dist/editor.d.ts +2 -0
  77. package/packages/editor/dist/editor.js +3042 -0
  78. package/packages/editor/dist/index.d.ts +2 -0
  79. package/packages/editor/dist/index.js +1 -0
  80. package/packages/editor/dist/types.d.ts +53 -0
  81. package/packages/editor/dist/types.js +1 -0
  82. package/packages/markdown/README.md +9 -0
  83. package/packages/markdown/dist/html.d.ts +3 -0
  84. package/packages/markdown/dist/html.js +57 -0
  85. package/packages/markdown/dist/index.d.ts +4 -0
  86. package/packages/markdown/dist/index.js +3 -0
  87. package/packages/markdown/dist/rehype.d.ts +10 -0
  88. package/packages/markdown/dist/rehype.js +49 -0
  89. package/packages/markdown/dist/remark.d.ts +9 -0
  90. package/packages/markdown/dist/remark.js +28 -0
  91. package/packages/markdown/dist/types.d.ts +11 -0
  92. package/packages/markdown/dist/types.js +1 -0
  93. package/packages/viewer/README.md +13 -0
  94. package/packages/viewer/dist/atlas-state.d.ts +12 -0
  95. package/packages/viewer/dist/atlas-state.js +257 -0
  96. package/packages/viewer/dist/atlas-viewer.d.ts +2 -0
  97. package/packages/viewer/dist/atlas-viewer.js +482 -0
  98. package/packages/viewer/dist/custom-element.d.ts +1 -0
  99. package/packages/viewer/dist/custom-element.js +64 -0
  100. package/packages/viewer/dist/embed.d.ts +20 -0
  101. package/packages/viewer/dist/embed.js +138 -0
  102. package/packages/viewer/dist/index.d.ts +9 -0
  103. package/packages/viewer/dist/index.js +8 -0
  104. package/packages/viewer/dist/minimap.d.ts +3 -0
  105. package/packages/viewer/dist/minimap.js +63 -0
  106. package/packages/viewer/dist/render.d.ts +6 -0
  107. package/packages/viewer/dist/render.js +641 -0
  108. package/packages/viewer/dist/theme.d.ts +4 -0
  109. package/packages/viewer/dist/theme.js +102 -0
  110. package/packages/viewer/dist/tooltip.d.ts +3 -0
  111. package/packages/viewer/dist/tooltip.js +189 -0
  112. package/packages/viewer/dist/types.d.ts +263 -0
  113. package/packages/viewer/dist/types.js +1 -0
  114. package/packages/viewer/dist/viewer-state.d.ts +19 -0
  115. package/packages/viewer/dist/viewer-state.js +162 -0
  116. package/packages/viewer/dist/viewer.d.ts +2 -0
  117. package/packages/viewer/dist/viewer.js +1175 -0
@@ -0,0 +1,18 @@
1
+ import type { SceneRenderOptions, WorldOrbitAtlasDocument, WorldOrbitAtlasSystem, WorldOrbitDiagnostic, WorldOrbitDocument, WorldOrbitObject } from "./types.js";
2
+ interface UpgradeOptions extends Pick<SceneRenderOptions, "preset" | "projection"> {
3
+ }
4
+ export declare function upgradeDocumentToV2(document: WorldOrbitDocument, options?: UpgradeOptions): WorldOrbitAtlasDocument;
5
+ export declare function upgradeDocumentToDraftV2(document: WorldOrbitDocument, options?: UpgradeOptions): {
6
+ version: "2.0-draft";
7
+ schemaVersion: "2.0-draft";
8
+ format: "worldorbit";
9
+ sourceVersion: import("./types.js").WorldOrbitDocumentVersion;
10
+ system: WorldOrbitAtlasSystem | null;
11
+ groups: import("./types.js").WorldOrbitGroup[];
12
+ relations: import("./types.js").WorldOrbitRelation[];
13
+ objects: WorldOrbitObject[];
14
+ diagnostics: WorldOrbitDiagnostic[];
15
+ };
16
+ export declare function materializeAtlasDocument(document: WorldOrbitAtlasDocument): WorldOrbitDocument;
17
+ export declare function materializeDraftDocument(document: WorldOrbitAtlasDocument): WorldOrbitDocument;
18
+ export {};
@@ -0,0 +1,387 @@
1
+ import { renderDocumentToScene } from "./scene.js";
2
+ export function upgradeDocumentToV2(document, options = {}) {
3
+ const scene = renderDocumentToScene(document, options);
4
+ const diagnostics = [];
5
+ const atlasMetadata = collectAtlasMetadata(document, diagnostics);
6
+ const annotations = collectDraftAnnotations(document, diagnostics);
7
+ const defaults = createDraftDefaults(document, scene.renderPreset ?? options.preset ?? null, scene.projection);
8
+ const system = document.system
9
+ ? createDraftSystem(document, defaults, atlasMetadata, annotations, diagnostics, scene.renderPreset ?? options.preset ?? null)
10
+ : null;
11
+ if (scene.viewpoints.some((viewpoint) => !viewpoint.generated)) {
12
+ diagnostics.push({
13
+ code: "upgrade.viewpoints.structured",
14
+ severity: "info",
15
+ source: "upgrade",
16
+ message: `Promoted ${scene.viewpoints.filter((viewpoint) => !viewpoint.generated).length} document-defined viewpoint(s) into the 2.0 atlas section.`,
17
+ });
18
+ }
19
+ return {
20
+ format: "worldorbit",
21
+ version: "2.0",
22
+ schemaVersion: "2.0",
23
+ sourceVersion: document.version,
24
+ system,
25
+ groups: structuredClone(document.groups ?? []),
26
+ relations: structuredClone(document.relations ?? []),
27
+ objects: document.objects.map(cloneWorldOrbitObject),
28
+ diagnostics,
29
+ };
30
+ }
31
+ export function upgradeDocumentToDraftV2(document, options = {}) {
32
+ return convertAtlasDocumentToLegacyDraft(upgradeDocumentToV2(document, options));
33
+ }
34
+ export function materializeAtlasDocument(document) {
35
+ const system = document.system
36
+ ? {
37
+ type: "system",
38
+ id: document.system.id,
39
+ title: document.system.title,
40
+ description: document.system.description,
41
+ epoch: document.system.epoch,
42
+ referencePlane: document.system.referencePlane,
43
+ properties: materializeDraftSystemProperties(document.system),
44
+ info: materializeDraftSystemInfo(document.system),
45
+ }
46
+ : null;
47
+ return {
48
+ format: "worldorbit",
49
+ version: "1.0",
50
+ schemaVersion: document.version,
51
+ system,
52
+ groups: structuredClone(document.groups ?? []),
53
+ relations: structuredClone(document.relations ?? []),
54
+ objects: document.objects.map(cloneWorldOrbitObject),
55
+ };
56
+ }
57
+ export function materializeDraftDocument(document) {
58
+ return materializeAtlasDocument(document);
59
+ }
60
+ function createDraftSystem(document, defaults, atlasMetadata, annotations, diagnostics, preset) {
61
+ const scene = renderDocumentToScene(document, {
62
+ preset: preset ?? undefined,
63
+ projection: defaults.view,
64
+ });
65
+ return {
66
+ type: "system",
67
+ id: document.system?.id ?? "WorldOrbit",
68
+ title: document.system?.title ?? (typeof document.system?.properties.title === "string"
69
+ ? document.system.properties.title
70
+ : null),
71
+ description: document.system?.description ?? null,
72
+ epoch: document.system?.epoch ?? null,
73
+ referencePlane: document.system?.referencePlane ?? null,
74
+ defaults,
75
+ atlasMetadata,
76
+ viewpoints: scene.viewpoints.map(mapSceneViewpointToDraftViewpoint),
77
+ annotations,
78
+ };
79
+ }
80
+ function createDraftDefaults(document, preset, projection) {
81
+ return {
82
+ view: typeof document.system?.properties.view === "string" &&
83
+ document.system.properties.view.toLowerCase() === "topdown"
84
+ ? "topdown"
85
+ : projection,
86
+ scale: typeof document.system?.properties.scale === "string"
87
+ ? document.system.properties.scale
88
+ : null,
89
+ units: typeof document.system?.properties.units === "string"
90
+ ? document.system.properties.units
91
+ : null,
92
+ preset,
93
+ theme: typeof document.system?.info["atlas.theme"] === "string"
94
+ ? document.system.info["atlas.theme"]
95
+ : null,
96
+ };
97
+ }
98
+ function collectAtlasMetadata(document, diagnostics) {
99
+ const metadata = {};
100
+ for (const [key, value] of Object.entries(document.system?.info ?? {})) {
101
+ if (key.startsWith("viewpoint.") || key.startsWith("annotation.")) {
102
+ continue;
103
+ }
104
+ metadata[key] = value;
105
+ }
106
+ const metadataKeys = Object.keys(metadata);
107
+ if (metadataKeys.length > 0) {
108
+ diagnostics.push({
109
+ code: "upgrade.atlasMetadata.preserved",
110
+ severity: "warning",
111
+ source: "upgrade",
112
+ message: `Preserved ${metadataKeys.length} system info entr${metadataKeys.length === 1 ? "y" : "ies"} as atlas metadata in the 2.0 atlas document.`,
113
+ });
114
+ }
115
+ return metadata;
116
+ }
117
+ function collectDraftAnnotations(document, diagnostics) {
118
+ const drafts = new Map();
119
+ for (const [key, value] of Object.entries(document.system?.info ?? {})) {
120
+ if (!key.startsWith("annotation.")) {
121
+ continue;
122
+ }
123
+ const [, rawId, ...fieldParts] = key.split(".");
124
+ if (!rawId || fieldParts.length === 0) {
125
+ continue;
126
+ }
127
+ const id = normalizeIdentifier(rawId);
128
+ if (!id) {
129
+ continue;
130
+ }
131
+ const draft = drafts.get(id) ?? { id };
132
+ const field = fieldParts.join(".").toLowerCase();
133
+ switch (field) {
134
+ case "label":
135
+ draft.label = value;
136
+ break;
137
+ case "target":
138
+ case "object":
139
+ draft.targetObjectId = value.trim() || null;
140
+ break;
141
+ case "body":
142
+ case "text":
143
+ case "description":
144
+ draft.body = value;
145
+ break;
146
+ case "tags":
147
+ draft.tags = splitList(value);
148
+ break;
149
+ }
150
+ drafts.set(id, draft);
151
+ }
152
+ for (const object of document.objects) {
153
+ const description = object.info.description;
154
+ if (!description) {
155
+ continue;
156
+ }
157
+ const annotationId = normalizeIdentifier(`${object.id}-notes`);
158
+ if (drafts.has(annotationId)) {
159
+ continue;
160
+ }
161
+ drafts.set(annotationId, {
162
+ id: annotationId,
163
+ label: `${object.id} Notes`,
164
+ targetObjectId: object.id,
165
+ body: description,
166
+ tags: Array.isArray(object.properties.tags)
167
+ ? object.properties.tags.filter((entry) => typeof entry === "string")
168
+ : [],
169
+ });
170
+ diagnostics.push({
171
+ code: "upgrade.annotation.objectDescription",
172
+ severity: "info",
173
+ source: "upgrade",
174
+ message: `Lifted ${object.id}.info.description into structured atlas annotation "${annotationId}".`,
175
+ objectId: object.id,
176
+ field: "description",
177
+ });
178
+ }
179
+ return [...drafts.values()]
180
+ .filter((draft) => draft.body || draft.label)
181
+ .map((draft) => ({
182
+ id: draft.id,
183
+ label: draft.label ?? humanizeIdentifier(draft.id),
184
+ targetObjectId: draft.targetObjectId ?? null,
185
+ body: draft.body ?? "",
186
+ tags: draft.tags ?? [],
187
+ sourceObjectId: draft.targetObjectId ?? null,
188
+ }))
189
+ .sort((left, right) => left.label.localeCompare(right.label));
190
+ }
191
+ function mapSceneViewpointToDraftViewpoint(viewpoint) {
192
+ return {
193
+ id: viewpoint.id,
194
+ label: viewpoint.label,
195
+ summary: viewpoint.summary,
196
+ focusObjectId: viewpoint.objectId,
197
+ selectedObjectId: viewpoint.selectedObjectId,
198
+ projection: viewpoint.projection,
199
+ preset: viewpoint.preset,
200
+ zoom: viewpoint.scale,
201
+ rotationDeg: viewpoint.rotationDeg,
202
+ layers: { ...viewpoint.layers },
203
+ filter: viewpoint.filter
204
+ ? {
205
+ query: viewpoint.filter.query,
206
+ objectTypes: [...viewpoint.filter.objectTypes],
207
+ tags: [...viewpoint.filter.tags],
208
+ groupIds: [...viewpoint.filter.groupIds],
209
+ }
210
+ : null,
211
+ };
212
+ }
213
+ function cloneWorldOrbitObject(object) {
214
+ return {
215
+ ...object,
216
+ groups: object.groups ? [...object.groups] : undefined,
217
+ resonance: object.resonance ? { ...object.resonance } : object.resonance,
218
+ renderHints: object.renderHints ? { ...object.renderHints } : object.renderHints,
219
+ deriveRules: object.deriveRules ? object.deriveRules.map((rule) => ({ ...rule })) : undefined,
220
+ validationRules: object.validationRules
221
+ ? object.validationRules.map((rule) => ({ ...rule }))
222
+ : undefined,
223
+ lockedFields: object.lockedFields ? [...object.lockedFields] : undefined,
224
+ tolerances: object.tolerances
225
+ ? object.tolerances.map((entry) => ({
226
+ field: entry.field,
227
+ value: entry.value && typeof entry.value === "object" && "value" in entry.value
228
+ ? { value: entry.value.value, unit: entry.value.unit }
229
+ : Array.isArray(entry.value)
230
+ ? [...entry.value]
231
+ : entry.value,
232
+ }))
233
+ : undefined,
234
+ typedBlocks: object.typedBlocks
235
+ ? Object.fromEntries(Object.entries(object.typedBlocks).map(([key, block]) => [key, { ...(block ?? {}) }]))
236
+ : undefined,
237
+ properties: cloneProperties(object.properties),
238
+ placement: object.placement ? structuredClone(object.placement) : null,
239
+ info: { ...object.info },
240
+ };
241
+ }
242
+ function cloneProperties(properties) {
243
+ const next = {};
244
+ for (const [key, value] of Object.entries(properties)) {
245
+ if (Array.isArray(value)) {
246
+ next[key] = [...value];
247
+ continue;
248
+ }
249
+ if (value && typeof value === "object" && "value" in value) {
250
+ next[key] = {
251
+ value: value.value,
252
+ unit: value.unit,
253
+ };
254
+ continue;
255
+ }
256
+ next[key] = value;
257
+ }
258
+ return next;
259
+ }
260
+ function splitList(value) {
261
+ return value
262
+ .split(/[\s,]+/)
263
+ .map((entry) => entry.trim())
264
+ .filter(Boolean);
265
+ }
266
+ function normalizeIdentifier(value) {
267
+ return value
268
+ .trim()
269
+ .toLowerCase()
270
+ .replace(/[^a-z0-9_-]+/g, "-")
271
+ .replace(/^-+|-+$/g, "");
272
+ }
273
+ function humanizeIdentifier(value) {
274
+ return value
275
+ .split(/[-_]+/)
276
+ .filter(Boolean)
277
+ .map((segment) => segment[0].toUpperCase() + segment.slice(1))
278
+ .join(" ");
279
+ }
280
+ function materializeDraftSystemProperties(system) {
281
+ const properties = {};
282
+ if (system.title) {
283
+ properties.title = system.title;
284
+ }
285
+ properties.view = system.defaults.view;
286
+ if (system.defaults.scale) {
287
+ properties.scale = system.defaults.scale;
288
+ }
289
+ if (system.defaults.units) {
290
+ properties.units = system.defaults.units;
291
+ }
292
+ if (system.description) {
293
+ properties.description = system.description;
294
+ }
295
+ if (system.epoch) {
296
+ properties.epoch = system.epoch;
297
+ }
298
+ if (system.referencePlane) {
299
+ properties.referencePlane = system.referencePlane;
300
+ }
301
+ return properties;
302
+ }
303
+ function materializeDraftSystemInfo(system) {
304
+ const info = {
305
+ ...system.atlasMetadata,
306
+ };
307
+ if (system.defaults.theme) {
308
+ info["atlas.theme"] = system.defaults.theme;
309
+ }
310
+ for (const viewpoint of system.viewpoints) {
311
+ const prefix = `viewpoint.${viewpoint.id}`;
312
+ info[`${prefix}.label`] = viewpoint.label;
313
+ if (viewpoint.summary) {
314
+ info[`${prefix}.summary`] = viewpoint.summary;
315
+ }
316
+ if (viewpoint.focusObjectId) {
317
+ info[`${prefix}.focus`] = viewpoint.focusObjectId;
318
+ }
319
+ if (viewpoint.selectedObjectId) {
320
+ info[`${prefix}.select`] = viewpoint.selectedObjectId;
321
+ }
322
+ if (viewpoint.projection) {
323
+ info[`${prefix}.projection`] = viewpoint.projection;
324
+ }
325
+ if (viewpoint.preset) {
326
+ info[`${prefix}.preset`] = viewpoint.preset;
327
+ }
328
+ if (viewpoint.zoom !== null) {
329
+ info[`${prefix}.zoom`] = String(viewpoint.zoom);
330
+ }
331
+ if (viewpoint.rotationDeg !== 0) {
332
+ info[`${prefix}.rotation`] = String(viewpoint.rotationDeg);
333
+ }
334
+ const serializedLayers = serializeViewpointLayers(viewpoint.layers);
335
+ if (serializedLayers) {
336
+ info[`${prefix}.layers`] = serializedLayers;
337
+ }
338
+ if (viewpoint.filter?.query) {
339
+ info[`${prefix}.query`] = viewpoint.filter.query;
340
+ }
341
+ if ((viewpoint.filter?.objectTypes.length ?? 0) > 0) {
342
+ info[`${prefix}.types`] = viewpoint.filter?.objectTypes.join(" ") ?? "";
343
+ }
344
+ if ((viewpoint.filter?.tags.length ?? 0) > 0) {
345
+ info[`${prefix}.tags`] = viewpoint.filter?.tags.join(" ") ?? "";
346
+ }
347
+ if ((viewpoint.filter?.groupIds.length ?? 0) > 0) {
348
+ info[`${prefix}.groups`] = viewpoint.filter?.groupIds.join(" ") ?? "";
349
+ }
350
+ }
351
+ for (const annotation of system.annotations) {
352
+ const prefix = `annotation.${annotation.id}`;
353
+ info[`${prefix}.label`] = annotation.label;
354
+ if (annotation.targetObjectId) {
355
+ info[`${prefix}.target`] = annotation.targetObjectId;
356
+ }
357
+ info[`${prefix}.body`] = annotation.body;
358
+ if (annotation.tags.length > 0) {
359
+ info[`${prefix}.tags`] = annotation.tags.join(" ");
360
+ }
361
+ if (annotation.sourceObjectId) {
362
+ info[`${prefix}.source`] = annotation.sourceObjectId;
363
+ }
364
+ }
365
+ return info;
366
+ }
367
+ function serializeViewpointLayers(layers) {
368
+ const tokens = [];
369
+ const orbitFront = layers["orbits-front"];
370
+ const orbitBack = layers["orbits-back"];
371
+ if (orbitFront !== undefined || orbitBack !== undefined) {
372
+ tokens.push(orbitFront !== false || orbitBack !== false ? "orbits" : "-orbits");
373
+ }
374
+ for (const key of ["background", "guides", "relations", "objects", "labels", "metadata"]) {
375
+ if (layers[key] !== undefined) {
376
+ tokens.push(layers[key] ? key : `-${key}`);
377
+ }
378
+ }
379
+ return tokens.join(" ");
380
+ }
381
+ function convertAtlasDocumentToLegacyDraft(document) {
382
+ return {
383
+ ...document,
384
+ version: "2.0-draft",
385
+ schemaVersion: "2.0-draft",
386
+ };
387
+ }
@@ -0,0 +1,7 @@
1
+ import type { AstSourceLocation } from "./types.js";
2
+ export declare class WorldOrbitError extends Error {
3
+ readonly line?: number;
4
+ readonly column?: number;
5
+ constructor(message: string, line?: number, column?: number);
6
+ static fromLocation(message: string, location?: AstSourceLocation): WorldOrbitError;
7
+ }
@@ -0,0 +1,16 @@
1
+ export class WorldOrbitError extends Error {
2
+ line;
3
+ column;
4
+ constructor(message, line, column) {
5
+ const locationSuffix = line === undefined
6
+ ? ""
7
+ : ` (line ${line}${column === undefined ? "" : `, column ${column}`})`;
8
+ super(`${message}${locationSuffix}`);
9
+ this.name = "WorldOrbitError";
10
+ this.line = line;
11
+ this.column = column;
12
+ }
13
+ static fromLocation(message, location) {
14
+ return new WorldOrbitError(message, location?.line, location?.column);
15
+ }
16
+ }
@@ -0,0 +1,4 @@
1
+ import type { FormattableWorldOrbitDocument, FormatDocumentOptions, WorldOrbitAtlasDocument, WorldOrbitDraftDocument } from "./types.js";
2
+ export declare function formatDocument(document: FormattableWorldOrbitDocument, options?: FormatDocumentOptions): string;
3
+ export declare function formatAtlasDocument(document: WorldOrbitAtlasDocument): string;
4
+ export declare function formatDraftDocument(document: WorldOrbitAtlasDocument | WorldOrbitDraftDocument): string;