passkit-generator
Version:
The easiest way to generate custom Apple Wallet passes in Node.js
148 lines • 7.29 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mimeTypeSymbol = exports.freezeSymbol = exports.filesSymbol = void 0;
const tslib_1 = require("tslib");
const node_stream_1 = require("node:stream");
const node_buffer_1 = require("node:buffer");
const do_not_zip_1 = require("do-not-zip");
const Messages = tslib_1.__importStar(require("./messages.js"));
exports.filesSymbol = Symbol("bundleFiles");
exports.freezeSymbol = Symbol("bundleFreeze");
exports.mimeTypeSymbol = Symbol("bundleMimeType");
/**
* Defines a container ready to be distributed.
* If no mimeType is passed to the constructor,
* it will throw an error.
*/
class Bundle {
constructor(mimeType) {
this[_a] = {};
if (!mimeType) {
throw new Error(Messages.BUNDLE.MIME_TYPE_MISSING);
}
this[exports.mimeTypeSymbol] = mimeType;
}
/**
* Creates a bundle and exposes the
* function to freeze it manually once
* completed.
*
* This was made to not expose freeze
* function outside of Bundle class.
*
* Normally, a bundle would get freezed
* when using getAsBuffer or getAsStream
* but when creating a PKPasses archive,
* we need to freeze the bundle so the
* user cannot add more files (we want to
* allow them to only the selected files)
* but also letting them choose how to
* export it.
*
* @param mimeType
* @returns
*/
static freezable(mimeType) {
const bundle = new Bundle(mimeType);
return [bundle, () => bundle[exports.freezeSymbol]()];
}
/**
* Retrieves bundle's mimeType
*/
get mimeType() {
return this[exports.mimeTypeSymbol];
}
/**
* Freezes the bundle so no more files
* can be added any further.
*/
[(_a = exports.filesSymbol, exports.freezeSymbol)]() {
if (this.isFrozen) {
return;
}
Object.freeze(this[exports.filesSymbol]);
}
/**
* Tells if this bundle still allows files to be added.
* @returns false if files are allowed, true otherwise
*/
get isFrozen() {
return Object.isFrozen(this[exports.filesSymbol]);
}
/**
* Returns a copy of the current list of buffers
* that have been added to the class.
*
* It does not include translation files, manifest
* and signature.
*
* Final files list might differ due to export
* conditions.
*/
get files() {
return Object.keys(this[exports.filesSymbol]);
}
/**
* Allows files to be added to the bundle.
* If the bundle is closed, it will throw an error.
*
* @param fileName
* @param buffer
*/
addBuffer(fileName, buffer) {
if (this.isFrozen) {
throw new Error(Messages.BUNDLE.CLOSED);
}
this[exports.filesSymbol][fileName] = buffer;
}
/**
* Closes the bundle and returns it as a Buffer.
* Once closed, the bundle does not allow files
* to be added any further.
*
* @returns Buffer
*/
getAsBuffer() {
this[exports.freezeSymbol]();
return node_buffer_1.Buffer.from((0, do_not_zip_1.toArray)(createZipFilesMap(this[exports.filesSymbol])));
}
/**
* Closes the bundle and returns it as a stream.
* Once closed, the bundle does not allow files
* to be added any further.
*
* @returns
*/
getAsStream() {
this[exports.freezeSymbol]();
return node_stream_1.Readable.from(node_buffer_1.Buffer.from((0, do_not_zip_1.toArray)(createZipFilesMap(this[exports.filesSymbol]))));
}
/**
* Closes the bundle and returns it as an object.
* This allows developers to choose a different way
* of serving, analyzing or zipping the file, outside the
* default compression system.
*
* @returns a frozen object containing files paths as key
* and Buffers as content.
*/
getAsRaw() {
this[exports.freezeSymbol]();
return Object.freeze({ ...this[exports.filesSymbol] });
}
}
exports.default = Bundle;
/**
* Creates a files map for do-not-zip
*
* @param files
* @returns
*/
function createZipFilesMap(files) {
return Object.entries(files).map(([path, data]) => ({
path,
data,
}));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL0J1bmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUErQztBQUMvQyw2Q0FBcUM7QUFDckMsMkNBQW1EO0FBQ25ELGdFQUEwQztBQUU3QixRQUFBLFdBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDcEMsUUFBQSxZQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3RDLFFBQUEsY0FBYyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBT3ZEOzs7O0dBSUc7QUFFSCxNQUFxQixNQUFNO0lBSTFCLFlBQW1CLFFBQXdDO1FBSG5ELFFBQWEsR0FBOEIsRUFBRSxDQUFDO1FBSXJELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsc0JBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFFSSxNQUFNLENBQUMsU0FBUyxDQUN0QixRQUF3QztRQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxvQkFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUVILElBQVcsUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxzQkFBYyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUVLLE9BcERDLG1CQUFXLEVBb0RYLG9CQUFZLEVBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNSLENBQUM7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBVyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBRUgsSUFBVyxRQUFRO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUVILElBQVcsS0FBSztRQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUVJLFNBQVMsQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDaEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBRUksV0FBVztRQUNqQixJQUFJLENBQUMsb0JBQVksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxvQkFBTSxDQUFDLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLG1CQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBRUksV0FBVztRQUNqQixJQUFJLENBQUMsb0JBQVksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxzQkFBUSxDQUFDLElBQUksQ0FDbkIsb0JBQU0sQ0FBQyxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxtQkFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFFSSxRQUFRO1FBQ2QsSUFBSSxDQUFDLG9CQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNEO0FBL0lELHlCQStJQztBQUVEOzs7OztHQUtHO0FBRUgsU0FBUyxpQkFBaUIsQ0FBQyxLQUFnQztJQUMxRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSTtRQUNKLElBQUk7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMifQ==