@lwc/dev-server-plugin-lex 9.0.1-alpha.0 → 9.1.0

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/transform.js CHANGED
@@ -30,6 +30,8 @@ const template_1 = require("./transformers/template");
30
30
  const script_1 = require("./transformers/script");
31
31
  const style_1 = require("./transformers/style");
32
32
  function transform(options, rawSource) {
33
+ // Optimization to remove fields that are not required for hmr
34
+ delete options.instrumentation;
33
35
  return {
34
36
  name: 'lwc-hmr-lex',
35
37
  transform(src, id) {
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,6CAAyC;AACzC,sDAA8D;AAC9D,kDAA0D;AAC1D,gDAAwD;AAKxD,SAAgB,SAAS,CACrB,OAAyB,EACzB,SAAqC;IAErC,OAAO;QACH,IAAI,EAAE,aAAa;QAEnB,SAAS,CAAC,GAAW,EAAE,EAAU;YAC7B,IAAI,WAAW,CAAC;YAChB,MAAM,gBAAgB,GAAqB;gBACvC,UAAU,EAAE,IAAA,wBAAU,EAAC,KAAK,CAAC;oBACzB,gGAAgG;qBAC/F,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;qBACtE,MAAM,CAAC,KAAK,CAAC;gBAClB,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;gBACxD,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE;aACpD,CAAC;YACF,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvB,KAAK,OAAO;oBACR,WAAW,GAAG,8BAAmB,CAAC;oBAClC,MAAM;gBAEV,KAAK,MAAM;oBACP,WAAW,GAAG,wBAAgB,CAAC;oBAC/B,MAAM;gBAEV,KAAK,KAAK,CAAC;gBACX,KAAK,KAAK;oBACN,WAAW,GAAG,0BAAiB,CAAC;oBAChC,MAAM;gBAEV;oBACI,MAAM;YACd,CAAC;YACD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,CAAC;KACJ,CAAC;AACN,CAAC;AArCD,8BAqCC"}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,6CAAyC;AACzC,sDAA8D;AAC9D,kDAA0D;AAC1D,gDAAwD;AAKxD,SAAgB,SAAS,CACrB,OAAyB,EACzB,SAAqC;IAErC,8DAA8D;IAC9D,OAAO,OAAO,CAAC,eAAe,CAAC;IAC/B,OAAO;QACH,IAAI,EAAE,aAAa;QAEnB,SAAS,CAAC,GAAW,EAAE,EAAU;YAC7B,IAAI,WAAW,CAAC;YAChB,MAAM,gBAAgB,GAAqB;gBACvC,UAAU,EAAE,IAAA,wBAAU,EAAC,KAAK,CAAC;oBACzB,gGAAgG;qBAC/F,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;qBACtE,MAAM,CAAC,KAAK,CAAC;gBAClB,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;gBACxD,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE;aACpD,CAAC;YACF,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvB,KAAK,OAAO;oBACR,WAAW,GAAG,8BAAmB,CAAC;oBAClC,MAAM;gBAEV,KAAK,MAAM;oBACP,WAAW,GAAG,wBAAgB,CAAC;oBAC/B,MAAM;gBAEV,KAAK,KAAK,CAAC;gBACX,KAAK,KAAK;oBACN,WAAW,GAAG,0BAAiB,CAAC;oBAChC,MAAM;gBAEV;oBACI,MAAM;YACd,CAAC;YACD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,CAAC;KACJ,CAAC;AACN,CAAC;AAvCD,8BAuCC"}
@@ -52,24 +52,28 @@ function scriptTransformer(src, id, options, hmrModuleContext) {
52
52
  if (src.trim() === '' || id === IMPLICIT_DEFAULT_HTML_PATH) {
53
53
  return;
54
54
  }
55
- // Add hmr hooks only for entry js file and modules that represent a component
56
- if (path.parse(id).name !== options.name || !src.includes(REGISTER_COMPONENT_MARKER)) {
57
- return;
58
- }
55
+ const isComponentEntryFile = path.parse(id).name === options.name && src.includes(REGISTER_COMPONENT_MARKER);
59
56
  try {
60
- const pre = `import { hot as __lwc_hmr_hot, swapComponent as __lwc_hmr_swapComponent } from 'lwc';\n`;
61
- const post = `
57
+ let pre = `import { hot as __lwc_hmr_hot } from 'lwc';\n`;
58
+ if (isComponentEntryFile) {
59
+ pre += `import { swapComponent as __lwc_hmr_swapComponent } from 'lwc';\n`;
60
+ }
61
+ let post = `
62
62
  export const __lwc_hmr_context = { moduleHash : '${hmrModuleContext.moduleHash}' };
63
63
  if (__lwc_hmr_hot) {
64
64
  __lwc_hmr_hot.register('${hmrModuleContext.modulePath}', '${hmrModuleContext.moduleHash}', ${JSON.stringify(options)});
65
+ }`;
66
+ // Add hmr accept callback only for entry js file and modules that represent a component
67
+ if (isComponentEntryFile) {
68
+ post += `
69
+ if (__lwc_hmr_hot) {
65
70
  __lwc_hmr_hot.accept('${hmrModuleContext.modulePath}', (mod) => {
66
- const { __lwc_hmr_context: __new__lwc_hmr_context, default: __new_component } = mod;
67
- if (__lwc_hmr_context.moduleHash !== __new__lwc_hmr_context.moduleHash) {
68
- __lwc_hmr_swapComponent(${COMPONENT_CLASS_ID}, __new_component);
69
- }
71
+ const { default: __new_component } = mod;
72
+ __lwc_hmr_swapComponent(${COMPONENT_CLASS_ID}, __new_component);
70
73
  });
71
74
  }
72
75
  `;
76
+ }
73
77
  const magicString = new magic_string_1.default(src);
74
78
  magicString.prepend(pre);
75
79
  magicString.append(post);
@@ -1 +1 @@
1
- {"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/transformers/script.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,gEAAuC;AACvC,wCAA0E;AAK1E,MAAM,0BAA0B,GAAG,8BAA8B,CAAC;AAClE,MAAM,yBAAyB,GAAG,yCAAyC,CAAC;AAC5E,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;GAcG;AACH,SAAgB,iBAAiB,CAC7B,GAAW,EACX,EAAU,EACV,OAAyB,EACzB,gBAAkC;IAElC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,0BAA0B,EAAE,CAAC;QACzD,OAAO;IACX,CAAC;IACD,8EAA8E;IAC9E,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACnF,OAAO;IACX,CAAC;IAED,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,yFAAyF,CAAC;QACtG,MAAM,IAAI,GAAG;mDAC8B,gBAAgB,CAAC,UAAU;;8BAEhD,gBAAgB,CAAC,UAAU,OAAO,gBAAgB,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BAC5F,gBAAgB,CAAC,UAAU;;;sCAGjB,kBAAkB;;;;CAIvD,CAAC;QACM,MAAM,WAAW,GAAG,IAAI,sBAAW,CAAC,GAAG,CAAC,CAAC;QACzC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;YACH,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;YAC5B,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAChD,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAA,iCAAwB,EAAC,0BAAiB,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;AACL,CAAC;AAtCD,8CAsCC"}
1
+ {"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/transformers/script.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,gEAAuC;AACvC,wCAA0E;AAK1E,MAAM,0BAA0B,GAAG,8BAA8B,CAAC;AAClE,MAAM,yBAAyB,GAAG,yCAAyC,CAAC;AAC5E,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;GAcG;AACH,SAAgB,iBAAiB,CAC7B,GAAW,EACX,EAAU,EACV,OAAyB,EACzB,gBAAkC;IAElC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,0BAA0B,EAAE,CAAC;QACzD,OAAO;IACX,CAAC;IACD,MAAM,oBAAoB,GACtB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACpF,IAAI,CAAC;QACD,IAAI,GAAG,GAAW,+CAA+C,CAAC;QAClE,IAAI,oBAAoB,EAAE,CAAC;YACvB,GAAG,IAAI,mEAAmE,CAAC;QAC/E,CAAC;QAED,IAAI,IAAI,GAAG;mDACgC,gBAAgB,CAAC,UAAU;;8BAEhD,gBAAgB,CAAC,UAAU,OAAO,gBAAgB,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;EACtH,CAAC;QACK,wFAAwF;QACxF,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,IAAI;;4BAEQ,gBAAgB,CAAC,UAAU;;kCAErB,kBAAkB;;;CAGnD,CAAC;QACM,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,sBAAW,CAAC,GAAG,CAAC,CAAC;QACzC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;YACH,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;YAC5B,GAAG,EAAE,WAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAChD,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAA,iCAAwB,EAAC,0BAAiB,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;AACL,CAAC;AA3CD,8CA2CC"}
@@ -54,11 +54,9 @@ export const __lwc_hmr_context = { moduleHash : '${hmrModuleContext.moduleHash}'
54
54
  if (__lwc_hmr_hot) {
55
55
  __lwc_hmr_hot.register('${hmrModuleContext.modulePath}', '${hmrModuleContext.moduleHash}', ${JSON.stringify(options)});
56
56
  __lwc_hmr_hot.accept('${hmrModuleContext.modulePath}', (mod) => {
57
- const { __lwc_hmr_context: __new__lwc_hmr_context, default: __new_styles } = mod;
58
- if (__lwc_hmr_context.moduleHash !== __new__lwc_hmr_context.moduleHash) {
59
- if(__new_styles) { // __new_styles can be undefined when the stylesheet contains only imports
60
- __lwc_hmr_swapStyle(${STYLESHEET_IDENTIFIER}, __new_styles.at(-1)); // the default stylesheet is the last element
61
- }
57
+ const { default: __new_styles } = mod;
58
+ if(__new_styles) { // __new_styles can be undefined when the stylesheet contains only imports
59
+ __lwc_hmr_swapStyle(${STYLESHEET_IDENTIFIER}, __new_styles.at(-1)); // the default stylesheet is the last element
62
60
  }
63
61
  });
64
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/transformers/style.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,wCAA0E;AAK1E,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAC5B,GAAW,EACX,EAAU,EACV,OAAyB,EACzB,gBAAkC;IAElC,IAAI,CAAC;QACD,8DAA8D;QAC9D,oDAAoD;QACpD,IACI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;YACpC,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,qBAAqB,GAAG,CAAC,EACrD,CAAC;YACC,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG;;EAEnB,GAAG;;mDAE8C,gBAAgB,CAAC,UAAU;;8BAEhD,gBAAgB,CAAC,UAAU,OAAO,gBAAgB,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BAC5F,gBAAgB,CAAC,UAAU;;;;sCAIjB,qBAAqB;;;;;CAK1D,CAAC;QACM,OAAO;YACH,IAAI;YACJ,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;SACxB,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAA,iCAAwB,EAAC,0BAAiB,CAAC,sBAAsB,EAAE,CAAC,EAAE;YACxE,QAAQ,EAAE,EAAE;SACf,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AA3CD,4CA2CC"}
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/transformers/style.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,wCAA0E;AAK1E,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAC5B,GAAW,EACX,EAAU,EACV,OAAyB,EACzB,gBAAkC;IAElC,IAAI,CAAC;QACD,8DAA8D;QAC9D,oDAAoD;QACpD,IACI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;YACpC,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,qBAAqB,GAAG,CAAC,EACrD,CAAC;YACC,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG;;EAEnB,GAAG;;mDAE8C,gBAAgB,CAAC,UAAU;;8BAEhD,gBAAgB,CAAC,UAAU,OAAO,gBAAgB,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BAC5F,gBAAgB,CAAC,UAAU;;;kCAGrB,qBAAqB;;;;CAItD,CAAC;QACM,OAAO;YACH,IAAI;YACJ,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;SACxB,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAA,iCAAwB,EAAC,0BAAiB,CAAC,sBAAsB,EAAE,CAAC,EAAE;YACxE,QAAQ,EAAE,EAAE;SACf,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAzCD,4CAyCC"}
@@ -26,12 +26,10 @@ export const __lwc_hmr_context = { moduleHash : '${hmrModuleContext.moduleHash}'
26
26
  if (typeof tmpl === 'function' && __lwc_hmr_hot) {
27
27
  __lwc_hmr_hot.register('${hmrModuleContext.modulePath}', '${hmrModuleContext.moduleHash}', ${JSON.stringify(options)});
28
28
  __lwc_hmr_hot.accept('${hmrModuleContext.modulePath}', (mod) => {
29
- const { __lwc_hmr_context: __new__lwc_hmr_context, default: __new_template } = mod;
30
- if (__lwc_hmr_context.moduleHash !== __new__lwc_hmr_context.moduleHash) {
31
- // Transfer the stylesheets from the old template to the hot template.
32
- __new_template.stylesheets = tmpl.stylesheets;
33
- __lwc_hmr_swapTemplate(tmpl, __new_template);
34
- }
29
+ const { default: __new_template } = mod;
30
+ // Transfer the stylesheets from the old template to the hot template.
31
+ __new_template.stylesheets = tmpl.stylesheets;
32
+ __lwc_hmr_swapTemplate(tmpl, __new_template);
35
33
  });
36
34
  }
37
35
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/transformers/template.ts"],"names":[],"mappings":";;;AAAA,wCAA0E;AAK1E;;;;;;;;;;;GAWG;AACH,SAAgB,mBAAmB,CAC/B,GAAW,EACX,EAAU,EACV,OAAyB,EACzB,gBAAkC;IAElC,IAAI,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QACD,MAAM,IAAI,GAAG;;EAEnB,GAAG;mDAC8C,gBAAgB,CAAC,UAAU;;8BAEhD,gBAAgB,CAAC,UAAU,OAAO,gBAAgB,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BAC5F,gBAAgB,CAAC,UAAU;;;;;;;;;CAStD,CAAC;QACM,OAAO;YACH,IAAI;YACJ,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;SACxB,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAA,iCAAwB,EAAC,0BAAiB,CAAC,sBAAsB,EAAE,CAAC,EAAE;YACxE,QAAQ,EAAE,EAAE;SACf,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAnCD,kDAmCC"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/transformers/template.ts"],"names":[],"mappings":";;;AAAA,wCAA0E;AAK1E;;;;;;;;;;;GAWG;AACH,SAAgB,mBAAmB,CAC/B,GAAW,EACX,EAAU,EACV,OAAyB,EACzB,gBAAkC;IAElC,IAAI,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QACD,MAAM,IAAI,GAAG;;EAEnB,GAAG;mDAC8C,gBAAgB,CAAC,UAAU;;8BAEhD,gBAAgB,CAAC,UAAU,OAAO,gBAAgB,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;4BAC5F,gBAAgB,CAAC,UAAU;;;;;;;CAOtD,CAAC;QACM,OAAO;YACH,IAAI;YACJ,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;SACxB,CAAC;IACN,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,IAAA,iCAAwB,EAAC,0BAAiB,CAAC,sBAAsB,EAAE,CAAC,EAAE;YACxE,QAAQ,EAAE,EAAE;SACf,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAjCD,kDAiCC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lwc/dev-server-plugin-lex",
3
3
  "description": "A rollup plugin to add Hot Module Replacement transformation to LWC components used in LEX.",
4
- "version": "9.0.1-alpha.0",
4
+ "version": "9.1.0",
5
5
  "keywords": [
6
6
  "lwc dev server",
7
7
  "lwc hmr plugin"
@@ -21,7 +21,7 @@
21
21
  "magic-string": "~0.30.10"
22
22
  },
23
23
  "peerDependencies": {
24
- "@lwc/compiler": ">=6",
25
- "@lwc/errors": ">=6"
24
+ "@lwc/compiler": ">=7",
25
+ "@lwc/errors": ">=7"
26
26
  }
27
27
  }