1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /* eslint-disable no-use-before-define */
- const proto = exports;
- const { isObject } = require('../utils/isObject');
- const { isArray } = require('../utils/isArray');
- proto.getBucketVersions = getBucketVersions;
- proto.listObjectVersions = getBucketVersions;
- async function getBucketVersions(query = {}, options = {}) {
- // prefix, key-marker, max-keys, delimiter, encoding-type, version-id-marker
- if (query.versionIdMarker && query.keyMarker === undefined) {
- throw new Error('A version-id marker cannot be specified without a key marker');
- }
- options.subres = Object.assign({ versions: '' }, options.subres);
- if (options.versionId) {
- options.subres.versionId = options.versionId;
- }
- const params = this._objectRequestParams('GET', '', options);
- params.xmlResponse = true;
- params.successStatuses = [200];
- params.query = formatQuery(query);
- const result = await this.request(params);
- let objects = result.data.Version || [];
- let deleteMarker = result.data.DeleteMarker || [];
- const that = this;
- if (objects) {
- if (!Array.isArray(objects)) {
- objects = [objects];
- }
- objects = objects.map(obj => ({
- name: obj.Key,
- url: that._objectUrl(obj.Key),
- lastModified: obj.LastModified,
- isLatest: obj.IsLatest === 'true',
- versionId: obj.VersionId,
- etag: obj.ETag,
- type: obj.Type,
- size: Number(obj.Size),
- storageClass: obj.StorageClass,
- owner: {
- id: obj.Owner.ID,
- displayName: obj.Owner.DisplayName
- }
- }));
- }
- if (deleteMarker) {
- if (!isArray(deleteMarker)) {
- deleteMarker = [deleteMarker];
- }
- deleteMarker = deleteMarker.map(obj => ({
- name: obj.Key,
- lastModified: obj.LastModified,
- versionId: obj.VersionId,
- owner: {
- id: obj.Owner.ID,
- displayName: obj.Owner.DisplayName
- }
- }));
- }
- let prefixes = result.data.CommonPrefixes || null;
- if (prefixes) {
- if (!isArray(prefixes)) {
- prefixes = [prefixes];
- }
- prefixes = prefixes.map(item => item.Prefix);
- }
- return {
- res: result.res,
- objects,
- deleteMarker,
- prefixes,
- // attirbute of legacy error
- nextMarker: result.data.NextKeyMarker || null,
- // attirbute of legacy error
- NextVersionIdMarker: result.data.NextVersionIdMarker || null,
- nextKeyMarker: result.data.NextKeyMarker || null,
- nextVersionIdMarker: result.data.NextVersionIdMarker || null,
- isTruncated: result.data.IsTruncated === 'true'
- };
- }
- function camel2Line(name) {
- return name.replace(/([A-Z])/g, '-$1').toLowerCase();
- }
- function formatQuery(query = {}) {
- const obj = {};
- if (isObject(query)) {
- Object.keys(query).forEach(key => {
- obj[camel2Line(key)] = query[key];
- });
- }
- return obj;
- }
|