@pro-laico/payload-images 0.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/LICENSE.md +22 -0
- package/README.md +11 -0
- package/dist/access.d.ts +4 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +4 -0
- package/dist/access.js.map +1 -0
- package/dist/collections/generatedImages.d.ts +26 -0
- package/dist/collections/generatedImages.d.ts.map +1 -0
- package/dist/collections/generatedImages.js +91 -0
- package/dist/collections/generatedImages.js.map +1 -0
- package/dist/collections/images.d.ts +60 -0
- package/dist/collections/images.d.ts.map +1 -0
- package/dist/collections/images.js +223 -0
- package/dist/collections/images.js.map +1 -0
- package/dist/components/admin/focalPreview.d.ts +8 -0
- package/dist/components/admin/focalPreview.d.ts.map +1 -0
- package/dist/components/admin/focalPreview.js +234 -0
- package/dist/components/admin/focalPreview.js.map +1 -0
- package/dist/components/admin/purgeVariants.d.ts +16 -0
- package/dist/components/admin/purgeVariants.d.ts.map +1 -0
- package/dist/components/admin/purgeVariants.js +66 -0
- package/dist/components/admin/purgeVariants.js.map +1 -0
- package/dist/components/image.d.ts +90 -0
- package/dist/components/image.d.ts.map +1 -0
- package/dist/components/image.js +162 -0
- package/dist/components/image.js.map +1 -0
- package/dist/components/inlineLqip.d.ts +36 -0
- package/dist/components/inlineLqip.d.ts.map +1 -0
- package/dist/components/inlineLqip.js +54 -0
- package/dist/components/inlineLqip.js.map +1 -0
- package/dist/endpoints/transform.d.ts +40 -0
- package/dist/endpoints/transform.d.ts.map +1 -0
- package/dist/endpoints/transform.js +181 -0
- package/dist/endpoints/transform.js.map +1 -0
- package/dist/fields/virtualUrls.d.ts +26 -0
- package/dist/fields/virtualUrls.d.ts.map +1 -0
- package/dist/fields/virtualUrls.js +185 -0
- package/dist/fields/virtualUrls.js.map +1 -0
- package/dist/hooks/purge.d.ts +33 -0
- package/dist/hooks/purge.d.ts.map +1 -0
- package/dist/hooks/purge.js +63 -0
- package/dist/hooks/purge.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/configStash.d.ts +6 -0
- package/dist/lib/configStash.d.ts.map +1 -0
- package/dist/lib/configStash.js +10 -0
- package/dist/lib/configStash.js.map +1 -0
- package/dist/lib/getServerSideURL.d.ts +8 -0
- package/dist/lib/getServerSideURL.d.ts.map +1 -0
- package/dist/lib/getServerSideURL.js +12 -0
- package/dist/lib/getServerSideURL.js.map +1 -0
- package/dist/lib/mergeCollection.d.ts +17 -0
- package/dist/lib/mergeCollection.d.ts.map +1 -0
- package/dist/lib/mergeCollection.js +55 -0
- package/dist/lib/mergeCollection.js.map +1 -0
- package/dist/plugin.d.ts +128 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +184 -0
- package/dist/plugin.js.map +1 -0
- package/dist/transform/coalesce.d.ts +16 -0
- package/dist/transform/coalesce.d.ts.map +1 -0
- package/dist/transform/coalesce.js +25 -0
- package/dist/transform/coalesce.js.map +1 -0
- package/dist/transform/geometry.d.ts +46 -0
- package/dist/transform/geometry.d.ts.map +1 -0
- package/dist/transform/geometry.js +64 -0
- package/dist/transform/geometry.js.map +1 -0
- package/dist/transform/getVariantBytes.d.ts +60 -0
- package/dist/transform/getVariantBytes.d.ts.map +1 -0
- package/dist/transform/getVariantBytes.js +163 -0
- package/dist/transform/getVariantBytes.js.map +1 -0
- package/dist/transform/limit.d.ts +5 -0
- package/dist/transform/limit.d.ts.map +1 -0
- package/dist/transform/limit.js +41 -0
- package/dist/transform/limit.js.map +1 -0
- package/dist/transform/lqip.d.ts +21 -0
- package/dist/transform/lqip.d.ts.map +1 -0
- package/dist/transform/lqip.js +32 -0
- package/dist/transform/lqip.js.map +1 -0
- package/dist/transform/params.d.ts +100 -0
- package/dist/transform/params.d.ts.map +1 -0
- package/dist/transform/params.js +144 -0
- package/dist/transform/params.js.map +1 -0
- package/dist/transform/sharp.d.ts +28 -0
- package/dist/transform/sharp.d.ts.map +1 -0
- package/dist/transform/sharp.js +85 -0
- package/dist/transform/sharp.js.map +1 -0
- package/dist/transform/sharpInstance.d.ts +21 -0
- package/dist/transform/sharpInstance.d.ts.map +1 -0
- package/dist/transform/sharpInstance.js +38 -0
- package/dist/transform/sharpInstance.js.map +1 -0
- package/dist/transform/source.d.ts +32 -0
- package/dist/transform/source.d.ts.map +1 -0
- package/dist/transform/source.js +121 -0
- package/dist/transform/source.js.map +1 -0
- package/dist/utils/urls.d.ts +108 -0
- package/dist/utils/urls.d.ts.map +1 -0
- package/dist/utils/urls.js +113 -0
- package/dist/utils/urls.js.map +1 -0
- package/dist/variants/key.d.ts +9 -0
- package/dist/variants/key.d.ts.map +1 -0
- package/dist/variants/key.js +29 -0
- package/dist/variants/key.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic cache key for a generated variant. Folds in the source identity
|
|
3
|
+
* (`id` + `filename`) + focal point so a re-upload or focal edit yields a new key,
|
|
4
|
+
* and the transform params + the *resolved* output format so each distinct render
|
|
5
|
+
* is its own variant.
|
|
6
|
+
*
|
|
7
|
+
* Keying on `filename` (not `updatedAt`) deliberately matches what
|
|
8
|
+
* `purgeStaleVariantsAfterChange` triggers on — a file replacement or focal edit.
|
|
9
|
+
* So a metadata-only edit (e.g. `alt`) bumps `updatedAt` but leaves the key (and the
|
|
10
|
+
* stored variants) intact: keys go stale exactly when the purge hook also fires, so
|
|
11
|
+
* unreachable variants are removed in lockstep rather than orphaned.
|
|
12
|
+
*/ import { createHash } from "node:crypto";
|
|
13
|
+
export const variantCacheKey = (doc, p, resolvedFormat)=>{
|
|
14
|
+
const q = resolvedFormat === 'png' ? 0 : p.q;
|
|
15
|
+
const raw = [
|
|
16
|
+
String(doc.id),
|
|
17
|
+
doc.filename ?? '',
|
|
18
|
+
p.w ?? '',
|
|
19
|
+
p.h ?? '',
|
|
20
|
+
p.fit,
|
|
21
|
+
q,
|
|
22
|
+
resolvedFormat,
|
|
23
|
+
doc.focalX ?? 50,
|
|
24
|
+
doc.focalY ?? 50
|
|
25
|
+
].join('|');
|
|
26
|
+
return createHash('sha256').update(raw).digest('hex').slice(0, 24);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/variants/key.ts"],"sourcesContent":["/**\n * Deterministic cache key for a generated variant. Folds in the source identity\n * (`id` + `filename`) + focal point so a re-upload or focal edit yields a new key,\n * and the transform params + the *resolved* output format so each distinct render\n * is its own variant.\n *\n * Keying on `filename` (not `updatedAt`) deliberately matches what\n * `purgeStaleVariantsAfterChange` triggers on — a file replacement or focal edit.\n * So a metadata-only edit (e.g. `alt`) bumps `updatedAt` but leaves the key (and the\n * stored variants) intact: keys go stale exactly when the purge hook also fires, so\n * unreachable variants are removed in lockstep rather than orphaned.\n */\nimport { createHash } from 'node:crypto'\n\nimport type { ParsedParams } from '../transform/params'\n\nexport interface CacheKeyDoc {\n id: string | number\n filename?: string | null\n focalX?: number | null\n focalY?: number | null\n}\n\nexport const variantCacheKey = (doc: CacheKeyDoc, p: ParsedParams, resolvedFormat: string): string => {\n const q = resolvedFormat === 'png' ? 0 : p.q\n const raw = [String(doc.id), doc.filename ?? '', p.w ?? '', p.h ?? '', p.fit, q, resolvedFormat, doc.focalX ?? 50, doc.focalY ?? 50].join('|')\n return createHash('sha256').update(raw).digest('hex').slice(0, 24)\n}\n"],"names":["createHash","variantCacheKey","doc","p","resolvedFormat","q","raw","String","id","filename","w","h","fit","focalX","focalY","join","update","digest","slice"],"mappings":"AAAA;;;;;;;;;;;CAWC,GACD,SAASA,UAAU,QAAQ,cAAa;AAWxC,OAAO,MAAMC,kBAAkB,CAACC,KAAkBC,GAAiBC;IACjE,MAAMC,IAAID,mBAAmB,QAAQ,IAAID,EAAEE,CAAC;IAC5C,MAAMC,MAAM;QAACC,OAAOL,IAAIM,EAAE;QAAGN,IAAIO,QAAQ,IAAI;QAAIN,EAAEO,CAAC,IAAI;QAAIP,EAAEQ,CAAC,IAAI;QAAIR,EAAES,GAAG;QAAEP;QAAGD;QAAgBF,IAAIW,MAAM,IAAI;QAAIX,IAAIY,MAAM,IAAI;KAAG,CAACC,IAAI,CAAC;IAC1I,OAAOf,WAAW,UAAUgB,MAAM,CAACV,KAAKW,MAAM,CAAC,OAAOC,KAAK,CAAC,GAAG;AACjE,EAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pro-laico/payload-images",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Image optimization for Payload CMS: an Images upload collection that stores only the original, an on-demand Sharp transform endpoint (focal-aware crop, format negotiation, built-in LQIP placeholders), a durable variant cache with two-way purge, an admin focal-point picker, and a responsive <ResponsiveImage> component.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/pro-laico/payload-plugins.git",
|
|
9
|
+
"directory": "packages/payload-images"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"payload",
|
|
13
|
+
"payloadcms",
|
|
14
|
+
"plugin",
|
|
15
|
+
"image",
|
|
16
|
+
"images",
|
|
17
|
+
"sharp",
|
|
18
|
+
"optimization",
|
|
19
|
+
"webp",
|
|
20
|
+
"avif",
|
|
21
|
+
"responsive"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"type": "module",
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"main": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"default": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./components/image": {
|
|
37
|
+
"types": "./dist/components/image.d.ts",
|
|
38
|
+
"import": "./dist/components/image.js",
|
|
39
|
+
"default": "./dist/components/image.js"
|
|
40
|
+
},
|
|
41
|
+
"./utils/urls": {
|
|
42
|
+
"types": "./dist/utils/urls.d.ts",
|
|
43
|
+
"import": "./dist/utils/urls.js",
|
|
44
|
+
"default": "./dist/utils/urls.js"
|
|
45
|
+
},
|
|
46
|
+
"./admin/focalPreview": {
|
|
47
|
+
"types": "./dist/components/admin/focalPreview.d.ts",
|
|
48
|
+
"import": "./dist/components/admin/focalPreview.js",
|
|
49
|
+
"default": "./dist/components/admin/focalPreview.js"
|
|
50
|
+
},
|
|
51
|
+
"./admin/purgeVariants": {
|
|
52
|
+
"types": "./dist/components/admin/purgeVariants.d.ts",
|
|
53
|
+
"import": "./dist/components/admin/purgeVariants.js",
|
|
54
|
+
"default": "./dist/components/admin/purgeVariants.js"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"files": [
|
|
58
|
+
"dist"
|
|
59
|
+
],
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@payloadcms/ui": "^3.0.0",
|
|
62
|
+
"next": ">=15.0.0",
|
|
63
|
+
"payload": "^3.0.0",
|
|
64
|
+
"react": "^19.0.0",
|
|
65
|
+
"react-dom": "^19.0.0",
|
|
66
|
+
"sharp": ">=0.33.0"
|
|
67
|
+
},
|
|
68
|
+
"peerDependenciesMeta": {
|
|
69
|
+
"sharp": {
|
|
70
|
+
"optional": true
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@payloadcms/ui": "^3.85.1",
|
|
75
|
+
"@types/node": "^26.0.1",
|
|
76
|
+
"@types/react": "^19.2.17",
|
|
77
|
+
"@types/react-dom": "^19.2.3",
|
|
78
|
+
"next": "^16.2.9",
|
|
79
|
+
"payload": "^3.85.1",
|
|
80
|
+
"react": "^19.2.7",
|
|
81
|
+
"react-dom": "^19.2.7",
|
|
82
|
+
"sharp": "^0.35.2",
|
|
83
|
+
"typescript": "^6.0.3",
|
|
84
|
+
"vitest": "^4.1.9"
|
|
85
|
+
},
|
|
86
|
+
"engines": {
|
|
87
|
+
"node": ">=18"
|
|
88
|
+
},
|
|
89
|
+
"scripts": {
|
|
90
|
+
"build": "pnpm clean && pnpm build:types && pnpm build:swc",
|
|
91
|
+
"clean": "rimraf dist tsconfig.tsbuildinfo",
|
|
92
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
93
|
+
"test": "vitest run",
|
|
94
|
+
"test:watch": "vitest",
|
|
95
|
+
"build:swc": "swc ./src -d ./dist --config-file ../../.swcrc --strip-leading-paths",
|
|
96
|
+
"build:types": "tsc -p tsconfig.build.json --emitDeclarationOnly --noCheck"
|
|
97
|
+
}
|
|
98
|
+
}
|