jsf.js_next_gen 4.0.0-RC.24 → 4.0.0-RC.27

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 (53) hide show
  1. package/dist/window/faces-development.js +130 -33
  2. package/dist/window/faces-development.js.br +0 -0
  3. package/dist/window/faces-development.js.gz +0 -0
  4. package/dist/window/faces-development.js.map +1 -1
  5. package/dist/window/faces.js +1 -1
  6. package/dist/window/faces.js.br +0 -0
  7. package/dist/window/faces.js.gz +0 -0
  8. package/dist/window/faces.js.map +1 -1
  9. package/dist/window/jsf-development.js +130 -33
  10. package/dist/window/jsf-development.js.br +0 -0
  11. package/dist/window/jsf-development.js.gz +0 -0
  12. package/dist/window/jsf-development.js.map +1 -1
  13. package/dist/window/jsf.js +1 -1
  14. package/dist/window/jsf.js.br +0 -0
  15. package/dist/window/jsf.js.gz +0 -0
  16. package/dist/window/jsf.js.map +1 -1
  17. package/package.json +4 -4
  18. package/src/main/typescript/impl/AjaxImpl.ts +31 -3
  19. package/src/main/typescript/impl/core/Const.ts +1 -1
  20. package/src/main/typescript/impl/xhrCore/RequestDataResolver.ts +49 -2
  21. package/src/main/typescript/impl/xhrCore/Response.ts +3 -2
  22. package/src/main/typescript/impl/xhrCore/ResponseProcessor.ts +4 -4
  23. package/src/main/typescript/impl/xhrCore/XhrFormData.ts +44 -25
  24. package/src/main/typescript/impl/xhrCore/XhrRequest.ts +29 -9
  25. package/src/main/typescript/test/xhrCore/FileUploadTest.spec.ts +2 -0
  26. package/src/main/typescript/test/xhrCore/NamespacesRequestTest.spec.ts +8 -8
  27. package/src/main/typescript/test/xhrCore/ResponseTest.spec.ts +6 -5
  28. package/src/main/typescript/test/xhrCore/ResponseTest23.spec.ts +2 -2
  29. package/src/main/typescript/test/xhrCore/XhrFormDataTest.spec.ts +1 -0
  30. package/target/impl/AjaxImpl.js +19 -1
  31. package/target/impl/AjaxImpl.js.map +1 -1
  32. package/target/impl/core/Const.js +2 -2
  33. package/target/impl/core/Const.js.map +1 -1
  34. package/target/impl/xhrCore/RequestDataResolver.js +48 -1
  35. package/target/impl/xhrCore/RequestDataResolver.js.map +1 -1
  36. package/target/impl/xhrCore/Response.js +1 -1
  37. package/target/impl/xhrCore/Response.js.map +1 -1
  38. package/target/impl/xhrCore/ResponseProcessor.js +3 -3
  39. package/target/impl/xhrCore/ResponseProcessor.js.map +1 -1
  40. package/target/impl/xhrCore/XhrFormData.js +36 -19
  41. package/target/impl/xhrCore/XhrFormData.js.map +1 -1
  42. package/target/impl/xhrCore/XhrRequest.js +11 -2
  43. package/target/impl/xhrCore/XhrRequest.js.map +1 -1
  44. package/target/test/xhrCore/FileUploadTest.spec.js +1 -0
  45. package/target/test/xhrCore/FileUploadTest.spec.js.map +1 -1
  46. package/target/test/xhrCore/NamespacesRequestTest.spec.js +8 -7
  47. package/target/test/xhrCore/NamespacesRequestTest.spec.js.map +1 -1
  48. package/target/test/xhrCore/ResponseTest.spec.js +6 -3
  49. package/target/test/xhrCore/ResponseTest.spec.js.map +1 -1
  50. package/target/test/xhrCore/ResponseTest23.spec.js +2 -2
  51. package/target/test/xhrCore/ResponseTest23.spec.js.map +1 -1
  52. package/target/test/xhrCore/XhrFormDataTest.spec.js +1 -0
  53. package/target/test/xhrCore/XhrFormDataTest.spec.js.map +1 -1
@@ -520,10 +520,10 @@ class DomQuery {
520
520
  const doc = document.implementation.createHTMLDocument("");
521
521
  markup = trim(markup);
522
522
  let lowerMarkup = markup.toLowerCase();
523
- if (lowerMarkup.indexOf('<!doctype') != -1 ||
524
- lowerMarkup.indexOf('<html') != -1 ||
525
- lowerMarkup.indexOf('<head') != -1 ||
526
- lowerMarkup.indexOf('<body') != -1) {
523
+ if (lowerMarkup.search(/\<\!doctypeW+/gi) != -1 ||
524
+ lowerMarkup.search(/\<html\w+/gi) != -1 ||
525
+ lowerMarkup.search(/\<head\W+/gi) != -1 ||
526
+ lowerMarkup.search(/\<body\W+/gi) != -1) {
527
527
  doc.documentElement.innerHTML = markup;
528
528
  return new DomQuery(doc.documentElement);
529
529
  }
@@ -2760,6 +2760,12 @@ class Config extends Optional {
2760
2760
  toJson() {
2761
2761
  return JSON.stringify(this.value);
2762
2762
  }
2763
+ /**
2764
+ * returns the first config level as streeam
2765
+ */
2766
+ get stream() {
2767
+ return Stream_1.Stream.of(...Object.keys(this.value)).map(key => [key, this.value[key]]);
2768
+ }
2763
2769
  getClass() {
2764
2770
  return Config;
2765
2771
  }
@@ -4478,6 +4484,7 @@ var Implementation;
4478
4484
  assignClientWindowId(form, requestCtx);
4479
4485
  assignExecute(options, requestCtx, form, elementId);
4480
4486
  assignRender(options, requestCtx, form, elementId);
4487
+ assignNamingContainerData(internalCtx, form);
4481
4488
  //now we enqueue the request as asynchronous runnable into our request
4482
4489
  //queue and let the queue take over the rest
4483
4490
  Implementation.queueHandler.addRequestToQueue(elem, form, requestCtx, internalCtx, delay, timeout);
@@ -4650,7 +4657,9 @@ var Implementation;
4650
4657
  if (!element.isTag(Const_1.HTML_TAG_FORM)) {
4651
4658
  throw new Error(getMessage("ERR_VIEWSTATE"));
4652
4659
  }
4653
- let formData = new XhrFormData_1.XhrFormData(element);
4660
+ const dummyContext = new mona_dish_1.Config({});
4661
+ assignNamingContainerData(dummyContext, mona_dish_1.DQ.byId(form));
4662
+ let formData = new XhrFormData_1.XhrFormData(element, (0, RequestDataResolver_1.resoveNamingContainerMapper)(dummyContext));
4654
4663
  return formData.toString();
4655
4664
  }
4656
4665
  Implementation.getViewState = getViewState;
@@ -4725,6 +4734,21 @@ var Implementation;
4725
4734
  targetContext.assign(Const_1.CTX_PARAM_REQ_PASS_THR, Const_1.P_CLIENT_WINDOW).value = clientWindow;
4726
4735
  }
4727
4736
  }
4737
+ /**
4738
+ * determines the current naming container
4739
+ * and assigns it internally
4740
+ *
4741
+ * @param internalContext
4742
+ * @param formElement
4743
+ * @private
4744
+ */
4745
+ function assignNamingContainerData(internalContext, formElement) {
4746
+ const viewRootId = (0, RequestDataResolver_1.resolveViewRootId)(formElement);
4747
+ if (!!viewRootId) {
4748
+ internalContext.assign(Const_1.NAMED_VIEWROOT).value = true;
4749
+ internalContext.assign(Const_1.NAMING_CONTAINER_ID).value = viewRootId;
4750
+ }
4751
+ }
4728
4752
  /**
4729
4753
  * transforms the user values to the expected one
4730
4754
  * with the proper none all form and this handling
@@ -5175,7 +5199,7 @@ var PushImpl;
5175
5199
  * limitations under the License.
5176
5200
  */
5177
5201
  Object.defineProperty(exports, "__esModule", ({ value: true }));
5178
- exports.CTX_OPTIONS_PARAMS = exports.TIMEOUT_EVENT = exports.CLIENT_ERROR = exports.SERVER_ERROR = exports.MALFORMEDXML = exports.EMPTY_RESPONSE = exports.HTTPERROR = exports.RESPONSE_XML = exports.RESPONSE_TEXT = exports.ERROR_MESSAGE = exports.ERROR_NAME = exports.STATUS = exports.SOURCE = exports.SUCCESS = exports.COMPLETE = exports.BEGIN = exports.ON_EVENT = exports.ON_ERROR = exports.EVENT = exports.ERROR = exports.WINDOW_ID = exports.CTX_PARAM_RENDER = exports.P_BEHAVIOR_EVENT = exports.P_WINDOW_ID = exports.P_RESET_VALUES = exports.P_EVT = exports.P_RENDER_OVERRIDE = exports.P_RENDER = exports.P_EXECUTE = exports.P_AJAX = exports.IDENT_FORM = exports.IDENT_THIS = exports.IDENT_NONE = exports.IDENT_ALL = exports.HTML_CLIENT_WINDOW = exports.HTML_VIEWSTATE = exports.EMPTY_MAP = exports.EMPTY_STR = exports.EMPTY_FUNC = exports.P_RESOURCE = exports.P_VIEWBODY = exports.P_VIEWHEAD = exports.P_VIEWROOT = exports.P_CLIENT_WINDOW = exports.P_VIEWSTATE = exports.VIEW_ID = exports.PARTIAL_ID = exports.P_PARTIAL_SOURCE = exports.NAMED_VIEWROOT = exports.XML_ATTR_NAMED_VIEWROOT = void 0;
5202
+ exports.CTX_OPTIONS_PARAMS = exports.TIMEOUT_EVENT = exports.CLIENT_ERROR = exports.SERVER_ERROR = exports.MALFORMEDXML = exports.EMPTY_RESPONSE = exports.HTTPERROR = exports.RESPONSE_XML = exports.RESPONSE_TEXT = exports.ERROR_MESSAGE = exports.ERROR_NAME = exports.STATUS = exports.SOURCE = exports.SUCCESS = exports.COMPLETE = exports.BEGIN = exports.ON_EVENT = exports.ON_ERROR = exports.EVENT = exports.ERROR = exports.WINDOW_ID = exports.CTX_PARAM_RENDER = exports.P_BEHAVIOR_EVENT = exports.P_WINDOW_ID = exports.P_RESET_VALUES = exports.P_EVT = exports.P_RENDER_OVERRIDE = exports.P_RENDER = exports.P_EXECUTE = exports.P_AJAX = exports.IDENT_FORM = exports.IDENT_THIS = exports.IDENT_NONE = exports.IDENT_ALL = exports.HTML_CLIENT_WINDOW = exports.HTML_VIEWSTATE = exports.EMPTY_MAP = exports.EMPTY_STR = exports.EMPTY_FUNC = exports.P_RESOURCE = exports.P_VIEWBODY = exports.P_VIEWHEAD = exports.P_VIEWROOT = exports.P_CLIENT_WINDOW = exports.P_VIEWSTATE = exports.VIEW_ID = exports.NAMING_CONTAINER_ID = exports.P_PARTIAL_SOURCE = exports.NAMED_VIEWROOT = exports.XML_ATTR_NAMED_VIEWROOT = void 0;
5179
5203
  exports.XML_TAG_AFTER = exports.XML_TAG_BEFORE = exports.XML_TAG_REDIRECT = exports.XML_TAG_EXTENSION = exports.XML_TAG_ATTRIBUTES = exports.XML_TAG_ERROR = exports.XML_TAG_EVAL = exports.XML_TAG_INSERT = exports.XML_TAG_DELETE = exports.XML_TAG_UPDATE = exports.XML_TAG_CHANGES = exports.XML_TAG_PARTIAL_RESP = exports.ATTR_ID = exports.ATTR_VALUE = exports.ATTR_NAME = exports.ATTR_URL = exports.ERR_NO_PARTIAL_RESPONSE = exports.PHASE_PROCESS_RESPONSE = exports.SEL_RESPONSE_XML = exports.SEL_CLIENT_WINDOW_ELEM = exports.SEL_VIEWSTATE_ELEM = exports.HTML_TAG_STYLE = exports.HTML_TAG_SCRIPT = exports.HTML_TAG_LINK = exports.HTML_TAG_BODY = exports.HTML_TAG_FORM = exports.HTML_TAG_HEAD = exports.STD_ACCEPT = exports.NO_TIMEOUT = exports.MULTIPART = exports.URL_ENCODED = exports.STATE_EVT_COMPLETE = exports.STATE_EVT_TIMEOUT = exports.STATE_EVT_BEGIN = exports.REQ_TYPE_POST = exports.REQ_TYPE_GET = exports.ENCODED_URL = exports.VAL_AJAX = exports.REQ_ACCEPT = exports.HEAD_FACES_REQ = exports.CONTENT_TYPE = exports.CTX_PARAM_REQ_PASS_THR = exports.CTX_PARAM_SRC_CTL_ID = exports.CTX_PARAM_SRC_FRM_ID = exports.CTX_PARAM_MF_INTERNAL = exports.CTX_OPTIONS_EXECUTE = exports.CTX_OPTIONS_RESET = exports.CTX_OPTIONS_TIMEOUT = exports.DELAY_NONE = exports.CTX_OPTIONS_DELAY = void 0;
5180
5204
  exports.$nsp = exports.$faces = exports.UNKNOWN = exports.MAX_RECONNECT_ATTEMPTS = exports.RECONNECT_INTERVAL = exports.APPLIED_CLIENT_WINDOW = exports.APPLIED_VST = exports.REASON_EXPIRED = exports.MF_NONE = exports.MYFACES = exports.DEFERRED_HEAD_INSERTS = exports.UPDATE_ELEMS = exports.UPDATE_FORMS = exports.XML_TAG_ATTR = void 0;
5181
5205
  /*
@@ -5184,7 +5208,7 @@ exports.$nsp = exports.$faces = exports.UNKNOWN = exports.MAX_RECONNECT_ATTEMPTS
5184
5208
  exports.XML_ATTR_NAMED_VIEWROOT = "namedViewRoot";
5185
5209
  exports.NAMED_VIEWROOT = "namedViewRoot";
5186
5210
  exports.P_PARTIAL_SOURCE = "jakarta.faces.source";
5187
- exports.PARTIAL_ID = "partialId";
5211
+ exports.NAMING_CONTAINER_ID = "myfaces.partialId";
5188
5212
  exports.VIEW_ID = "myfaces.viewId";
5189
5213
  exports.P_VIEWSTATE = "jakarta.faces.ViewState";
5190
5214
  exports.P_CLIENT_WINDOW = "jakarta.faces.ClientWindow";
@@ -6507,7 +6531,7 @@ exports.EventData = EventData;
6507
6531
  * limitations under the License.
6508
6532
  */
6509
6533
  Object.defineProperty(exports, "__esModule", ({ value: true }));
6510
- exports.resolveDefaults = exports.getEventTarget = exports.resolveWindowId = exports.resolveDelay = exports.resolveTimeout = exports.resolveViewId = exports.resolveForm = exports.resolveFinalUrl = exports.resolveTargetUrl = exports.resolveHandlerFunc = void 0;
6534
+ exports.resolveDefaults = exports.getEventTarget = exports.resolveWindowId = exports.resolveDelay = exports.resolveTimeout = exports.resoveConfigNamingContainerMapper = exports.resoveNamingContainerMapper = exports.resolveViewRootId = exports.resolveViewId = exports.resolveForm = exports.resolveFinalUrl = exports.resolveTargetUrl = exports.resolveHandlerFunc = void 0;
6511
6535
  const mona_dish_1 = __webpack_require__(/*! mona-dish */ "./node_modules/mona-dish/src/main/typescript/index_core.ts");
6512
6536
  const Const_1 = __webpack_require__(/*! ../core/Const */ "./src/main/typescript/impl/core/Const.ts");
6513
6537
  const Lang_1 = __webpack_require__(/*! ../util/Lang */ "./src/main/typescript/impl/util/Lang.ts");
@@ -6528,6 +6552,7 @@ const Assertions_1 = __webpack_require__(/*! ../util/Assertions */ "./src/main/t
6528
6552
  * @param funcName
6529
6553
  */
6530
6554
  function resolveHandlerFunc(requestContext, responseContext, funcName) {
6555
+ responseContext = responseContext || new mona_dish_1.Config({});
6531
6556
  return responseContext.getIf(funcName)
6532
6557
  .orElseLazy(() => requestContext.getIf(funcName).value)
6533
6558
  .orElse(Const_1.EMPTY_FUNC).value;
@@ -6566,6 +6591,52 @@ function resolveViewId(form) {
6566
6591
  return form.id.value.indexOf(viewStateViewId) === 0 ? viewStateViewId : "";
6567
6592
  }
6568
6593
  exports.resolveViewId = resolveViewId;
6594
+ function resolveViewRootId(form) {
6595
+ const viewState = form.querySelectorAll(`input[type='hidden'][name*='${(0, Const_1.$nsp)(Const_1.P_VIEWSTATE)}']`).attr("name").orElse("").value;
6596
+ const divider = (0, Const_1.$faces)().separatorchar;
6597
+ const viewId = viewState.split(divider, 2)[0];
6598
+ //different to the identifier the form id is never prepended to the viewstate
6599
+ return viewId.indexOf((0, Const_1.$nsp)(Const_1.P_VIEWSTATE)) === -1 ? viewId : "";
6600
+ }
6601
+ exports.resolveViewRootId = resolveViewRootId;
6602
+ /**
6603
+ * as per jsdoc before the request it must be ensured that every post argument
6604
+ * is prefixed with the naming container id (there is an exception in mojarra with
6605
+ * the element=element param, which we have to follow here as well.
6606
+ * (inputs are prefixed by name anyway normally this only affects our standard parameters)
6607
+ * @private
6608
+ */
6609
+ function resoveNamingContainerMapper(internalContext) {
6610
+ const isNamedViewRoot = internalContext.getIf(Const_1.NAMED_VIEWROOT).isPresent();
6611
+ if (!isNamedViewRoot) {
6612
+ return;
6613
+ }
6614
+ const partialId = internalContext.getIf(Const_1.NAMING_CONTAINER_ID).value;
6615
+ const SEP = (0, Const_1.$faces)().separatorchar;
6616
+ const prefix = partialId + SEP;
6617
+ return (key, value) => (key.indexOf(prefix) == 0) ? [key, value] : [prefix + key, value];
6618
+ }
6619
+ exports.resoveNamingContainerMapper = resoveNamingContainerMapper;
6620
+ /**
6621
+ * we provide the same for configs
6622
+ * @param internalContext
6623
+ */
6624
+ function resoveConfigNamingContainerMapper(internalContext) {
6625
+ const isNamedViewRoot = internalContext.getIf(Const_1.NAMED_VIEWROOT).isPresent();
6626
+ if (!isNamedViewRoot) {
6627
+ return;
6628
+ }
6629
+ const partialId = internalContext.getIf(Const_1.NAMING_CONTAINER_ID).value;
6630
+ const SEP = (0, Const_1.$faces)().separatorchar;
6631
+ const prefix = partialId + SEP;
6632
+ return (config) => {
6633
+ let assoc = config.stream
6634
+ .map(([key, data]) => (key.indexOf(prefix) == 0) ? [key, data] : [prefix + key, data])
6635
+ .collect(new mona_dish_1.AssocArrayCollector());
6636
+ return new ExtDomQuery_1.ExtConfig(assoc);
6637
+ };
6638
+ }
6639
+ exports.resoveConfigNamingContainerMapper = resoveConfigNamingContainerMapper;
6569
6640
  function resolveTimeout(options) {
6570
6641
  var _a;
6571
6642
  let getCfg = Lang_1.ExtLang.getLocalOrGlobalConfig;
@@ -6846,7 +6917,7 @@ var Response;
6846
6917
  // under or in body as identifier
6847
6918
  var _a;
6848
6919
  let partialId = (_a = node === null || node === void 0 ? void 0 : node.id) === null || _a === void 0 ? void 0 : _a.value;
6849
- internalContext.assignIf(!!partialId, Const_1.PARTIAL_ID).value = partialId; // second case mojarra
6920
+ internalContext.assignIf(!!partialId, Const_1.NAMING_CONTAINER_ID).value = partialId; // second case mojarra
6850
6921
  // there must be at least one container viewstate element resembling the viewroot that we know
6851
6922
  // this is named
6852
6923
  responseProcessor.updateNamedViewRootState();
@@ -7243,7 +7314,7 @@ class ResponseProcessor {
7243
7314
  fixViewStates() {
7244
7315
  mona_dish_1.Stream.ofAssoc(this.internalContext.getIf(Const_1.APPLIED_VST).orElse({}).value)
7245
7316
  .each(([, value]) => {
7246
- const namingContainerId = this.internalContext.getIf(Const_1.PARTIAL_ID);
7317
+ const namingContainerId = this.internalContext.getIf(Const_1.NAMING_CONTAINER_ID);
7247
7318
  const namedViewRoot = !!this.internalContext.getIf(Const_1.NAMED_VIEWROOT).value;
7248
7319
  const affectedForms = this.getContainerForms(namingContainerId)
7249
7320
  .filter(affectedForm => this.isInExecuteOrRender(affectedForm));
@@ -7257,7 +7328,7 @@ class ResponseProcessor {
7257
7328
  fixClientWindow() {
7258
7329
  mona_dish_1.Stream.ofAssoc(this.internalContext.getIf(Const_1.APPLIED_CLIENT_WINDOW).orElse({}).value)
7259
7330
  .each(([, value]) => {
7260
- const namingContainerId = this.internalContext.getIf(Const_1.PARTIAL_ID);
7331
+ const namingContainerId = this.internalContext.getIf(Const_1.NAMING_CONTAINER_ID);
7261
7332
  const namedViewRoot = !!this.internalContext.getIf(Const_1.NAMED_VIEWROOT).value;
7262
7333
  const affectedForms = this.getContainerForms(namingContainerId)
7263
7334
  .filter(affectedForm => this.isInExecuteOrRender(affectedForm));
@@ -7265,7 +7336,7 @@ class ResponseProcessor {
7265
7336
  });
7266
7337
  }
7267
7338
  updateNamedViewRootState() {
7268
- let partialId = this.internalContext.getIf(Const_1.PARTIAL_ID);
7339
+ let partialId = this.internalContext.getIf(Const_1.NAMING_CONTAINER_ID);
7269
7340
  let namedViewRoot = this.internalContext.getIf(Const_1.NAMED_VIEWROOT);
7270
7341
  if (partialId.isPresent() &&
7271
7342
  (namedViewRoot.isAbsent() ||
@@ -7465,6 +7536,7 @@ const mona_dish_1 = __webpack_require__(/*! mona-dish */ "./node_modules/mona-di
7465
7536
  const Const_1 = __webpack_require__(/*! ../core/Const */ "./src/main/typescript/impl/core/Const.ts");
7466
7537
  var isString = mona_dish_1.Lang.isString;
7467
7538
  const ExtDomQuery_1 = __webpack_require__(/*! ../util/ExtDomQuery */ "./src/main/typescript/impl/util/ExtDomQuery.ts");
7539
+ const defaultParamsMapper = (key, item) => [key, item];
7468
7540
  /**
7469
7541
  * A unified form data class
7470
7542
  * which builds upon our configuration.
@@ -7486,9 +7558,10 @@ class XhrFormData extends mona_dish_1.Config {
7486
7558
  * @param executes the executes id list for the elements to being processed
7487
7559
  * @param partialIds partial ids to collect, to reduce the data sent down
7488
7560
  */
7489
- constructor(dataSource, viewState, executes, partialIds) {
7561
+ constructor(dataSource, paramsMapper = defaultParamsMapper, viewState, executes, partialIds) {
7490
7562
  super({});
7491
7563
  this.dataSource = dataSource;
7564
+ this.paramsMapper = paramsMapper;
7492
7565
  this.partialIds = partialIds;
7493
7566
  /**
7494
7567
  * Checks if the given datasource is a multipart request source
@@ -7502,9 +7575,9 @@ class XhrFormData extends mona_dish_1.Config {
7502
7575
  //a call from getViewState passes the form element as datasource,
7503
7576
  //so we have two call points
7504
7577
  // atm we basically encode twice, to keep the code leaner
7505
- // this will be later optmized, practically elements
7506
- // which are already covered by an external viewstate do not need
7507
- // the encoding a second time, because they are overwritten by the viewstate again
7578
+ // this will be later optimized, practically elements
7579
+ // which are already covered by an external ViewState do not need
7580
+ // the encoding a second time, because they are overwritten by the ViewState again
7508
7581
  if (isString(dataSource)) {
7509
7582
  this.assignEncodedString(this.dataSource);
7510
7583
  }
@@ -7554,17 +7627,17 @@ class XhrFormData extends mona_dish_1.Config {
7554
7627
  * @param form the form holding the view state value
7555
7628
  */
7556
7629
  applyViewState(form) {
7557
- let viewStateElement = form.querySelectorAllDeep(`[name*='${Const_1.P_VIEWSTATE}'`);
7630
+ let viewStateElement = form.querySelectorAllDeep(`[name*='${(0, Const_1.$nsp)(Const_1.P_VIEWSTATE)}'`);
7558
7631
  let viewState = viewStateElement.inputValue;
7559
- // this.appendIf(viewState.isPresent(), P_VIEWSTATE).value = viewState.value;
7560
- this.appendIf(viewState.isPresent(), viewStateElement.name.value).value = viewState.value;
7632
+ let viewStateName = viewStateElement.name.value;
7633
+ this.assignIf(viewState.isPresent(), viewStateName).value = [viewState.value];
7561
7634
  }
7562
7635
  /**
7563
7636
  * assigns an url encoded string to this xhrFormData object
7564
7637
  * as key value entry
7565
7638
  * @param encoded
7566
7639
  */
7567
- assignEncodedString(encoded) {
7640
+ assignEncodedString(encoded, overwrite = true) {
7568
7641
  // this code filters out empty strings as key value pairs
7569
7642
  let keyValueEntries = decodeURIComponent(encoded).split(/&/gi)
7570
7643
  .filter(item => !!(item || '')
@@ -7575,7 +7648,7 @@ class XhrFormData extends mona_dish_1.Config {
7575
7648
  * assign a set of key value pairs passed as array ['key=val1', 'key2=val2']
7576
7649
  * @param keyValueEntries
7577
7650
  */
7578
- assignString(keyValueEntries) {
7651
+ assignString(keyValueEntries, overwrite = true) {
7579
7652
  let toMerge = new ExtDomQuery_1.ExtConfig({});
7580
7653
  function splitToKeyVal(line) {
7581
7654
  return line.split(/=(.*)/gi);
@@ -7584,19 +7657,20 @@ class XhrFormData extends mona_dish_1.Config {
7584
7657
  var _a, _b;
7585
7658
  return keyVal.length < 3 ? [(_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal[0]) !== null && _a !== void 0 ? _a : [], (_b = keyVal === null || keyVal === void 0 ? void 0 : keyVal[1]) !== null && _b !== void 0 ? _b : []] : keyVal;
7586
7659
  }
7587
- //TODO fix files...
7588
7660
  mona_dish_1.Stream.of(...keyValueEntries)
7589
7661
  .map(line => splitToKeyVal(line))
7590
7662
  //special case of having keys without values
7591
7663
  .map(keyVal => fixKeyWithoutVal(keyVal))
7664
+ .map(keyVal => this.paramsMapper(keyVal[0], keyVal[1]))
7592
7665
  .each(keyVal => {
7593
7666
  var _a, _b;
7594
7667
  toMerge.append(keyVal[0]).value = (_b = (_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal.splice(1)) === null || _a === void 0 ? void 0 : _a.join("")) !== null && _b !== void 0 ? _b : "";
7595
7668
  });
7596
7669
  //merge with overwrite but no append! (aka no double entries are allowed)
7597
- this.shallowMerge(toMerge);
7670
+ this.shallowMerge(toMerge, overwrite);
7598
7671
  }
7599
7672
  /**
7673
+ * @param paramsMapper ... pre encode the params if needed, default is to map them 1:1
7600
7674
  * @returns a Form data representation, this is needed for file submits
7601
7675
  */
7602
7676
  toFormData() {
@@ -7621,10 +7695,12 @@ class XhrFormData extends mona_dish_1.Config {
7621
7695
  }
7622
7696
  let entries = mona_dish_1.LazyStream.of(...Object.keys(this.value))
7623
7697
  .filter(key => this.value.hasOwnProperty(key))
7624
- .flatMap(key => mona_dish_1.Stream.of(...this.value[key]).map(val => [key, val])
7698
+ .flatMap(key => mona_dish_1.Stream.of(...this.value[key])
7699
+ .map(val => {
7700
+ return this.paramsMapper(key, val);
7701
+ }))
7625
7702
  //we cannot encode file elements that is handled by multipart requests anyway
7626
7703
  .filter(([, value]) => !(value instanceof ExtDomQuery_1.ExtDomQuery.global().File))
7627
- .collect(new mona_dish_1.ArrayCollector()))
7628
7704
  .map(keyVal => {
7629
7705
  return `${encodeURIComponent(keyVal[0])}=${encodeURIComponent(keyVal[1])}`;
7630
7706
  })
@@ -7657,7 +7733,7 @@ class XhrFormData extends mona_dish_1.Config {
7657
7733
  *
7658
7734
  */
7659
7735
  this.encodeSubmittableFields(this, this.dataSource, this.partialIds);
7660
- if (this.getIf(Const_1.P_VIEWSTATE).isPresent()) {
7736
+ if (this.getIf((0, Const_1.$nsp)(Const_1.P_VIEWSTATE)).isPresent()) {
7661
7737
  return;
7662
7738
  }
7663
7739
  this.applyViewState(this.dataSource);
@@ -7682,13 +7758,25 @@ class XhrFormData extends mona_dish_1.Config {
7682
7758
  toEncode = parentItem;
7683
7759
  }
7684
7760
  //lets encode the form elements
7685
- this.shallowMerge(toEncode.deepElements.encodeFormElement());
7761
+ let formElements = toEncode.deepElements.encodeFormElement();
7762
+ const mapped = this.remapKeysForNamingContainer(formElements);
7763
+ this.shallowMerge(mapped);
7764
+ }
7765
+ remapKeysForNamingContainer(formElements) {
7766
+ let ret = new mona_dish_1.Config({});
7767
+ formElements.stream
7768
+ .map(([key, item]) => this.paramsMapper(key, item))
7769
+ .each(([key, item]) => {
7770
+ ret.assign(key).value = item;
7771
+ });
7772
+ return ret;
7686
7773
  }
7687
7774
  appendInputs(ret) {
7688
- mona_dish_1.Stream.of(...Object.keys(this.value))
7689
- .each(key => {
7690
- mona_dish_1.Stream.of(...this.value[key]).each(item => ret.append(key, item));
7691
- });
7775
+ mona_dish_1.Stream.ofAssoc(this.value)
7776
+ .flatMap(([key, item]) => mona_dish_1.Stream.of(...item).map(item => {
7777
+ return { key, item };
7778
+ }))
7779
+ .each(({ key, item }) => ret.append(key, item));
7692
7780
  }
7693
7781
  }
7694
7782
  exports.XhrFormData = XhrFormData;
@@ -7788,6 +7876,8 @@ class XhrRequest {
7788
7876
  };
7789
7877
  try {
7790
7878
  let formElement = this.sourceForm.getAsElem(0).value;
7879
+ // by spec the viewstate must be called to provide
7880
+ // decorated encoding capabilities
7791
7881
  let viewState = (0, Const_1.$faces)().getViewState(formElement);
7792
7882
  // encoded we need to decode
7793
7883
  // We generated a base representation of the current form
@@ -7797,8 +7887,11 @@ class XhrRequest {
7797
7887
  // whatever the formData object delivers
7798
7888
  // the partialIdsArray arr is almost deprecated legacy code where we allowed to send a separate list of partial
7799
7889
  // ids for reduced load and server processing, this will be removed soon, we can handle the same via execute
7800
- // anyway TODO remove the partial ids array
7801
- let formData = new XhrFormData_1.XhrFormData(this.sourceForm, viewState, executesArr(), this.partialIdsArray);
7890
+ // anyway
7891
+ // per spec every parameter sent into the request must be naming container
7892
+ // prefixed
7893
+ const namingContainerMapper = (0, RequestDataResolver_1.resoveNamingContainerMapper)(this.internalContext);
7894
+ let formData = new XhrFormData_1.XhrFormData(this.sourceForm, namingContainerMapper, viewState, executesArr(), this.partialIdsArray);
7802
7895
  this.contentType = formData.isMultipartRequest ? "undefined" : this.contentType;
7803
7896
  // next step the pass through parameters are merged in for post params
7804
7897
  this.requestContext.$nspEnabled = false;
@@ -7809,6 +7902,10 @@ class XhrRequest {
7809
7902
  // this can be used and is used in the impl to enrich the post request parameters with additional
7810
7903
  // information
7811
7904
  try {
7905
+ // per spec every param sent down needs to be remapped
7906
+ // and prefixed by the naming container id
7907
+ let configNamingContainerMapper = (0, RequestDataResolver_1.resoveConfigNamingContainerMapper)(this.internalContext);
7908
+ // requestPassThroughParams = configNamingContainerMapper(requestPassThroughParams);
7812
7909
  formData.shallowMerge(requestPassThroughParams, true, true);
7813
7910
  }
7814
7911
  finally {
Binary file
Binary file