@openfairygui/functions 0.2.0-alpha.2 → 0.2.0-alpha.21

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 (54) hide show
  1. package/README.md +48 -6
  2. package/dist/atlas-C6tbl7nn.d.ts +193 -0
  3. package/dist/atlas-CHsu2Y8i.d.cts +193 -0
  4. package/dist/index.cjs +16 -3603
  5. package/dist/index.d.cts +5 -294
  6. package/dist/index.d.ts +5 -294
  7. package/dist/index.js +3 -3594
  8. package/dist/node.cjs +256 -0
  9. package/dist/node.d.cts +36 -0
  10. package/dist/node.d.ts +36 -0
  11. package/dist/node.js +254 -0
  12. package/dist/publish-BJ_eelME.js +3267 -0
  13. package/dist/publish-xFWT9Slz.cjs +3338 -0
  14. package/dist/restore-BW2xacB3.cjs +936 -0
  15. package/dist/restore-BeWaJNjR.d.cts +288 -0
  16. package/dist/restore-Clk62n0O.js +931 -0
  17. package/dist/restore-Dh0-Nvms.d.ts +288 -0
  18. package/dist/uam-transaction.cjs +44 -1
  19. package/dist/uam-transaction.d.cts +16 -1
  20. package/dist/uam-transaction.d.ts +16 -1
  21. package/dist/uam-transaction.js +44 -1
  22. package/dist/web.cjs +274 -0
  23. package/dist/web.d.cts +41 -0
  24. package/dist/web.d.ts +41 -0
  25. package/dist/web.js +273 -0
  26. package/package.json +28 -4
  27. package/src/adapters/node/plugins.ts +82 -0
  28. package/src/adapters/node/publish.ts +130 -0
  29. package/src/adapters/node/restore.ts +187 -0
  30. package/src/adapters/web/publish.ts +159 -0
  31. package/src/adapters/web/raster.ts +251 -0
  32. package/src/atlas/font.ts +95 -0
  33. package/src/atlas/inputs.ts +515 -0
  34. package/src/atlas/jta.ts +211 -0
  35. package/src/atlas/packing.ts +767 -0
  36. package/src/atlas.ts +116 -1221
  37. package/src/codegen.ts +106 -67
  38. package/src/index.ts +43 -3
  39. package/src/node.ts +8 -0
  40. package/src/plugins/types.ts +56 -0
  41. package/src/publish/contracts.ts +80 -0
  42. package/src/publish/external-resources.ts +117 -0
  43. package/src/publish/options.ts +180 -0
  44. package/src/publish/package-context.ts +608 -0
  45. package/src/publish/resource-references.ts +210 -0
  46. package/src/publish.ts +290 -968
  47. package/src/restore-internals/font.ts +100 -0
  48. package/src/restore-internals/movie-clip.ts +104 -0
  49. package/src/restore-internals/output-transaction.ts +164 -0
  50. package/src/restore.ts +112 -311
  51. package/src/shared-types.ts +4 -8
  52. package/src/uam-transaction.ts +68 -0
  53. package/src/utils.ts +28 -0
  54. package/src/web.ts +11 -0
@@ -0,0 +1,210 @@
1
+ import type { Component, Package } from '@openfairygui/core';
2
+ import type { HasOptionalFont } from '../shared-types.js';
3
+
4
+ interface ReferenceItem {
5
+ icon?: string | null;
6
+ url?: string | null;
7
+ }
8
+
9
+ interface ReferenceGear {
10
+ getValues?(): string;
11
+ getDefaultValue?(): unknown;
12
+ }
13
+
14
+ interface ReferenceTransitionItem {
15
+ getStartValue?(): unknown;
16
+ getEndValue?(): unknown;
17
+ }
18
+
19
+ interface ReferenceTransition {
20
+ listItems?(): ReferenceTransitionItem[];
21
+ }
22
+
23
+ interface ReferenceChild extends HasOptionalFont {
24
+ getPackageId?(): string;
25
+ getSrc?(): string;
26
+ getUrl?(): string;
27
+ getInstanceSound?(): string;
28
+ getDefaultItem?(): string;
29
+ getIcon?(): string;
30
+ getSelectedIcon?(): string;
31
+ getDropdown?(): string;
32
+ getSound?(): string;
33
+ getText?(): string;
34
+ getInstanceIcon?(): string;
35
+ getInstanceSelectedIcon?(): string;
36
+ getVtScrollBarRes?(): string;
37
+ getHzScrollBarRes?(): string;
38
+ getHeaderRes?(): string;
39
+ getFooterRes?(): string;
40
+ getInstanceComboItems?(): Array<{ icon: string | null }>;
41
+ getListItems?(): ReferenceItem[];
42
+ listGears?(): ReferenceGear[];
43
+ }
44
+
45
+ interface ReferenceComponent {
46
+ listChildren(): ReferenceChild[];
47
+ getDropdown?(): string;
48
+ getHeaderRes?(): string;
49
+ getFooterRes?(): string;
50
+ getVtScrollBarRes?(): string;
51
+ getHzScrollBarRes?(): string;
52
+ getSound?(): string;
53
+ getFont?(): string | string[] | null | undefined;
54
+ listTransitions?(): ReferenceTransition[];
55
+ }
56
+
57
+ export interface PackageResourceReferences {
58
+ localResourceIds: Set<string>;
59
+ packageIds: Set<string>;
60
+ }
61
+
62
+ function addReference(
63
+ target: PackageResourceReferences,
64
+ ownerPackageId: string,
65
+ packageId: string,
66
+ resourceId: string,
67
+ ): void {
68
+ if (!packageId || !resourceId) return;
69
+ if (packageId === ownerPackageId) target.localResourceIds.add(resourceId);
70
+ else target.packageIds.add(packageId);
71
+ }
72
+
73
+ function addUiReference(
74
+ target: PackageResourceReferences,
75
+ ownerPackageId: string,
76
+ value: string | null | undefined,
77
+ ): void {
78
+ if (!value?.startsWith('ui://')) return;
79
+ const reference = value.slice(5);
80
+ const slashIndex = reference.indexOf('/');
81
+ if (slashIndex >= 0) {
82
+ addReference(target, ownerPackageId, reference.slice(0, slashIndex), reference.slice(slashIndex + 1));
83
+ return;
84
+ }
85
+ if (reference.length > 8) {
86
+ addReference(target, ownerPackageId, reference.slice(0, 8), reference.slice(8));
87
+ }
88
+ }
89
+
90
+ function addTextReferences(
91
+ target: PackageResourceReferences,
92
+ ownerPackageId: string,
93
+ value: string | null | undefined,
94
+ ): void {
95
+ if (!value) return;
96
+ for (const match of value.matchAll(/ui:\/\/([0-9a-z]{8})\/?([0-9a-z]+)/giu)) {
97
+ addReference(target, ownerPackageId, match[1] ?? '', match[2] ?? '');
98
+ }
99
+ }
100
+
101
+ function addUnknownReferences(
102
+ target: PackageResourceReferences,
103
+ ownerPackageId: string,
104
+ value: unknown,
105
+ ): void {
106
+ if (Array.isArray(value)) {
107
+ for (const entry of value) addUnknownReferences(target, ownerPackageId, entry);
108
+ return;
109
+ }
110
+ if (typeof value === 'string') {
111
+ addUiReference(target, ownerPackageId, value);
112
+ addTextReferences(target, ownerPackageId, value);
113
+ }
114
+ }
115
+
116
+ function addFontReferences(
117
+ target: PackageResourceReferences,
118
+ ownerPackageId: string,
119
+ value: string | string[] | null | undefined,
120
+ ): void {
121
+ if (Array.isArray(value)) {
122
+ for (const entry of value) addUiReference(target, ownerPackageId, entry);
123
+ return;
124
+ }
125
+ addUiReference(target, ownerPackageId, value);
126
+ }
127
+
128
+ function collectComponentReferences(
129
+ target: PackageResourceReferences,
130
+ ownerPackageId: string,
131
+ component: Component,
132
+ ): void {
133
+ const referenceComponent = component as Component & ReferenceComponent;
134
+ for (const child of referenceComponent.listChildren()) {
135
+ const sourceId = child.getSrc?.();
136
+ if (sourceId) {
137
+ if (sourceId.startsWith('ui://')) addUiReference(target, ownerPackageId, sourceId);
138
+ else target.localResourceIds.add(sourceId);
139
+ }
140
+ const sourcePackageId = child.getPackageId?.()?.trim();
141
+ if (sourcePackageId && sourcePackageId !== ownerPackageId) target.packageIds.add(sourcePackageId);
142
+
143
+ addFontReferences(target, ownerPackageId, child.getFont?.());
144
+ addTextReferences(target, ownerPackageId, child.getText?.());
145
+ for (const reference of [
146
+ child.getUrl?.(),
147
+ child.getDefaultItem?.(),
148
+ child.getIcon?.(),
149
+ child.getSelectedIcon?.(),
150
+ child.getDropdown?.(),
151
+ child.getSound?.(),
152
+ child.getInstanceSound?.(),
153
+ child.getInstanceIcon?.(),
154
+ child.getInstanceSelectedIcon?.(),
155
+ child.getVtScrollBarRes?.(),
156
+ child.getHzScrollBarRes?.(),
157
+ child.getHeaderRes?.(),
158
+ child.getFooterRes?.(),
159
+ ]) {
160
+ addUiReference(target, ownerPackageId, reference);
161
+ }
162
+ for (const item of child.getInstanceComboItems?.() ?? []) {
163
+ addUiReference(target, ownerPackageId, item.icon);
164
+ }
165
+ for (const item of child.getListItems?.() ?? []) {
166
+ addUiReference(target, ownerPackageId, item.icon);
167
+ addUiReference(target, ownerPackageId, item.url);
168
+ }
169
+ for (const gear of child.listGears?.() ?? []) {
170
+ addUnknownReferences(target, ownerPackageId, gear.getValues?.());
171
+ addUnknownReferences(target, ownerPackageId, gear.getDefaultValue?.());
172
+ }
173
+ }
174
+
175
+ addFontReferences(target, ownerPackageId, referenceComponent.getFont?.());
176
+ for (const reference of [
177
+ referenceComponent.getDropdown?.(),
178
+ referenceComponent.getHeaderRes?.(),
179
+ referenceComponent.getFooterRes?.(),
180
+ referenceComponent.getVtScrollBarRes?.(),
181
+ referenceComponent.getHzScrollBarRes?.(),
182
+ referenceComponent.getSound?.(),
183
+ ]) {
184
+ addUiReference(target, ownerPackageId, reference);
185
+ }
186
+ for (const transition of referenceComponent.listTransitions?.() ?? []) {
187
+ for (const item of transition.listItems?.() ?? []) {
188
+ addUnknownReferences(target, ownerPackageId, item.getStartValue?.());
189
+ addUnknownReferences(target, ownerPackageId, item.getEndValue?.());
190
+ }
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Enumerates package-local resource IDs and external package IDs referenced by
196
+ * component content. Callers retain policy decisions such as atlas selection
197
+ * and dependency ordering.
198
+ */
199
+ export function collectPackageResourceReferences(pkg: Package): PackageResourceReferences {
200
+ const references: PackageResourceReferences = {
201
+ localResourceIds: new Set<string>(),
202
+ packageIds: new Set<string>(),
203
+ };
204
+ for (const resource of pkg.listResources()) {
205
+ if (resource.propertyType === 'Component') {
206
+ collectComponentReferences(references, pkg.getId(), resource);
207
+ }
208
+ }
209
+ return references;
210
+ }