fix: avoid package.json remap for preserve tag

This commit is contained in:
Dylan Piercey 2023-03-24 08:46:33 -07:00 committed by Dylan Piercey
parent 6ab48ca259
commit f0c697d7b5
12 changed files with 95 additions and 90 deletions

View File

@ -0,0 +1,7 @@
---
"@marko/translator-default": patch
"marko": patch
"@marko/compiler": patch
---
Avoids using a package.json remap for the browser implementation of the \_preserve internal tag (used to implement `no-update` directives). This fixes an issue where in vite the module could not be loaded properly.

View File

@ -0,0 +1,81 @@
var ComponentsContext = require("../../runtime/components/ComponentsContext");
var getComponentsContext = ComponentsContext.___getComponentsContext;
module.exports = function render(input, out) {
var isComponent = !input.n;
var shouldPreserve = !("i" in input) || input.i;
var componentsContext = out.___components;
if (typeof document === "object") {
var isHydrate =
componentsContext && componentsContext.___globalContext.___isHydrate;
var ownerComponent = out.___assignedComponentDef.___component;
var referenceComponent = ownerComponent;
var key = out.___assignedKey;
var checkKey = key;
if (key[0] !== "@") {
var parentComponent = componentsContext.___componentDef.___component;
if (ownerComponent !== parentComponent) {
referenceComponent = parentComponent;
checkKey += ":" + ownerComponent.id;
}
}
var isPreserved =
shouldPreserve &&
(isHydrate || referenceComponent.___keyedElements[checkKey]);
if (isComponent) {
out.bf(key, ownerComponent, shouldPreserve);
if (!isPreserved && input.renderBody) {
input.renderBody(out);
}
out.ef();
} else {
if (isPreserved) {
if (input.b) {
out.___parent.___preserveBody = true;
} else {
out.beginElement("", null, key, ownerComponent);
out.___parent.___preserve = true;
out.endElement();
}
} else if (input.renderBody) {
input.renderBody(out);
}
}
} else {
if (isComponent) {
out.bf(
out.___assignedKey,
out.___assignedComponentDef.___component,
true
);
}
if (input.renderBody) {
if (shouldPreserve) {
var parentPreserved = false;
if (componentsContext) {
parentPreserved = componentsContext.___isPreserved;
} else {
componentsContext = getComponentsContext(out);
}
componentsContext.___isPreserved = true;
input.renderBody(out);
componentsContext.___isPreserved = parentPreserved;
} else {
input.renderBody(out);
}
}
if (isComponent) {
out.ef();
}
}
};

View File

@ -1,45 +0,0 @@
module.exports = function render(input, out) {
var componentsContext = out.___components;
var isHydrate =
componentsContext && componentsContext.___globalContext.___isHydrate;
var ownerComponent = out.___assignedComponentDef.___component;
var shouldPreserve = !("i" in input) || input.i;
var referenceComponent = ownerComponent;
var key = out.___assignedKey;
var checkKey = key;
if (key[0] !== "@") {
var parentComponent = componentsContext.___componentDef.___component;
if (ownerComponent !== parentComponent) {
referenceComponent = parentComponent;
checkKey += ":" + ownerComponent.id;
}
}
var isPreserved = Boolean(
shouldPreserve &&
(isHydrate || referenceComponent.___keyedElements[checkKey])
);
if (input.n) {
if (isPreserved) {
if (input.b) {
out.___parent.___preserveBody = true;
} else {
out.beginElement("", null, key, ownerComponent);
out.___parent.___preserve = true;
out.endElement();
}
} else if (input.renderBody) {
input.renderBody(out);
}
} else {
out.bf(key, ownerComponent, shouldPreserve);
if (!isPreserved && input.renderBody) {
input.renderBody(out);
}
out.ef();
}
};

View File

@ -1,27 +0,0 @@
var ComponentsContext = require("../../../runtime/components/ComponentsContext");
var getComponentsContext = ComponentsContext.___getComponentsContext;
module.exports = function render(input, out) {
var shouldPreserve = Boolean(!("i" in input) || input.i);
var isComponent = !input.n;
if (isComponent) {
out.bf(out.___assignedKey, out.___assignedComponentDef.___component, true);
}
if (input.renderBody) {
if (shouldPreserve) {
var componentsContext = getComponentsContext(out);
var parentPreserved = componentsContext.___isPreserved;
componentsContext.___isPreserved = true;
input.renderBody(out);
componentsContext.___isPreserved = parentPreserved;
} else {
input.renderBody(out);
}
}
if (isComponent) {
out.ef();
}
};

View File

@ -1,11 +0,0 @@
{
"main": "./index.js",
"browser": "./index-browser.js",
"exports": {
".": {
"worker": "./index.js",
"browser": "./index-browser.js",
"default": "./index.js"
}
}
}

View File

@ -473,7 +473,7 @@ export function getRuntimeEntryFiles(output, optimize) {
`${base}runtime/helpers/render-tag.js`,
`${base}runtime/helpers/style-value.js`,
`${base}runtime/helpers/to-string.js`,
`${base}core-tags/components/preserve-tag`,
`${base}core-tags/components/preserve-tag.js`,
...(output === "html"
? [
`${base}runtime/html/index.js`,

View File

@ -264,7 +264,7 @@ export default {
]
},
"<_preserve>": {
renderer: "marko/src/core-tags/components/preserve-tag",
renderer: "marko/src/core-tags/components/preserve-tag.js",
"@n": "boolean",
"@i": "boolean",
"@b": "boolean",

View File

@ -5,7 +5,7 @@ exports.default = void 0;
var _index = require("marko/src/runtime/html/index.js");
var _index2 = _interopRequireDefault(require("./components/hello/index.marko"));
var _renderTag = _interopRequireDefault(require("marko/src/runtime/helpers/render-tag.js"));
var _preserveTag = _interopRequireDefault(require("marko/src/core-tags/components/preserve-tag"));
var _preserveTag = _interopRequireDefault(require("marko/src/core-tags/components/preserve-tag.js"));
var _renderer = _interopRequireDefault(require("marko/src/runtime/components/renderer.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const _marko_componentType = "packages/translator-default/test/fixtures/no-update-directives/template.marko",

View File

@ -4,7 +4,7 @@ const _marko_componentType = "packages/translator-default/test/fixtures/no-updat
export default _marko_template;
import _hello from "./components/hello/index.marko";
import _marko_tag from "marko/src/runtime/helpers/render-tag.js";
import _preserve from "marko/src/core-tags/components/preserve-tag";
import _preserve from "marko/src/core-tags/components/preserve-tag.js";
import _marko_renderer from "marko/src/runtime/components/renderer.js";
const _marko_component = {};
_marko_template._ = _marko_renderer(function (input, out, _componentDef, _component, state, $global) {

View File

@ -4,7 +4,7 @@ const _marko_componentType = "qUg9ApxN",
export default _marko_template;
import _hello from "./components/hello/index.marko";
import _marko_tag from "marko/dist/runtime/helpers/render-tag.js";
import _preserve from "marko/dist/core-tags/components/preserve-tag";
import _preserve from "marko/dist/core-tags/components/preserve-tag.js";
import _marko_renderer from "marko/dist/runtime/components/renderer.js";
const _marko_component = {};
_marko_template._ = _marko_renderer(function (input, out, _componentDef, _component, state, $global) {

View File

@ -4,7 +4,7 @@ const _marko_componentType = "packages/translator-default/test/fixtures/no-updat
export default _marko_template;
import _hello from "./components/hello/index.marko";
import _marko_tag from "marko/src/runtime/helpers/render-tag.js";
import _preserve from "marko/src/core-tags/components/preserve-tag";
import _preserve from "marko/src/core-tags/components/preserve-tag.js";
import _marko_renderer from "marko/src/runtime/components/renderer.js";
import { r as _marko_registerComponent } from "marko/src/runtime/components/registry";
_marko_registerComponent(_marko_componentType, () => _marko_template);

View File

@ -6,7 +6,7 @@ import _hello from "./components/hello/index.marko";
import _marko_tag from "marko/dist/runtime/helpers/render-tag.js";
import _marko_createElement from "marko/dist/runtime/vdom/helpers/v-element.js";
const _marko_node = _marko_createElement("div", null, "2", null, 0, 0);
import _preserve from "marko/dist/core-tags/components/preserve-tag";
import _preserve from "marko/dist/core-tags/components/preserve-tag.js";
const _marko_node2 = _marko_createElement("div", null, "5", null, 0, 0);
const _marko_node3 = _marko_createElement("div", null, "8", null, 0, 0);
const _marko_node4 = _marko_createElement("div", null, "11", null, 0, 0);