s3db.js 7.4.0 → 7.4.2

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/dist/s3db.es.js CHANGED
@@ -9650,7 +9650,13 @@ class Client extends EventEmitter {
9650
9650
  if (metadata) {
9651
9651
  for (const [k, v] of Object.entries(metadata)) {
9652
9652
  const validKey = String(k).replace(/[^a-zA-Z0-9\-_]/g, "_");
9653
- stringMetadata[validKey] = String(v);
9653
+ const stringValue = String(v);
9654
+ const hasSpecialChars = /[^\x00-\x7F]/.test(stringValue);
9655
+ if (hasSpecialChars) {
9656
+ stringMetadata[validKey] = Buffer.from(stringValue, "utf8").toString("base64");
9657
+ } else {
9658
+ stringMetadata[validKey] = stringValue;
9659
+ }
9654
9660
  }
9655
9661
  }
9656
9662
  const options = {
@@ -9687,6 +9693,28 @@ class Client extends EventEmitter {
9687
9693
  let response, error;
9688
9694
  try {
9689
9695
  response = await this.sendCommand(new GetObjectCommand(options));
9696
+ if (response.Metadata) {
9697
+ const decodedMetadata = {};
9698
+ for (const [key2, value] of Object.entries(response.Metadata)) {
9699
+ if (typeof value === "string") {
9700
+ try {
9701
+ const decoded = Buffer.from(value, "base64").toString("utf8");
9702
+ const hasSpecialChars = /[^\x00-\x7F]/.test(decoded);
9703
+ const isValidBase64 = Buffer.from(decoded, "utf8").toString("base64") === value;
9704
+ if (isValidBase64 && hasSpecialChars && decoded !== value) {
9705
+ decodedMetadata[key2] = decoded;
9706
+ } else {
9707
+ decodedMetadata[key2] = value;
9708
+ }
9709
+ } catch (decodeError) {
9710
+ decodedMetadata[key2] = value;
9711
+ }
9712
+ } else {
9713
+ decodedMetadata[key2] = value;
9714
+ }
9715
+ }
9716
+ response.Metadata = decodedMetadata;
9717
+ }
9690
9718
  return response;
9691
9719
  } catch (err) {
9692
9720
  error = err;
@@ -11164,6 +11192,14 @@ class Resource extends EventEmitter {
11164
11192
  this.passphrase = passphrase ?? "secret";
11165
11193
  this.versioningEnabled = versioningEnabled;
11166
11194
  this.idGenerator = this.configureIdGenerator(customIdGenerator, idSize);
11195
+ if (typeof customIdGenerator === "number" && customIdGenerator > 0) {
11196
+ this.idSize = customIdGenerator;
11197
+ } else if (typeof idSize === "number" && idSize > 0) {
11198
+ this.idSize = idSize;
11199
+ } else {
11200
+ this.idSize = 22;
11201
+ }
11202
+ this.idGeneratorType = this.getIdGeneratorType(customIdGenerator, this.idSize);
11167
11203
  this.config = {
11168
11204
  cache,
11169
11205
  hooks,
@@ -11219,7 +11255,7 @@ class Resource extends EventEmitter {
11219
11255
  */
11220
11256
  configureIdGenerator(customIdGenerator, idSize) {
11221
11257
  if (typeof customIdGenerator === "function") {
11222
- return customIdGenerator;
11258
+ return () => String(customIdGenerator());
11223
11259
  }
11224
11260
  if (typeof customIdGenerator === "number" && customIdGenerator > 0) {
11225
11261
  return customAlphabet(urlAlphabet, customIdGenerator);
@@ -11229,6 +11265,19 @@ class Resource extends EventEmitter {
11229
11265
  }
11230
11266
  return idGenerator;
11231
11267
  }
11268
+ /**
11269
+ * Get a serializable representation of the ID generator type
11270
+ * @param {Function|number} customIdGenerator - Custom ID generator function or size
11271
+ * @param {number} idSize - Size for auto-generated IDs
11272
+ * @returns {string|number} Serializable ID generator type
11273
+ * @private
11274
+ */
11275
+ getIdGeneratorType(customIdGenerator, idSize) {
11276
+ if (typeof customIdGenerator === "function") {
11277
+ return "custom_function";
11278
+ }
11279
+ return idSize;
11280
+ }
11232
11281
  /**
11233
11282
  * Get resource options (for backward compatibility with tests)
11234
11283
  */
@@ -13277,7 +13326,7 @@ class Database extends EventEmitter {
13277
13326
  super();
13278
13327
  this.version = "1";
13279
13328
  this.s3dbVersion = (() => {
13280
- const [ok, err, version] = try_fn_default(() => true ? "7.3.10" : "latest");
13329
+ const [ok, err, version] = try_fn_default(() => true ? "7.4.1" : "latest");
13281
13330
  return ok ? version : "latest";
13282
13331
  })();
13283
13332
  this.resources = {};
@@ -13348,6 +13397,18 @@ class Database extends EventEmitter {
13348
13397
  const currentVersion = resourceMetadata.currentVersion || "v0";
13349
13398
  const versionData = resourceMetadata.versions?.[currentVersion];
13350
13399
  if (versionData) {
13400
+ let restoredIdGenerator, restoredIdSize;
13401
+ if (versionData.idGenerator !== void 0) {
13402
+ if (versionData.idGenerator === "custom_function") {
13403
+ restoredIdGenerator = void 0;
13404
+ restoredIdSize = versionData.idSize || 22;
13405
+ } else if (typeof versionData.idGenerator === "number") {
13406
+ restoredIdGenerator = versionData.idGenerator;
13407
+ restoredIdSize = versionData.idSize || versionData.idGenerator;
13408
+ }
13409
+ } else {
13410
+ restoredIdSize = versionData.idSize || 22;
13411
+ }
13351
13412
  this.resources[name] = new resource_class_default({
13352
13413
  name,
13353
13414
  client: this.client,
@@ -13367,7 +13428,9 @@ class Database extends EventEmitter {
13367
13428
  autoDecrypt: versionData.autoDecrypt !== void 0 ? versionData.autoDecrypt : true,
13368
13429
  hooks: versionData.hooks || {},
13369
13430
  versioningEnabled: this.versioningEnabled,
13370
- map: versionData.map
13431
+ map: versionData.map,
13432
+ idGenerator: restoredIdGenerator,
13433
+ idSize: restoredIdSize
13371
13434
  });
13372
13435
  }
13373
13436
  }
@@ -13528,6 +13591,8 @@ class Database extends EventEmitter {
13528
13591
  autoDecrypt: resource.config.autoDecrypt,
13529
13592
  cache: resource.config.cache,
13530
13593
  hooks: resource.config.hooks,
13594
+ idSize: resource.idSize,
13595
+ idGenerator: resource.idGeneratorType,
13531
13596
  createdAt: isNewVersion ? (/* @__PURE__ */ new Date()).toISOString() : existingVersionData?.createdAt
13532
13597
  }
13533
13598
  }