@autorender/sdk-core 0.1.28 → 0.1.30
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 +15 -1
- package/dist/index.cjs +76 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -6
- package/dist/index.d.ts +17 -6
- package/dist/index.js +75 -34
- package/dist/index.js.map +1 -1
- package/dist/styles.css +17 -0
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -105,6 +105,21 @@ const attrs = AR.responsiveImageAttributes({
|
|
|
105
105
|
const dpr = AR.getDPR(); // 1 or 2
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
+
## Playground
|
|
109
|
+
|
|
110
|
+
A **vanilla TypeScript + Vite** sample lives in [`playground/html`](../../playground/html). It uses `createUploader` and `createAR` from `@autorender/sdk-core` (no framework adapter).
|
|
111
|
+
|
|
112
|
+
From the **repository root**:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
npm install --prefix playground/html
|
|
116
|
+
npm run dev --prefix playground/html
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Entry: `playground/html/src/main.ts` and `style.css`.
|
|
120
|
+
|
|
121
|
+
For richer **ViewTag + uploader** examples (React components wrapping the same core), see [`playground/react`](../../playground/react) and the other framework playgrounds in the [root README](../../README.md) (section **Development → Playgrounds**).
|
|
122
|
+
|
|
108
123
|
## API Reference
|
|
109
124
|
|
|
110
125
|
### `createAR(config: CreateARConfig): ARInstance`
|
|
@@ -117,7 +132,6 @@ Creates a new AutoRender client instance for image transformations.
|
|
|
117
132
|
- `defaults?: { f?: string, q?: string | number }` - Default transformations
|
|
118
133
|
- `deviceBreakpoints?: number[]` - Device breakpoints for responsive images
|
|
119
134
|
- `imageBreakpoints?: number[]` - Image breakpoints for responsive images
|
|
120
|
-
- `connectionQuality?: 'auto' | '2g' | '3g' | '4g' | 'wifi'` - Connection quality override
|
|
121
135
|
|
|
122
136
|
### `ARInstance`
|
|
123
137
|
|
package/dist/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(src_exports, {
|
|
|
25
25
|
detectBestFormat: () => detectBestFormat,
|
|
26
26
|
encodeAssetPathForDelivery: () => encodeAssetPathForDelivery,
|
|
27
27
|
getBestFormatSync: () => getBestFormatSync,
|
|
28
|
+
isGifFormatOutput: () => isGifFormatOutput,
|
|
28
29
|
registerAutorenderUploaderElement: () => registerAutorenderUploaderElement,
|
|
29
30
|
resetFormatCache: () => resetFormatCache
|
|
30
31
|
});
|
|
@@ -2982,7 +2983,35 @@ function getDPR() {
|
|
|
2982
2983
|
}
|
|
2983
2984
|
|
|
2984
2985
|
// src/viewtag/transform.ts
|
|
2985
|
-
function
|
|
2986
|
+
function normalizePosition(value) {
|
|
2987
|
+
const normalized = value.trim().toLowerCase();
|
|
2988
|
+
const positionMap = {
|
|
2989
|
+
center: "c",
|
|
2990
|
+
"top-left": "tl",
|
|
2991
|
+
"top-right": "tr",
|
|
2992
|
+
"bottom-left": "bl",
|
|
2993
|
+
"bottom-right": "br",
|
|
2994
|
+
top: "t",
|
|
2995
|
+
bottom: "b",
|
|
2996
|
+
left: "l",
|
|
2997
|
+
right: "r",
|
|
2998
|
+
p_c: "c",
|
|
2999
|
+
p_tl: "tl",
|
|
3000
|
+
p_tr: "tr",
|
|
3001
|
+
p_bl: "bl",
|
|
3002
|
+
p_br: "br",
|
|
3003
|
+
p_t: "t",
|
|
3004
|
+
p_b: "b",
|
|
3005
|
+
p_l: "l",
|
|
3006
|
+
p_r: "r"
|
|
3007
|
+
};
|
|
3008
|
+
return positionMap[normalized] || normalized;
|
|
3009
|
+
}
|
|
3010
|
+
function isGifFormatOutput(transform) {
|
|
3011
|
+
const f = transform?.f;
|
|
3012
|
+
return typeof f === "string" && f.toLowerCase() === "gif";
|
|
3013
|
+
}
|
|
3014
|
+
function buildTransformString(transform, defaults, enableDPR = true) {
|
|
2986
3015
|
const parts = [];
|
|
2987
3016
|
const addPart = (param, value) => {
|
|
2988
3017
|
if (value === void 0 || value === null) return;
|
|
@@ -3091,16 +3120,24 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
|
|
|
3091
3120
|
addPart("c_", fitMap[transform.fit] || transform.fit);
|
|
3092
3121
|
}
|
|
3093
3122
|
if (transform.ar) addPart("ar_", transform.ar);
|
|
3094
|
-
if (transform.
|
|
3095
|
-
if (transform.
|
|
3123
|
+
if (transform.position) addPart("p_", normalizePosition(transform.position));
|
|
3124
|
+
if (transform.position_startagy) {
|
|
3125
|
+
const strategy = String(transform.position_startagy).trim().toLowerCase().replace(/^ps_/, "");
|
|
3126
|
+
if (strategy === "entropy" || strategy === "attention") {
|
|
3127
|
+
addPart("ps_", strategy);
|
|
3128
|
+
}
|
|
3129
|
+
}
|
|
3096
3130
|
if (transform.focus) addPart("fo_", transform.focus);
|
|
3131
|
+
if (transform.so !== void 0) addPart("so_", transform.so);
|
|
3132
|
+
if (transform.eo !== void 0) addPart("eo_", transform.eo);
|
|
3097
3133
|
if (transform.r !== void 0) addPart("r_", transform.r);
|
|
3098
3134
|
if (transform.z !== void 0) addPart("z_", transform.z);
|
|
3099
3135
|
if (transform.flip) addPart("flip_", transform.flip);
|
|
3100
3136
|
if (transform.br !== void 0) addPart("br_", transform.br);
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3137
|
+
const resolvedFormat = transform.f ?? defaults?.f;
|
|
3138
|
+
const isGifOutput = typeof resolvedFormat === "string" && resolvedFormat.toLowerCase() === "gif";
|
|
3139
|
+
if (resolvedFormat && resolvedFormat !== "auto") addPart("f_", resolvedFormat);
|
|
3140
|
+
const quality = isGifOutput ? transform.q : transform.q ?? defaults?.q;
|
|
3104
3141
|
if (quality !== void 0 && quality !== "auto") addPart("q_", quality);
|
|
3105
3142
|
if (transform.bg) {
|
|
3106
3143
|
if (transform.bg.startsWith("rgb:")) {
|
|
@@ -3109,12 +3146,13 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
|
|
|
3109
3146
|
addPart("bg_", transform.bg);
|
|
3110
3147
|
}
|
|
3111
3148
|
}
|
|
3112
|
-
if (
|
|
3113
|
-
|
|
3114
|
-
|
|
3115
|
-
|
|
3116
|
-
|
|
3117
|
-
|
|
3149
|
+
if (!isGifOutput) {
|
|
3150
|
+
if (enableDPR && transform.dpr === void 0) {
|
|
3151
|
+
const dpr = getDPR();
|
|
3152
|
+
if (dpr !== 1) addPart("dpr_", dpr);
|
|
3153
|
+
} else if (transform.dpr !== void 0) {
|
|
3154
|
+
addPart("dpr_", transform.dpr);
|
|
3155
|
+
}
|
|
3118
3156
|
}
|
|
3119
3157
|
if (transform.improve !== void 0) {
|
|
3120
3158
|
if (typeof transform.improve === "boolean" && transform.improve) {
|
|
@@ -3175,9 +3213,11 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
|
|
|
3175
3213
|
"h",
|
|
3176
3214
|
"fit",
|
|
3177
3215
|
"ar",
|
|
3178
|
-
"
|
|
3179
|
-
"
|
|
3216
|
+
"position",
|
|
3217
|
+
"position_startagy",
|
|
3180
3218
|
"focus",
|
|
3219
|
+
"so",
|
|
3220
|
+
"eo",
|
|
3181
3221
|
"r",
|
|
3182
3222
|
"z",
|
|
3183
3223
|
"flip",
|
|
@@ -3185,7 +3225,6 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
|
|
|
3185
3225
|
"f",
|
|
3186
3226
|
"q",
|
|
3187
3227
|
"bg",
|
|
3188
|
-
"k",
|
|
3189
3228
|
"dpr",
|
|
3190
3229
|
"improve",
|
|
3191
3230
|
"unsharpMask",
|
|
@@ -3274,13 +3313,14 @@ function buildTransformString(transform, defaults, enableDPR = true, connectionQ
|
|
|
3274
3313
|
if (param.startsWith("lw_")) return 3;
|
|
3275
3314
|
if (param.startsWith("lh_")) return 4;
|
|
3276
3315
|
if (param.startsWith("o_")) return 5;
|
|
3277
|
-
if (param.startsWith("l")) return 6;
|
|
3316
|
+
if (param.startsWith("l") && !param.startsWith("lzoom_")) return 6;
|
|
3278
3317
|
if (param.startsWith("co_")) return 7;
|
|
3279
3318
|
if (param.startsWith("a_")) return 8;
|
|
3280
3319
|
if (param.startsWith("lr_")) return 8;
|
|
3281
|
-
if (param.startsWith("
|
|
3282
|
-
if (param.startsWith("
|
|
3283
|
-
if (param.startsWith("
|
|
3320
|
+
if (param.startsWith("lzoom_")) return 9;
|
|
3321
|
+
if (param.startsWith("x_") || param.startsWith("y_")) return 10;
|
|
3322
|
+
if (param.startsWith("le_")) return 11;
|
|
3323
|
+
if (param.startsWith("e_")) return 12;
|
|
3284
3324
|
return 100;
|
|
3285
3325
|
};
|
|
3286
3326
|
regularParts.sort((a, b) => {
|
|
@@ -3384,6 +3424,7 @@ function buildLayerTransform(layer, addPart) {
|
|
|
3384
3424
|
addPart("fl_layer_apply", "");
|
|
3385
3425
|
}
|
|
3386
3426
|
function normalizePlacement(placement) {
|
|
3427
|
+
const normalized = placement.trim().toLowerCase().replace(/\s+/g, " ");
|
|
3387
3428
|
const mapping = {
|
|
3388
3429
|
"north": "n",
|
|
3389
3430
|
"south": "s",
|
|
@@ -3391,12 +3432,16 @@ function normalizePlacement(placement) {
|
|
|
3391
3432
|
"west": "w",
|
|
3392
3433
|
"center": "c",
|
|
3393
3434
|
"north-west": "nw",
|
|
3435
|
+
"north west": "nw",
|
|
3394
3436
|
"north-east": "ne",
|
|
3437
|
+
"north east": "ne",
|
|
3395
3438
|
"south-west": "sw",
|
|
3439
|
+
"south west": "sw",
|
|
3396
3440
|
"south-east": "se",
|
|
3441
|
+
"south east": "se",
|
|
3397
3442
|
"none": "none"
|
|
3398
3443
|
};
|
|
3399
|
-
return mapping[
|
|
3444
|
+
return mapping[normalized] || normalized;
|
|
3400
3445
|
}
|
|
3401
3446
|
|
|
3402
3447
|
// src/viewtag/url-builder.ts
|
|
@@ -3415,9 +3460,9 @@ function encodeAssetPathForDelivery(src) {
|
|
|
3415
3460
|
}
|
|
3416
3461
|
return trimmed.split("/").filter(Boolean).map((segment) => encodeURIComponent(segment)).join("/");
|
|
3417
3462
|
}
|
|
3418
|
-
function buildImageUrl(baseUrl, workspace, src, transform, defaults, enableDPR = true
|
|
3463
|
+
function buildImageUrl(baseUrl, workspace, src, transform, defaults, enableDPR = true) {
|
|
3419
3464
|
const normalizedBase = baseUrl.replace(/\/+$/, "");
|
|
3420
|
-
const transformStr = buildTransformString(transform || {}, defaults, enableDPR
|
|
3465
|
+
const transformStr = buildTransformString(transform || {}, defaults, enableDPR);
|
|
3421
3466
|
const trimmedSrc = src.trim();
|
|
3422
3467
|
if (ABSOLUTE_URL_RE.test(trimmedSrc)) {
|
|
3423
3468
|
const fetchPart = `fetch_${trimmedSrc}`;
|
|
@@ -3445,7 +3490,7 @@ function parseMinVWFromSizes(sizes) {
|
|
|
3445
3490
|
const vwValues = vwMatches.map((m) => parseFloat(m));
|
|
3446
3491
|
return Math.min(...vwValues);
|
|
3447
3492
|
}
|
|
3448
|
-
function generateResponsiveAttributes(baseUrl, workspace, options, defaults, deviceBreakpoints = DEFAULT_DEVICE_BREAKPOINTS, imageBreakpoints = DEFAULT_IMAGE_BREAKPOINTS, enableDPR = true
|
|
3493
|
+
function generateResponsiveAttributes(baseUrl, workspace, options, defaults, deviceBreakpoints = DEFAULT_DEVICE_BREAKPOINTS, imageBreakpoints = DEFAULT_IMAGE_BREAKPOINTS, enableDPR = true) {
|
|
3449
3494
|
const { src, width, sizes, transform, breakpoints } = options;
|
|
3450
3495
|
const effectiveBreakpoints = breakpoints || deviceBreakpoints;
|
|
3451
3496
|
if (width !== void 0 && !sizes) {
|
|
@@ -3457,7 +3502,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
|
|
|
3457
3502
|
w: baseWidth2,
|
|
3458
3503
|
dpr: 1
|
|
3459
3504
|
};
|
|
3460
|
-
const url1x = buildImageUrl(baseUrl, workspace, src, transform1x, defaults, false
|
|
3505
|
+
const url1x = buildImageUrl(baseUrl, workspace, src, transform1x, defaults, false);
|
|
3461
3506
|
srcSetParts2.push(`${url1x} 1x`);
|
|
3462
3507
|
if (dpr >= 2) {
|
|
3463
3508
|
const transform2x = {
|
|
@@ -3465,14 +3510,10 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
|
|
|
3465
3510
|
w: baseWidth2,
|
|
3466
3511
|
dpr: 2
|
|
3467
3512
|
};
|
|
3468
|
-
const url2x = buildImageUrl(baseUrl, workspace, src, transform2x, defaults, false
|
|
3513
|
+
const url2x = buildImageUrl(baseUrl, workspace, src, transform2x, defaults, false);
|
|
3469
3514
|
srcSetParts2.push(`${url2x} 2x`);
|
|
3470
3515
|
}
|
|
3471
|
-
const
|
|
3472
|
-
...transform,
|
|
3473
|
-
w: baseWidth2
|
|
3474
|
-
};
|
|
3475
|
-
const baseSrc2 = buildImageUrl(baseUrl, workspace, src, baseTransform2, defaults, enableDPR, connectionQuality);
|
|
3516
|
+
const baseSrc2 = url1x;
|
|
3476
3517
|
return {
|
|
3477
3518
|
src: baseSrc2,
|
|
3478
3519
|
srcSet: srcSetParts2.join(", "),
|
|
@@ -3489,7 +3530,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
|
|
|
3489
3530
|
...transform,
|
|
3490
3531
|
w: bp
|
|
3491
3532
|
};
|
|
3492
|
-
const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR
|
|
3533
|
+
const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR);
|
|
3493
3534
|
return `${url} ${bp}w`;
|
|
3494
3535
|
});
|
|
3495
3536
|
const baseWidth2 = width || filteredBreakpoints[0] || effectiveBreakpoints[0];
|
|
@@ -3497,7 +3538,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
|
|
|
3497
3538
|
...transform,
|
|
3498
3539
|
w: baseWidth2
|
|
3499
3540
|
};
|
|
3500
|
-
const baseSrc2 = buildImageUrl(baseUrl, workspace, src, baseTransform2, defaults, enableDPR
|
|
3541
|
+
const baseSrc2 = buildImageUrl(baseUrl, workspace, src, baseTransform2, defaults, enableDPR);
|
|
3501
3542
|
return {
|
|
3502
3543
|
src: baseSrc2,
|
|
3503
3544
|
srcSet: srcSetParts2.join(", "),
|
|
@@ -3510,7 +3551,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
|
|
|
3510
3551
|
...transform,
|
|
3511
3552
|
w: bp
|
|
3512
3553
|
};
|
|
3513
|
-
const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR
|
|
3554
|
+
const url = buildImageUrl(baseUrl, workspace, src, transformWithWidth, defaults, enableDPR);
|
|
3514
3555
|
return `${url} ${bp}w`;
|
|
3515
3556
|
});
|
|
3516
3557
|
const baseWidth = effectiveBreakpoints[0];
|
|
@@ -3518,7 +3559,7 @@ function generateResponsiveAttributes(baseUrl, workspace, options, defaults, dev
|
|
|
3518
3559
|
...transform,
|
|
3519
3560
|
w: baseWidth
|
|
3520
3561
|
};
|
|
3521
|
-
const baseSrc = buildImageUrl(baseUrl, workspace, src, baseTransform, defaults, enableDPR
|
|
3562
|
+
const baseSrc = buildImageUrl(baseUrl, workspace, src, baseTransform, defaults, enableDPR);
|
|
3522
3563
|
return {
|
|
3523
3564
|
src: baseSrc,
|
|
3524
3565
|
srcSet: srcSetParts.join(", "),
|
|
@@ -3850,6 +3891,7 @@ function registerAutorenderUploaderElement() {
|
|
|
3850
3891
|
detectBestFormat,
|
|
3851
3892
|
encodeAssetPathForDelivery,
|
|
3852
3893
|
getBestFormatSync,
|
|
3894
|
+
isGifFormatOutput,
|
|
3853
3895
|
registerAutorenderUploaderElement,
|
|
3854
3896
|
resetFormatCache
|
|
3855
3897
|
});
|