modelId.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. function getSetId(model, maybeId) {
  2. if (maybeId !== undefined) {
  3. return setId(model, maybeId);
  4. } else {
  5. return getId(model);
  6. }
  7. }
  8. function hasId(model) {
  9. return model.$hasProps(model.constructor.getIdPropertyArray());
  10. }
  11. function setId(model, id) {
  12. const idProp = model.constructor.getIdProperty();
  13. const isCompositeId = Array.isArray(idProp);
  14. if (Array.isArray(id)) {
  15. if (isCompositeId) {
  16. if (id.length !== idProp.length) {
  17. throw new Error('trying to set an invalid identifier for a model');
  18. }
  19. for (let i = 0; i < id.length; ++i) {
  20. model[idProp[i]] = id[i];
  21. }
  22. } else {
  23. if (id.length !== 1) {
  24. throw new Error('trying to set an invalid identifier for a model');
  25. }
  26. model[idProp] = id[0];
  27. }
  28. } else {
  29. if (isCompositeId) {
  30. if (idProp.length > 1) {
  31. throw new Error('trying to set an invalid identifier for a model');
  32. }
  33. model[idProp[0]] = id;
  34. } else {
  35. model[idProp] = id;
  36. }
  37. }
  38. }
  39. function getId(model) {
  40. const idProp = model.constructor.getIdProperty();
  41. const isCompositeId = Array.isArray(idProp);
  42. if (isCompositeId) {
  43. return model.$values(idProp);
  44. } else {
  45. return model[idProp];
  46. }
  47. }
  48. function isNullOrUndefined(val) {
  49. return val === null || val === undefined;
  50. }
  51. module.exports = {
  52. getSetId,
  53. hasId
  54. };