@pixzle/node 0.0.23 → 0.0.25

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 (79) hide show
  1. package/package.json +2 -2
  2. package/dist/block.cjs +0 -158
  3. package/dist/block.d.cts +0 -71
  4. package/dist/block.d.ts.map +0 -1
  5. package/dist/cjs/block.d.ts +0 -71
  6. package/dist/cjs/block.d.ts.map +0 -1
  7. package/dist/cjs/block.js +0 -158
  8. package/dist/cjs/block.js.map +0 -1
  9. package/dist/cjs/constants.d.ts +0 -2
  10. package/dist/cjs/constants.d.ts.map +0 -1
  11. package/dist/cjs/constants.js +0 -6
  12. package/dist/cjs/constants.js.map +0 -1
  13. package/dist/cjs/file.d.ts +0 -33
  14. package/dist/cjs/file.d.ts.map +0 -1
  15. package/dist/cjs/file.js +0 -57
  16. package/dist/cjs/file.js.map +0 -1
  17. package/dist/cjs/fragmenter.d.ts +0 -14
  18. package/dist/cjs/fragmenter.d.ts.map +0 -1
  19. package/dist/cjs/fragmenter.js +0 -95
  20. package/dist/cjs/fragmenter.js.map +0 -1
  21. package/dist/cjs/index.d.ts +0 -12
  22. package/dist/cjs/index.d.ts.map +0 -1
  23. package/dist/cjs/index.js +0 -59
  24. package/dist/cjs/index.js.map +0 -1
  25. package/dist/cjs/package.json +0 -1
  26. package/dist/cjs/restorer.d.ts +0 -10
  27. package/dist/cjs/restorer.d.ts.map +0 -1
  28. package/dist/cjs/restorer.js +0 -54
  29. package/dist/cjs/restorer.js.map +0 -1
  30. package/dist/cjs/utils.d.ts +0 -6
  31. package/dist/cjs/utils.d.ts.map +0 -1
  32. package/dist/cjs/utils.js +0 -15
  33. package/dist/cjs/utils.js.map +0 -1
  34. package/dist/constants.cjs +0 -6
  35. package/dist/constants.d.cts +0 -2
  36. package/dist/constants.d.ts.map +0 -1
  37. package/dist/esm/block.d.ts +0 -71
  38. package/dist/esm/block.d.ts.map +0 -1
  39. package/dist/esm/block.js +0 -149
  40. package/dist/esm/block.js.map +0 -1
  41. package/dist/esm/constants.d.ts +0 -2
  42. package/dist/esm/constants.d.ts.map +0 -1
  43. package/dist/esm/constants.js +0 -3
  44. package/dist/esm/constants.js.map +0 -1
  45. package/dist/esm/file.d.ts +0 -33
  46. package/dist/esm/file.d.ts.map +0 -1
  47. package/dist/esm/file.js +0 -47
  48. package/dist/esm/file.js.map +0 -1
  49. package/dist/esm/fragmenter.d.ts +0 -14
  50. package/dist/esm/fragmenter.d.ts.map +0 -1
  51. package/dist/esm/fragmenter.js +0 -91
  52. package/dist/esm/fragmenter.js.map +0 -1
  53. package/dist/esm/index.d.ts +0 -12
  54. package/dist/esm/index.d.ts.map +0 -1
  55. package/dist/esm/index.js +0 -55
  56. package/dist/esm/index.js.map +0 -1
  57. package/dist/esm/restorer.d.ts +0 -10
  58. package/dist/esm/restorer.d.ts.map +0 -1
  59. package/dist/esm/restorer.js +0 -50
  60. package/dist/esm/restorer.js.map +0 -1
  61. package/dist/esm/utils.d.ts +0 -6
  62. package/dist/esm/utils.d.ts.map +0 -1
  63. package/dist/esm/utils.js +0 -9
  64. package/dist/esm/utils.js.map +0 -1
  65. package/dist/file.cjs +0 -57
  66. package/dist/file.d.cts +0 -33
  67. package/dist/file.d.ts.map +0 -1
  68. package/dist/fragmenter.cjs +0 -95
  69. package/dist/fragmenter.d.cts +0 -14
  70. package/dist/fragmenter.d.ts.map +0 -1
  71. package/dist/index.cjs +0 -59
  72. package/dist/index.d.cts +0 -12
  73. package/dist/index.d.ts.map +0 -1
  74. package/dist/restorer.cjs +0 -54
  75. package/dist/restorer.d.cts +0 -10
  76. package/dist/restorer.d.ts.map +0 -1
  77. package/dist/utils.cjs +0 -15
  78. package/dist/utils.d.cts +0 -6
  79. package/dist/utils.d.ts.map +0 -1
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageFragmenter = void 0;
4
- const core_1 = require("@pixzle/core");
5
- const seeded_shuffle_1 = require("@tuki0918/seeded-shuffle");
6
- const block_1 = require("./block");
7
- const constants_1 = require("./constants");
8
- const file_1 = require("./file");
9
- const utils_1 = require("./utils");
10
- class ImageFragmenter {
11
- config;
12
- constructor(config) {
13
- this.config = this._initializeConfig(config);
14
- }
15
- _initializeConfig(config) {
16
- return {
17
- blockSize: config.blockSize ?? core_1.DEFAULT_FRAGMENTATION_CONFIG.BLOCK_SIZE,
18
- prefix: config.prefix ?? core_1.DEFAULT_FRAGMENTATION_CONFIG.PREFIX,
19
- seed: config.seed || seeded_shuffle_1.SeededRandom.generateSeed(),
20
- preserveName: config.preserveName ?? core_1.DEFAULT_FRAGMENTATION_CONFIG.PRESERVE_NAME,
21
- crossImageShuffle: config.crossImageShuffle ??
22
- core_1.DEFAULT_FRAGMENTATION_CONFIG.CROSS_IMAGE_SHUFFLE,
23
- };
24
- }
25
- async fragmentImages(paths) {
26
- const { manifest, blocks, blockCountsForCrossImages, blockCountsPerImage } = await this._prepareData(paths);
27
- const shuffled = this.config.crossImageShuffle
28
- ? (0, seeded_shuffle_1.shuffle)(blocks, manifest.config.seed)
29
- : (0, block_1.blocksPerImage)(blocks, blockCountsPerImage, manifest.config.seed, seeded_shuffle_1.shuffle);
30
- const blockCounts = this.config.crossImageShuffle
31
- ? blockCountsForCrossImages
32
- : blockCountsPerImage;
33
- const fragmentedImages = await this._createImages(shuffled, blockCounts, manifest);
34
- return {
35
- manifest,
36
- fragmentedImages,
37
- };
38
- }
39
- async _createImages(blocks, blockCounts, manifest) {
40
- return await Promise.all(manifest.images.map(async (_, index) => {
41
- const { start, end } = (0, core_1.calculateBlockRange)(blockCounts, index);
42
- const imageBlocks = blocks.slice(start, end);
43
- return await this._createImage(imageBlocks, manifest.config.blockSize);
44
- }));
45
- }
46
- _createManifest(manifestId, imageInfos) {
47
- return {
48
- id: manifestId,
49
- version: constants_1.VERSION,
50
- timestamp: new Date().toISOString(),
51
- config: this.config,
52
- images: imageInfos,
53
- };
54
- }
55
- async _prepareData(paths) {
56
- const manifestId = (0, utils_1.generateManifestId)();
57
- const { imageInfos, blocks } = await this._processImages(paths);
58
- (0, core_1.validateFileNames)(imageInfos, this.config.preserveName);
59
- const manifest = this._createManifest(manifestId, imageInfos);
60
- const blockCountsForCrossImages = (0, core_1.calculateBlockCountsForCrossImages)(blocks.length, paths.length);
61
- // Calculate actual block counts per image for per-image shuffle
62
- const blockCountsPerImage = (0, core_1.calculateBlockCountsPerImage)(imageInfos);
63
- return { manifest, blocks, blockCountsForCrossImages, blockCountsPerImage };
64
- }
65
- async _processImages(paths) {
66
- const results = await Promise.all(paths.map((path) => this._processImage(path)));
67
- const imageInfos = results.map((r) => r.imageInfo);
68
- const blocks = results.flatMap((r) => r.blocks);
69
- return { imageInfos, blocks };
70
- }
71
- async _processImage(path) {
72
- const buffer = await (0, file_1.readFileBuffer)(path);
73
- const { blocks, width, height, blockCountX, blockCountY } = await (0, block_1.imageFileToBlocks)(buffer, this.config.blockSize);
74
- const imageInfo = {
75
- w: width,
76
- h: height,
77
- c: 4, // Always use 4 channels (RGBA) for generated PNG
78
- x: blockCountX,
79
- y: blockCountY,
80
- name: this.config.preserveName
81
- ? (0, core_1.encodeFileName)((0, file_1.fileNameWithoutExtension)(path))
82
- : undefined,
83
- };
84
- return { imageInfo, blocks };
85
- }
86
- async _createImage(blocks, blockSize) {
87
- const blockCount = blocks.length;
88
- const blocksPerRow = Math.ceil(Math.sqrt(blockCount));
89
- const imageWidth = blocksPerRow * blockSize;
90
- const imageHeight = Math.ceil(blockCount / blocksPerRow) * blockSize;
91
- return await (0, block_1.blocksToPngImage)(blocks, imageWidth, imageHeight, blockSize);
92
- }
93
- }
94
- exports.ImageFragmenter = ImageFragmenter;
95
- //# sourceMappingURL=fragmenter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fragmenter.js","sourceRoot":"","sources":["../../src/fragmenter.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { type FragmentationConfig, type ManifestData, type RestoreOptions, type ShuffleOptions } from "@pixzle/core";
2
- import { ImageFragmenter } from "./fragmenter";
3
- import { ImageRestorer } from "./restorer";
4
- export { ImageFragmenter, ImageRestorer, type FragmentationConfig, type ManifestData, };
5
- declare function shuffle(options: ShuffleOptions): Promise<void>;
6
- declare function restore(options: RestoreOptions): Promise<void>;
7
- declare const pixzle: {
8
- shuffle: typeof shuffle;
9
- restore: typeof restore;
10
- };
11
- export default pixzle;
12
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EAKpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EACL,eAAe,EACf,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,CAAC;AAEF,iBAAe,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB7D;AAED,iBAAe,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7D;AAED,QAAA,MAAM,MAAM;;;CAGX,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/dist/cjs/index.js DELETED
@@ -1,59 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageRestorer = exports.ImageFragmenter = void 0;
4
- const core_1 = require("@pixzle/core");
5
- const file_1 = require("./file");
6
- const fragmenter_1 = require("./fragmenter");
7
- Object.defineProperty(exports, "ImageFragmenter", { enumerable: true, get: function () { return fragmenter_1.ImageFragmenter; } });
8
- const restorer_1 = require("./restorer");
9
- Object.defineProperty(exports, "ImageRestorer", { enumerable: true, get: function () { return restorer_1.ImageRestorer; } });
10
- async function shuffle(options) {
11
- const { imagePaths, config, outputDir } = validateShuffleOptions(options);
12
- const fragmenter = new fragmenter_1.ImageFragmenter(config ?? {});
13
- const { manifest, fragmentedImages } = await fragmenter.fragmentImages(imagePaths);
14
- await (0, file_1.createDir)(outputDir, true);
15
- await (0, file_1.writeFile)(outputDir, core_1.MANIFEST_FILE_NAME, JSON.stringify(manifest, null, 2));
16
- await Promise.all(fragmentedImages.map((img, i) => {
17
- const filename = (0, core_1.generateFragmentFileName)(manifest, i);
18
- return (0, file_1.writeFile)(outputDir, filename, img);
19
- }));
20
- }
21
- async function restore(options) {
22
- const { imagePaths, manifestPath, outputDir } = validateRestoreOptions(options);
23
- const manifest = await (0, file_1.readJsonFile)(manifestPath);
24
- (0, core_1.validateFragmentImageCount)(imagePaths, manifest);
25
- const restorer = new restorer_1.ImageRestorer();
26
- const restoredImages = await restorer.restoreImages(imagePaths, manifest);
27
- await (0, file_1.createDir)(outputDir, true);
28
- const imageInfos = manifest.images;
29
- await Promise.all(restoredImages.map((img, i) => {
30
- const filename = (0, core_1.generateRestoredOriginalFileName)(imageInfos[i]) ??
31
- (0, core_1.generateRestoredFileName)(manifest, i);
32
- return (0, file_1.writeFile)(outputDir, filename, img);
33
- }));
34
- }
35
- const pixzle = {
36
- shuffle,
37
- restore,
38
- };
39
- exports.default = pixzle;
40
- function validateCommonOptions(options, context) {
41
- if (!options)
42
- throw new Error(`[${context}] Options object is required.`);
43
- const { imagePaths, outputDir } = options;
44
- if (!imagePaths || !Array.isArray(imagePaths) || imagePaths.length === 0)
45
- throw new Error(`[${context}] imagePaths must be a non-empty array.`);
46
- if (!outputDir || typeof outputDir !== "string")
47
- throw new Error(`[${context}] outputDir is required and must be a string.`);
48
- return options;
49
- }
50
- function validateShuffleOptions(options) {
51
- return validateCommonOptions(options, "shuffle");
52
- }
53
- function validateRestoreOptions(options) {
54
- const { manifestPath } = options;
55
- if (!manifestPath || typeof manifestPath !== "string")
56
- throw new Error("[restore] manifestPath is required and must be a string.");
57
- return validateCommonOptions(options, "restore");
58
- }
59
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"type":"commonjs"}
@@ -1,10 +0,0 @@
1
- import { type ManifestData } from "@pixzle/core";
2
- export declare class ImageRestorer {
3
- restoreImages(fragments: (string | Buffer)[], manifest: ManifestData): Promise<Buffer[]>;
4
- private _reconstructImages;
5
- private _prepareData;
6
- private _readBlocksFromFragment;
7
- private _readBlocks;
8
- private _createImage;
9
- }
10
- //# sourceMappingURL=restorer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"restorer.d.ts","sourceRoot":"","sources":["../../src/restorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAKlB,MAAM,cAAc,CAAC;AAKtB,qBAAa,aAAa;IAClB,aAAa,CACjB,SAAS,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC9B,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC;YAkBN,kBAAkB;YAkBlB,YAAY;YA2BZ,uBAAuB;YAgBvB,WAAW;YAaX,YAAY;CAQ3B"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImageRestorer = void 0;
4
- const core_1 = require("@pixzle/core");
5
- const seeded_shuffle_1 = require("@tuki0918/seeded-shuffle");
6
- const block_1 = require("./block");
7
- const file_1 = require("./file");
8
- class ImageRestorer {
9
- async restoreImages(fragments, manifest) {
10
- const { blocks, blockCountsPerImage } = await this._prepareData(fragments, manifest);
11
- const restored = manifest.config.crossImageShuffle
12
- ? (0, seeded_shuffle_1.unshuffle)(blocks, manifest.config.seed)
13
- : (0, block_1.blocksPerImage)(blocks, blockCountsPerImage, manifest.config.seed, seeded_shuffle_1.unshuffle);
14
- return await this._reconstructImages(restored, manifest);
15
- }
16
- async _reconstructImages(blocks, manifest) {
17
- const blockCountsPerImage = (0, core_1.calculateBlockCountsPerImage)(manifest.images);
18
- return await Promise.all(manifest.images.map(async (imageInfo, index) => {
19
- const { start, end } = (0, core_1.calculateBlockRange)(blockCountsPerImage, index);
20
- const imageBlocks = blocks.slice(start, end);
21
- return await this._createImage(imageBlocks, manifest.config.blockSize, imageInfo);
22
- }));
23
- }
24
- async _prepareData(fragments, manifest) {
25
- const totalBlocks = (0, core_1.calculateTotalBlocks)(manifest.images);
26
- const blockCountsForCrossImages = (0, core_1.calculateBlockCountsForCrossImages)(totalBlocks, fragments.length);
27
- // Calculate actual block counts per image for per-image unshuffle
28
- const blockCountsPerImage = (0, core_1.calculateBlockCountsPerImage)(manifest.images);
29
- // Use blockCountsPerImage when crossImageShuffle is false
30
- const blockCounts = manifest.config.crossImageShuffle
31
- ? blockCountsForCrossImages
32
- : blockCountsPerImage;
33
- const blocks = await this._readBlocks(fragments, manifest, blockCounts);
34
- return { blocks, blockCountsPerImage };
35
- }
36
- // Extract an array of blocks (Buffer) from a fragment image
37
- async _readBlocksFromFragment(fragment, manifest, expectedCount) {
38
- const buffer = Buffer.isBuffer(fragment)
39
- ? fragment
40
- : await (0, file_1.readFileBuffer)(fragment);
41
- const { blocks } = await (0, block_1.imageFileToBlocks)(buffer, manifest.config.blockSize);
42
- return blocks.slice(0, expectedCount);
43
- }
44
- async _readBlocks(fragments, manifest, blockCounts) {
45
- const blockGroups = await Promise.all(fragments.map((fragment, i) => this._readBlocksFromFragment(fragment, manifest, blockCounts[i])));
46
- return blockGroups.flat();
47
- }
48
- async _createImage(blocks, blockSize, imageInfo) {
49
- const { w, h } = imageInfo;
50
- return await (0, block_1.blocksToPngImage)(blocks, w, h, blockSize);
51
- }
52
- }
53
- exports.ImageRestorer = ImageRestorer;
54
- //# sourceMappingURL=restorer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"restorer.js","sourceRoot":"","sources":["../../src/restorer.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Generate a unique manifest ID
3
- * @returns A UUID string
4
- */
5
- export declare function generateManifestId(): string;
6
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
package/dist/cjs/utils.js DELETED
@@ -1,15 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.generateManifestId = generateManifestId;
7
- const node_crypto_1 = __importDefault(require("node:crypto"));
8
- /**
9
- * Generate a unique manifest ID
10
- * @returns A UUID string
11
- */
12
- function generateManifestId() {
13
- return node_crypto_1.default.randomUUID();
14
- }
15
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;;;AAMA,gDAEC;AARD,8DAAiC;AAEjC;;;GAGG;AACH,SAAgB,kBAAkB;IAChC,OAAO,qBAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC"}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VERSION = void 0;
4
- const package_json_1 = require("./../package.json");
5
- exports.VERSION = package_json_1.version;
6
- //# sourceMappingURL=constants.js.map
@@ -1,2 +0,0 @@
1
- export declare const VERSION: string;
2
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAAU,CAAC"}
@@ -1,71 +0,0 @@
1
- interface ImageFileToBlocksResult {
2
- blocks: Buffer[];
3
- width: number;
4
- height: number;
5
- channels: number;
6
- blockCountX: number;
7
- blockCountY: number;
8
- }
9
- /**
10
- * Split an RGBA image buffer into an array of blocks (Node.js Buffer wrapper)
11
- * @param buffer Source image buffer (RGBA format)
12
- * @param width Image width in pixels
13
- * @param height Image height in pixels
14
- * @param blockSize Block size in pixels
15
- * @returns Array of block buffers
16
- */
17
- export declare function splitImageToBlocks(buffer: Buffer, width: number, height: number, blockSize: number): Buffer[];
18
- /**
19
- * Reconstruct an RGBA image buffer from an array of blocks (Node.js Buffer wrapper)
20
- * @param blocks Array of block buffers
21
- * @param width Target image width in pixels
22
- * @param height Target image height in pixels
23
- * @param blockSize Block size in pixels
24
- * @returns Reconstructed image buffer
25
- */
26
- export declare function blocksToImageBuffer(blocks: Buffer[], width: number, height: number, blockSize: number): Buffer;
27
- /**
28
- * Load an image from file or buffer and split into blocks
29
- * @param input Path to the image file or Buffer containing image data
30
- * @param blockSize Block size in pixels
31
- * @returns Promise resolving to block data and image metadata
32
- */
33
- export declare function imageFileToBlocks(input: string | Buffer, blockSize: number): Promise<ImageFileToBlocksResult>;
34
- /**
35
- * Reconstruct a PNG image from blocks
36
- * @param blocks Array of block buffers
37
- * @param width Target image width in pixels
38
- * @param height Target image height in pixels
39
- * @param blockSize Block size in pixels
40
- * @returns Promise resolving to PNG buffer
41
- */
42
- export declare function blocksToPngImage(blocks: Buffer[], width: number, height: number, blockSize: number): Promise<Buffer>;
43
- /**
44
- * Extract raw RGBA image buffer from a PNG buffer using Jimp
45
- * @param pngBuffer PNG image buffer
46
- * @returns Promise resolving to image buffer and image dimensions
47
- */
48
- export declare function extractImageBufferFromPng(pngBuffer: Buffer): Promise<{
49
- imageBuffer: Buffer;
50
- width: number;
51
- height: number;
52
- }>;
53
- /**
54
- * Create a PNG buffer from raw RGBA image buffer using Jimp
55
- * @param imageBuffer Raw RGBA image buffer
56
- * @param width Image width in pixels
57
- * @param height Image height in pixels
58
- * @returns Promise resolving to PNG buffer
59
- */
60
- export declare function createPngFromImageBuffer(imageBuffer: Buffer, width: number, height: number): Promise<Buffer>;
61
- /**
62
- * Apply a function to blocks per image
63
- * @param allBlocks - All blocks to process
64
- * @param fragmentBlocksCount - Number of blocks per fragment
65
- * @param seed - Seed for the processing function
66
- * @param processFunc - Function to apply to blocks (shuffle or unshuffle)
67
- * @returns Processed blocks
68
- */
69
- export declare function blocksPerImage(allBlocks: Buffer[], fragmentBlocksCount: number[], seed: number | string, processFunc: (blocks: Buffer[], seed: number | string) => Buffer[]): Buffer[];
70
- export {};
71
- //# sourceMappingURL=block.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/block.ts"],"names":[],"mappings":"AAQA,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAgCD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAGV;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,MAAM,CASR;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,uBAAuB,CAAC,CAyBlC;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAYjE;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EAAE,EACnB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,EAAE,GACjE,MAAM,EAAE,CAYV"}
package/dist/esm/block.js DELETED
@@ -1,149 +0,0 @@
1
- import { RGBA_CHANNELS, calculateBlockCounts, blocksToImageBuffer as coreBlocksToImageBuffer, splitImageToBlocks as coreSplitImageToBlocks, } from "@pixzle/core";
2
- import { Jimp, JimpMime } from "jimp";
3
- /**
4
- * Format error message consistently
5
- * @param operation Description of the operation that failed
6
- * @param error The error that occurred
7
- * @returns Formatted error message
8
- */
9
- function formatErrorMessage(operation, error) {
10
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
11
- return `${operation}: ${errorMessage}`;
12
- }
13
- /**
14
- * Create a Jimp image from raw RGBA image buffer
15
- * @param imageBuffer Raw RGBA image buffer
16
- * @param width Image width in pixels
17
- * @param height Image height in pixels
18
- * @returns Jimp image instance
19
- */
20
- function createJimpFromImageBuffer(imageBuffer, width, height) {
21
- return new Jimp({
22
- data: imageBuffer,
23
- width,
24
- height,
25
- });
26
- }
27
- /**
28
- * Split an RGBA image buffer into an array of blocks (Node.js Buffer wrapper)
29
- * @param buffer Source image buffer (RGBA format)
30
- * @param width Image width in pixels
31
- * @param height Image height in pixels
32
- * @param blockSize Block size in pixels
33
- * @returns Array of block buffers
34
- */
35
- export function splitImageToBlocks(buffer, width, height, blockSize) {
36
- const blocks = coreSplitImageToBlocks(buffer, width, height, blockSize);
37
- return blocks.map((block) => Buffer.from(block));
38
- }
39
- /**
40
- * Reconstruct an RGBA image buffer from an array of blocks (Node.js Buffer wrapper)
41
- * @param blocks Array of block buffers
42
- * @param width Target image width in pixels
43
- * @param height Target image height in pixels
44
- * @param blockSize Block size in pixels
45
- * @returns Reconstructed image buffer
46
- */
47
- export function blocksToImageBuffer(blocks, width, height, blockSize) {
48
- const uint8Blocks = blocks.map((block) => new Uint8Array(block));
49
- const imageBuffer = coreBlocksToImageBuffer(uint8Blocks, width, height, blockSize);
50
- return Buffer.from(imageBuffer);
51
- }
52
- /**
53
- * Load an image from file or buffer and split into blocks
54
- * @param input Path to the image file or Buffer containing image data
55
- * @param blockSize Block size in pixels
56
- * @returns Promise resolving to block data and image metadata
57
- */
58
- export async function imageFileToBlocks(input, blockSize) {
59
- try {
60
- // Load and process image with Jimp (automatically converts to RGBA)
61
- const image = await Jimp.read(input);
62
- const { width, height } = image.bitmap;
63
- const channels = RGBA_CHANNELS;
64
- const imageBuffer = image.bitmap.data;
65
- // Split image into blocks
66
- const blocks = splitImageToBlocks(imageBuffer, width, height, blockSize);
67
- const blockCounts = calculateBlockCounts(width, height, blockSize);
68
- return {
69
- blocks,
70
- width,
71
- height,
72
- channels,
73
- blockCountX: blockCounts.blockCountX,
74
- blockCountY: blockCounts.blockCountY,
75
- };
76
- }
77
- catch (error) {
78
- throw new Error(`${formatErrorMessage("Failed to process image file", error)}. The manifest file may not match the image data.`);
79
- }
80
- }
81
- /**
82
- * Reconstruct a PNG image from blocks
83
- * @param blocks Array of block buffers
84
- * @param width Target image width in pixels
85
- * @param height Target image height in pixels
86
- * @param blockSize Block size in pixels
87
- * @returns Promise resolving to PNG buffer
88
- */
89
- export async function blocksToPngImage(blocks, width, height, blockSize) {
90
- try {
91
- const imageBuffer = blocksToImageBuffer(blocks, width, height, blockSize);
92
- return await createPngFromImageBuffer(imageBuffer, width, height);
93
- }
94
- catch (error) {
95
- throw new Error(formatErrorMessage("Failed to reconstruct PNG image from blocks", error));
96
- }
97
- }
98
- /**
99
- * Extract raw RGBA image buffer from a PNG buffer using Jimp
100
- * @param pngBuffer PNG image buffer
101
- * @returns Promise resolving to image buffer and image dimensions
102
- */
103
- export async function extractImageBufferFromPng(pngBuffer) {
104
- try {
105
- const image = await Jimp.read(pngBuffer);
106
- const { width, height } = image.bitmap;
107
- const imageBuffer = Buffer.from(image.bitmap.data);
108
- return { imageBuffer, width, height };
109
- }
110
- catch (error) {
111
- throw new Error(formatErrorMessage("Failed to extract image buffer from PNG", error));
112
- }
113
- }
114
- /**
115
- * Create a PNG buffer from raw RGBA image buffer using Jimp
116
- * @param imageBuffer Raw RGBA image buffer
117
- * @param width Image width in pixels
118
- * @param height Image height in pixels
119
- * @returns Promise resolving to PNG buffer
120
- */
121
- export async function createPngFromImageBuffer(imageBuffer, width, height) {
122
- try {
123
- const image = createJimpFromImageBuffer(imageBuffer, width, height);
124
- return await image.getBuffer(JimpMime.png);
125
- }
126
- catch (error) {
127
- throw new Error(formatErrorMessage("Failed to create PNG from image buffer", error));
128
- }
129
- }
130
- /**
131
- * Apply a function to blocks per image
132
- * @param allBlocks - All blocks to process
133
- * @param fragmentBlocksCount - Number of blocks per fragment
134
- * @param seed - Seed for the processing function
135
- * @param processFunc - Function to apply to blocks (shuffle or unshuffle)
136
- * @returns Processed blocks
137
- */
138
- export function blocksPerImage(allBlocks, fragmentBlocksCount, seed, processFunc) {
139
- const processedBlocks = [];
140
- let offset = 0;
141
- for (const blockCount of fragmentBlocksCount) {
142
- const imageBlocks = allBlocks.slice(offset, offset + blockCount);
143
- const processed = processFunc(imageBlocks, seed);
144
- processedBlocks.push(...processed);
145
- offset += blockCount;
146
- }
147
- return processedBlocks;
148
- }
149
- //# sourceMappingURL=block.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/block.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const VERSION: string;
2
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAAU,CAAC"}
@@ -1,3 +0,0 @@
1
- import { version } from "./../package.json";
2
- export const VERSION = version;
3
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Create a directory
3
- * @param dir Directory path
4
- * @param recursive Create parent directories if they don't exist
5
- */
6
- export declare function createDir(dir: string, recursive?: boolean): Promise<void>;
7
- /**
8
- * Write a file
9
- * @param dir Directory path
10
- * @param filename Filename
11
- * @param data Data to write
12
- * @returns Path to the file
13
- */
14
- export declare function writeFile(dir: string, filename: string, data: string | Buffer): Promise<string>;
15
- /**
16
- * Read a JSON file and return its content
17
- * @param filePath Path to the JSON file
18
- * @returns Content of the JSON file
19
- */
20
- export declare function readJsonFile<T>(filePath: string): Promise<T>;
21
- /**
22
- * Read a file and return its content
23
- * @param filePath Path to the file
24
- * @returns Content of the file
25
- */
26
- export declare function readFileBuffer(filePath: string): Promise<Buffer>;
27
- /**
28
- * Get the filename without the extension
29
- * @param filePath Path to the file
30
- * @returns Filename without the extension
31
- */
32
- export declare function fileNameWithoutExtension(filePath: string): string;
33
- //# sourceMappingURL=file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/file.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,UAAQ,iBAE7D;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GAAG,MAAM,mBAKtB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAElE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE"}