@unmade/text-renderer 0.2.1 → 1.0.0

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 CHANGED
@@ -34,6 +34,18 @@ import { getRenderedText } from '@unmade/text-renderer/node'; // Node.js
34
34
  import { getRenderedText } from '@unmade/text-renderer/worker'; // Web Worker
35
35
  ```
36
36
 
37
+ ### ESM-only
38
+
39
+ This package is ESM-only — `require('@unmade/text-renderer')` will not work. This is a hard constraint: harfbuzzjs (the font shaping engine) uses top-level `await` for WASM initialisation, which Rollup cannot emit as CJS.
40
+
41
+ **Node.js / Lambda**: Node 18+ supports ESM natively, so this is not a blocker. When integrating from a CJS codebase, use dynamic import:
42
+
43
+ ```typescript
44
+ const { getRenderedText } = await import('@unmade/text-renderer/node');
45
+ ```
46
+
47
+ **CE Lambda integration**: When wiring text-renderer into the Configuration Engine Lambda, use the `/node` ESM entry (`@unmade/text-renderer/node`) from an ESM Lambda handler, or use the `await import()` pattern above from an existing CJS handler. The `ce-adapter` sub-package (`@unmade/text-renderer/ce-adapter`) retains a CJS build and can be `require()`'d normally.
48
+
37
49
  ## Configuration Engine adapter
38
50
 
39
51
  The `ce-adapter` sub-package bridges CE (Configuration Engine) editor state to renderer options:
package/dist/index.d.ts CHANGED
@@ -1,6 +1,3 @@
1
- import { default as default_2 } from 'opentype.js';
2
- import { SVGGlyphData } from '@unmade/svg-glyphs';
3
-
4
1
  export declare type BaselineConfig = {
5
2
  type: 'flat';
6
3
  } | {
@@ -67,7 +64,7 @@ export declare interface GenerateFlatBaselineOptions {
67
64
  lineNumber?: number;
68
65
  }
69
66
 
70
- export declare const getFontCache: () => Map<any, any>;
67
+ export declare const getFontCache: () => Map<string, LoadedFont>;
71
68
 
72
69
  /**
73
70
  * Get the unique colours used by a font's SVG glyphs.
@@ -147,13 +144,48 @@ export declare type HorizontalTextAlignmentValues = 'left' | 'centre' | 'right'
147
144
 
148
145
  export declare const LINE_HEIGHT = 1.1;
149
146
 
150
- export declare type LoadedFont = default_2.Font & LoadedFontExtras;
151
-
152
- declare interface LoadedFontExtras {
147
+ export declare interface LoadedFont {
148
+ unitsPerEm: number;
149
+ names: {
150
+ fontFamily: string;
151
+ };
153
152
  svgGlyphs?: Map<number, SVGGlyphData>;
153
+ charToGlyph(char: string): {
154
+ index: number;
155
+ advanceWidth: number;
156
+ name: string;
157
+ getBoundingBox(): {
158
+ x1: number;
159
+ y1: number;
160
+ x2: number;
161
+ y2: number;
162
+ };
163
+ };
164
+ getPath(text: string, x: number, y: number, fontSize: number, options?: {
165
+ drawSVG?: boolean;
166
+ }): {
167
+ getBoundingBox(): {
168
+ x1: number;
169
+ y1: number;
170
+ x2: number;
171
+ y2: number;
172
+ };
173
+ toPathData(decimals?: number): string;
174
+ };
175
+ getPaths(text: string, x: number, y: number, fontSize: number, options?: {
176
+ drawSVG?: boolean;
177
+ }): Array<{
178
+ getBoundingBox(): {
179
+ x1: number;
180
+ y1: number;
181
+ x2: number;
182
+ y2: number;
183
+ };
184
+ toPathData(decimals?: number): string;
185
+ }>;
154
186
  }
155
187
 
156
- export declare const loadOpentypeFont: (fontUrl: string, fetchSVGGlyphs?: boolean) => Promise<LoadedFont>;
188
+ export declare const loadFont: (fontUrl: string, fetchSVGGlyphs?: boolean) => Promise<LoadedFont>;
157
189
 
158
190
  export declare type MeasurementUnits = 'mm' | 'in';
159
191
 
@@ -186,6 +218,11 @@ export declare interface RenderTextOptions {
186
218
  colourMap?: ColourMap;
187
219
  }
188
220
 
221
+ declare interface SVGGlyphData {
222
+ svg: string;
223
+ viewbox: string;
224
+ }
225
+
189
226
  export declare interface SvgGlyphEntry {
190
227
  content: string;
191
228
  viewBox: string;