@typed/template 0.3.0 → 0.3.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/cjs/internal/EventSource.js +46 -19
- package/dist/cjs/internal/EventSource.js.map +1 -1
- package/dist/cjs/internal/chunks.js +15 -1
- package/dist/cjs/internal/chunks.js.map +1 -1
- package/dist/cjs/internal/errors.js +4 -0
- package/dist/cjs/internal/errors.js.map +1 -1
- package/dist/cjs/internal/hydrate.js +92 -58
- package/dist/cjs/internal/hydrate.js.map +1 -1
- package/dist/cjs/internal/parser.js +14 -6
- package/dist/cjs/internal/parser.js.map +1 -1
- package/dist/cjs/internal/render.js +17 -151
- package/dist/cjs/internal/render.js.map +1 -1
- package/dist/dts/internal/EventSource.d.ts.map +1 -1
- package/dist/dts/internal/chunks.d.ts +1 -0
- package/dist/dts/internal/chunks.d.ts.map +1 -1
- package/dist/dts/internal/errors.d.ts +1 -0
- package/dist/dts/internal/errors.d.ts.map +1 -1
- package/dist/dts/internal/hydrate.d.ts +9 -16
- package/dist/dts/internal/hydrate.d.ts.map +1 -1
- package/dist/dts/internal/parser.d.ts.map +1 -1
- package/dist/dts/internal/render.d.ts +0 -14
- package/dist/dts/internal/render.d.ts.map +1 -1
- package/dist/esm/internal/EventSource.js +51 -21
- package/dist/esm/internal/EventSource.js.map +1 -1
- package/dist/esm/internal/chunks.js +13 -0
- package/dist/esm/internal/chunks.js.map +1 -1
- package/dist/esm/internal/errors.js +3 -0
- package/dist/esm/internal/errors.js.map +1 -1
- package/dist/esm/internal/hydrate.js +94 -56
- package/dist/esm/internal/hydrate.js.map +1 -1
- package/dist/esm/internal/parser.js +16 -7
- package/dist/esm/internal/parser.js.map +1 -1
- package/dist/esm/internal/render.js +18 -147
- package/dist/esm/internal/render.js.map +1 -1
- package/package.json +2 -2
- package/src/internal/EventSource.ts +63 -34
- package/src/internal/chunks.ts +16 -0
- package/src/internal/errors.ts +4 -0
- package/src/internal/hydrate.ts +124 -77
- package/src/internal/parser.ts +17 -8
- package/src/internal/render.ts +30 -293
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.makeEventSource = makeEventSource;
|
|
7
7
|
var _effect = /*#__PURE__*/require("effect");
|
|
8
|
+
var Fiber = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Fiber"));
|
|
8
9
|
var Runtime = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Runtime"));
|
|
9
10
|
var _ElementSource = /*#__PURE__*/require("../ElementSource");
|
|
10
11
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -12,17 +13,29 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
12
13
|
const disposable = f => ({
|
|
13
14
|
[Symbol.dispose]: f
|
|
14
15
|
});
|
|
16
|
+
const dispose = d => d[Symbol.dispose]();
|
|
15
17
|
function makeEventSource() {
|
|
16
18
|
const bubbleListeners = new Map();
|
|
17
19
|
const captureListeners = new Map();
|
|
18
20
|
function addListener(listeners, event, entry) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const sets = listeners.get(event);
|
|
22
|
+
const isOnce = entry[1].options?.once === true;
|
|
23
|
+
if (sets === undefined) {
|
|
24
|
+
const normal = new Set();
|
|
25
|
+
const once = new Set();
|
|
26
|
+
if (isOnce) {
|
|
27
|
+
once.add(entry);
|
|
28
|
+
} else {
|
|
29
|
+
normal.add(entry);
|
|
30
|
+
}
|
|
31
|
+
listeners.set(event, [normal, once]);
|
|
24
32
|
} else {
|
|
25
|
-
|
|
33
|
+
const [normal, once] = sets;
|
|
34
|
+
if (isOnce) {
|
|
35
|
+
once.add(entry);
|
|
36
|
+
} else {
|
|
37
|
+
normal.add(entry);
|
|
38
|
+
}
|
|
26
39
|
}
|
|
27
40
|
}
|
|
28
41
|
function addEventListener(element, event, handler) {
|
|
@@ -34,33 +47,43 @@ function makeEventSource() {
|
|
|
34
47
|
}
|
|
35
48
|
function setupBubbleListeners(element, run) {
|
|
36
49
|
const disposables = [];
|
|
37
|
-
for (const [event,
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
for (const [event, sets] of bubbleListeners) {
|
|
51
|
+
for (const handlers of sets) {
|
|
52
|
+
const listener = ev => run(_effect.Effect.forEach(handlers, ([el, handler]) => ev.target === el || el.contains(ev.target) ? handler.handler(ev) : _effect.Effect.unit));
|
|
53
|
+
element.addEventListener(event, listener, getDerivedAddEventListenerOptions(handlers));
|
|
54
|
+
disposables.push(disposable(() => element.removeEventListener(event, listener)));
|
|
55
|
+
}
|
|
41
56
|
}
|
|
42
57
|
return disposables;
|
|
43
58
|
}
|
|
44
59
|
function setupCaptureListeners(element, run) {
|
|
45
60
|
const disposables = [];
|
|
46
|
-
for (const [event,
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
61
|
+
for (const [event, sets] of captureListeners) {
|
|
62
|
+
for (const handlers of sets) {
|
|
63
|
+
const listener = ev => run(_effect.Effect.forEach(handlers, ([el, handler]) => ev.target === el || el.contains(ev.target) ? handler.handler(proxyCurrentTargetForCaptureEvents(ev, el)) : _effect.Effect.unit));
|
|
64
|
+
element.addEventListener(event, listener, getDerivedAddEventListenerOptions(handlers));
|
|
65
|
+
disposables.push(disposable(() => element.removeEventListener(event, listener)));
|
|
66
|
+
}
|
|
50
67
|
}
|
|
51
68
|
return disposables;
|
|
52
69
|
}
|
|
53
70
|
function setup(rendered, scope) {
|
|
54
71
|
const hasBubbleListeners = bubbleListeners.size > 0;
|
|
55
72
|
const hasCaptureListeners = captureListeners.size > 0;
|
|
56
|
-
|
|
73
|
+
const elements = (0, _ElementSource.getElements)(rendered);
|
|
74
|
+
if (elements.length === 0 || !hasBubbleListeners && !hasCaptureListeners) {
|
|
57
75
|
return _effect.Effect.unit;
|
|
58
76
|
}
|
|
59
77
|
return _effect.Effect.flatMap(_effect.Effect.runtime(), runtime => {
|
|
60
|
-
const elements = (0, _ElementSource.getElements)(rendered);
|
|
61
78
|
const disposables = [];
|
|
79
|
+
const fibers = new Map();
|
|
62
80
|
const runFork = Runtime.runFork(runtime);
|
|
63
|
-
const run = effect =>
|
|
81
|
+
const run = effect => {
|
|
82
|
+
const id = Symbol();
|
|
83
|
+
const fiber = runFork(_effect.Effect.onExit(effect, () => _effect.Effect.sync(() => fibers.delete(id))));
|
|
84
|
+
fibers.set(id, fiber);
|
|
85
|
+
return fiber;
|
|
86
|
+
};
|
|
64
87
|
for (const element of elements) {
|
|
65
88
|
if (hasBubbleListeners) {
|
|
66
89
|
disposables.push(...setupBubbleListeners(element, run));
|
|
@@ -69,7 +92,11 @@ function makeEventSource() {
|
|
|
69
92
|
disposables.push(...setupCaptureListeners(element, run));
|
|
70
93
|
}
|
|
71
94
|
}
|
|
72
|
-
return _effect.Scope.addFinalizer(scope, _effect.Effect.
|
|
95
|
+
return _effect.Scope.addFinalizer(scope, _effect.Effect.suspend(() => {
|
|
96
|
+
disposables.forEach(dispose);
|
|
97
|
+
if (fibers.size === 0) return _effect.Effect.unit;
|
|
98
|
+
return Fiber.interruptAll(fibers.values());
|
|
99
|
+
}));
|
|
73
100
|
});
|
|
74
101
|
}
|
|
75
102
|
return {
|
|
@@ -88,7 +115,7 @@ function proxyCurrentTargetForCaptureEvents(event, currentTarget) {
|
|
|
88
115
|
function getDerivedAddEventListenerOptions(entries) {
|
|
89
116
|
const hs = Array.from(entries);
|
|
90
117
|
return {
|
|
91
|
-
once: hs.
|
|
118
|
+
once: hs.every(h => h[1].options?.once === true),
|
|
92
119
|
passive: hs.every(h => h[1].options?.passive === true)
|
|
93
120
|
};
|
|
94
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventSource.js","names":["_effect","require","
|
|
1
|
+
{"version":3,"file":"EventSource.js","names":["_effect","require","Fiber","_interopRequireWildcard","Runtime","_ElementSource","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","disposable","f","Symbol","dispose","d","makeEventSource","bubbleListeners","Map","captureListeners","addListener","listeners","event","entry","sets","isOnce","options","once","undefined","normal","Set","add","addEventListener","element","handler","capture","setupBubbleListeners","run","disposables","handlers","listener","ev","Effect","forEach","el","target","contains","unit","getDerivedAddEventListenerOptions","push","removeEventListener","setupCaptureListeners","proxyCurrentTargetForCaptureEvents","setup","rendered","scope","hasBubbleListeners","size","hasCaptureListeners","elements","getElements","length","flatMap","runtime","fibers","runFork","effect","id","fiber","onExit","sync","delete","Scope","addFinalizer","suspend","interruptAll","values","EVENT_PROPERTY_TO_REPLACE","currentTarget","Proxy","property","entries","hs","Array","from","every","h","passive"],"sources":["../../../src/internal/EventSource.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getWhitespace = exports.getTextUntilPart = exports.getTextUntilCloseBrace = exports.getStrictPart = exports.getSelfClosingTagEnd = exports.getPart = exports.getOpeningTagEnd = exports.getOpeningTag = exports.getComment = exports.getClosingTag = exports.getBooleanAttribute = exports.getAttributeWithoutQuotes = exports.getAttributeWithQuotes = exports.getAllTextUntilElementClose = exports.STRICT_PART_REGEX = exports.PART_STRING = exports.PART_REGEX = void 0;
|
|
6
|
+
exports.getWhitespace = exports.getTextUntilPart = exports.getTextUntilCloseBrace = exports.getStrictPart = exports.getSelfClosingTagEnd = exports.getPart = exports.getOpeningTagEnd = exports.getOpeningTag = exports.getComment = exports.getClosingTagName = exports.getClosingTag = exports.getBooleanAttribute = exports.getAttributeWithoutQuotes = exports.getAttributeWithQuotes = exports.getAllTextUntilElementClose = exports.STRICT_PART_REGEX = exports.PART_STRING = exports.PART_REGEX = void 0;
|
|
7
7
|
const PART_STRING = i => `{{__PART${i}__}}`;
|
|
8
8
|
exports.PART_STRING = PART_STRING;
|
|
9
9
|
const PART_REGEX = exports.PART_REGEX = /(\{\{__PART(\d+)__\}\})/g;
|
|
@@ -36,6 +36,20 @@ const getAllTextUntilElementClose = tagName => {
|
|
|
36
36
|
};
|
|
37
37
|
exports.getAllTextUntilElementClose = getAllTextUntilElementClose;
|
|
38
38
|
const getWhitespace = exports.getWhitespace = /*#__PURE__*/chunker(/(\s+)/g);
|
|
39
|
+
const tagNameRegexCache = /*#__PURE__*/new Map();
|
|
40
|
+
const tagNameRegex = tagName => {
|
|
41
|
+
return `(<\\/\\s*${tagName}\\s*>)`;
|
|
42
|
+
};
|
|
43
|
+
const getClosingTagName = tagName => {
|
|
44
|
+
const current = tagNameRegexCache.get(tagName);
|
|
45
|
+
if (current !== undefined) {
|
|
46
|
+
return current;
|
|
47
|
+
}
|
|
48
|
+
const matcher = chunker(new RegExp(tagNameRegex(tagName), "gi"));
|
|
49
|
+
tagNameRegexCache.set(tagName, matcher);
|
|
50
|
+
return matcher;
|
|
51
|
+
};
|
|
52
|
+
exports.getClosingTagName = getClosingTagName;
|
|
39
53
|
function chunker(regex) {
|
|
40
54
|
return (str, pos) => {
|
|
41
55
|
regex.lastIndex = pos;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks.js","names":["PART_STRING","i","exports","PART_REGEX","getPart","chunker","STRICT_PART_REGEX","getStrictPart","getOpeningTag","getOpeningTagEnd","getClosingTag","getSelfClosingTagEnd","getComment","getTextUntilPart","getTextUntilCloseBrace","getAttributeWithQuotes","getAttributeWithoutQuotes","getBooleanAttribute","getAllTextUntilElementClose","tagName","RegExp","getWhitespace","regex","str","pos","lastIndex","match","exec","index","length"],"sources":["../../../src/internal/chunks.ts"],"sourcesContent":[null],"mappings":";;;;;;AAKO,MAAMA,WAAW,GAAIC,CAAS,IAAK,WAAWA,CAAC,MAAM;AAAAC,OAAA,CAAAF,WAAA,GAAAA,WAAA;AAErD,MAAMG,UAAU,GAAAD,OAAA,CAAAC,UAAA,GAAG,0BAA0B;AAE7C,MAAMC,OAAO,GAAAF,OAAA,CAAAE,OAAA,gBAAGC,OAAO,CAACF,UAAU,CAAC;AAEnC,MAAMG,iBAAiB,GAAAJ,OAAA,CAAAI,iBAAA,GAAG,4BAA4B;AAEtD,MAAMC,aAAa,GAAAL,OAAA,CAAAK,aAAA,gBAAGF,OAAO,CAACC,iBAAiB,CAAC;AAEhD,MAAME,aAAa,GAAAN,OAAA,CAAAM,aAAA,gBAAGH,OAAO,CAAC,uCAAuC,CAAC;AAEtE,MAAMI,gBAAgB,GAAAP,OAAA,CAAAO,gBAAA,gBAAGJ,OAAO,CAAC,aAAa,CAAC;AAEtD;AACA;AACA;AACO,MAAMK,aAAa,GAAAR,OAAA,CAAAQ,aAAA,gBAAGL,OAAO,CAAC,mDAAmD,CAAC;AAElF,MAAMM,oBAAoB,GAAAT,OAAA,CAAAS,oBAAA,gBAAGN,OAAO,CAAC,YAAY,CAAC;AAElD,MAAMO,UAAU,GAAAV,OAAA,CAAAU,UAAA,gBAAGP,OAAO,CAAC,iBAAiB,CAAC;AAEpD;AACA;AACO,MAAMQ,gBAAgB,GAAAX,OAAA,CAAAW,gBAAA,gBAAGR,OAAO,CAAC,+BAA+B,CAAC;AAExE;AACA;AACO,MAAMS,sBAAsB,GAAAZ,OAAA,CAAAY,sBAAA,gBAAGT,OAAO,CAAC,iBAAiB,CAAC;AAEhE;AACO,MAAMU,sBAAsB,GAAAb,OAAA,CAAAa,sBAAA,gBAAGV,OAAO,CAC3C,uDAAuD,CACxD;AAED;AACO,MAAMW,yBAAyB,GAAAd,OAAA,CAAAc,yBAAA,gBAAGX,OAAO,CAC9C,uDAAuD,CACxD;AAED;AAEO,MAAMY,mBAAmB,GAAAf,OAAA,CAAAe,mBAAA,gBAAGZ,OAAO,CAAC,sDAAsD,CAAC;AAElG;AACO,MAAMa,2BAA2B,GAAIC,OAAe,IAAI;EAC7D,OAAOd,OAAO,CAAC,IAAIe,MAAM,CAAC,mBAAmBD,OAAO,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAAAjB,OAAA,CAAAgB,2BAAA,GAAAA,2BAAA;AAEM,MAAMG,aAAa,GAAAnB,OAAA,CAAAmB,aAAA,gBAAGhB,OAAO,CAAC,QAAQ,CAAC;AAE9C,
|
|
1
|
+
{"version":3,"file":"chunks.js","names":["PART_STRING","i","exports","PART_REGEX","getPart","chunker","STRICT_PART_REGEX","getStrictPart","getOpeningTag","getOpeningTagEnd","getClosingTag","getSelfClosingTagEnd","getComment","getTextUntilPart","getTextUntilCloseBrace","getAttributeWithQuotes","getAttributeWithoutQuotes","getBooleanAttribute","getAllTextUntilElementClose","tagName","RegExp","getWhitespace","tagNameRegexCache","Map","tagNameRegex","getClosingTagName","current","get","undefined","matcher","set","regex","str","pos","lastIndex","match","exec","index","length"],"sources":["../../../src/internal/chunks.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.CouldNotFindRootElement = exports.CouldNotFindCommentError = void 0;
|
|
7
|
+
exports.isHydrationError = isHydrationError;
|
|
7
8
|
class CouldNotFindCommentError extends Error {
|
|
8
9
|
partIndex;
|
|
9
10
|
constructor(partIndex) {
|
|
@@ -20,4 +21,7 @@ class CouldNotFindRootElement extends Error {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
exports.CouldNotFindRootElement = CouldNotFindRootElement;
|
|
24
|
+
function isHydrationError(e) {
|
|
25
|
+
return e instanceof CouldNotFindCommentError || e instanceof CouldNotFindRootElement;
|
|
26
|
+
}
|
|
23
27
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":["CouldNotFindCommentError","Error","partIndex","constructor","exports","CouldNotFindRootElement"],"sources":["../../../src/internal/errors.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","names":["CouldNotFindCommentError","Error","partIndex","constructor","exports","CouldNotFindRootElement","isHydrationError","e"],"sources":["../../../src/internal/errors.ts"],"sourcesContent":[null],"mappings":";;;;;;;AAAM,MAAOA,wBAAyB,SAAQC,KAAK;EAC5BC,SAAA;EAArBC,YAAqBD,SAAiB;IACpC,KAAK,CAAC,mCAAmCA,SAAS,EAAE,CAAC;IADlC,KAAAA,SAAS,GAATA,SAAS;EAE9B;;AACDE,OAAA,CAAAJ,wBAAA,GAAAA,wBAAA;AAEK,MAAOK,uBAAwB,SAAQJ,KAAK;EAC3BC,SAAA;EAArBC,YAAqBD,SAAiB;IACpC,KAAK,CAAC,yCAAyCA,SAAS,EAAE,CAAC;IADxC,KAAAA,SAAS,GAATA,SAAS;EAE9B;;AACDE,OAAA,CAAAC,uBAAA,GAAAA,uBAAA;AAEK,SAAUC,gBAAgBA,CAACC,CAAU;EACzC,OAAOA,CAAC,YAAYP,wBAAwB,IAAIO,CAAC,YAAYF,uBAAuB;AACtF"}
|
|
@@ -15,6 +15,7 @@ var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/
|
|
|
15
15
|
var _RenderEvent = /*#__PURE__*/require("../RenderEvent.js");
|
|
16
16
|
var _indexRefCounter = /*#__PURE__*/require("./indexRefCounter.js");
|
|
17
17
|
var _context = /*#__PURE__*/require("@typed/context");
|
|
18
|
+
var _effect = /*#__PURE__*/require("effect");
|
|
18
19
|
var _Scope = /*#__PURE__*/require("effect/Scope");
|
|
19
20
|
var _errors = /*#__PURE__*/require("./errors.js");
|
|
20
21
|
var _EventSource = /*#__PURE__*/require("./EventSource.js");
|
|
@@ -23,7 +24,6 @@ var _render = /*#__PURE__*/require("./render.js");
|
|
|
23
24
|
var _utils = /*#__PURE__*/require("./utils.js");
|
|
24
25
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
25
26
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
26
|
-
// TODO: Handle missing comment errors
|
|
27
27
|
/**
|
|
28
28
|
* Here for "standard" browser rendering, a TemplateInstance is effectively a live
|
|
29
29
|
* view into the contents rendered by the Template.
|
|
@@ -32,7 +32,6 @@ const hydrateTemplate = (document, renderContext) => {
|
|
|
32
32
|
const render_ = (0, _render.renderTemplate)(document, renderContext);
|
|
33
33
|
return (templateStrings, values) => {
|
|
34
34
|
return Fx.make(sink => Effect.gen(function* (_) {
|
|
35
|
-
const eventSource = (0, _EventSource.makeEventSource)();
|
|
36
35
|
const context = yield* _(Effect.context());
|
|
37
36
|
const hydrateCtx = (0, _context.unsafeGet)(context, _HydrateContext.HydrateContext);
|
|
38
37
|
const scope = (0, _context.unsafeGet)(context, _Scope.Scope);
|
|
@@ -40,35 +39,60 @@ const hydrateTemplate = (document, renderContext) => {
|
|
|
40
39
|
if (hydrateCtx.hydrate === false) {
|
|
41
40
|
return render_(templateStrings, values);
|
|
42
41
|
}
|
|
42
|
+
const either = getHydrateEntry({
|
|
43
|
+
...hydrateCtx,
|
|
44
|
+
document,
|
|
45
|
+
renderContext,
|
|
46
|
+
strings: templateStrings
|
|
47
|
+
});
|
|
48
|
+
if (_effect.Either.isLeft(either)) {
|
|
49
|
+
hydrateCtx.hydrate = false;
|
|
50
|
+
return render_(templateStrings, values);
|
|
51
|
+
}
|
|
43
52
|
const {
|
|
44
|
-
parts,
|
|
45
53
|
template,
|
|
46
54
|
where,
|
|
47
55
|
wire
|
|
48
|
-
} =
|
|
49
|
-
|
|
56
|
+
} = either.right;
|
|
57
|
+
if (values.length === 0) return yield* _(sink.onSuccess((0, _RenderEvent.DomRenderEvent)(wire)), Effect.zipRight(Effect.never));
|
|
58
|
+
const makeHydrateContext = index => ({
|
|
59
|
+
where,
|
|
60
|
+
rootIndex: index,
|
|
61
|
+
parentTemplate: template,
|
|
62
|
+
hydrate: true
|
|
63
|
+
});
|
|
64
|
+
const refCounter = yield* _((0, _indexRefCounter.indexRefCounter2)());
|
|
65
|
+
const ctx = {
|
|
66
|
+
context,
|
|
50
67
|
document,
|
|
68
|
+
eventSource: (0, _EventSource.makeEventSource)(),
|
|
69
|
+
expected: 0,
|
|
70
|
+
refCounter,
|
|
51
71
|
renderContext,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
parentTemplate: template,
|
|
64
|
-
hydrate: true
|
|
65
|
-
})));
|
|
66
|
-
// Wait for initial work to be completed
|
|
67
|
-
yield* _(refCounter.wait);
|
|
72
|
+
onCause: sink.onFailure,
|
|
73
|
+
values,
|
|
74
|
+
makeHydrateContext
|
|
75
|
+
};
|
|
76
|
+
// Connect our interpolated values to our template parts
|
|
77
|
+
const effects = [];
|
|
78
|
+
for (const [part, path] of template.parts) {
|
|
79
|
+
const eff = (0, _render.renderPart2)(part, where, path, ctx);
|
|
80
|
+
if (eff !== null) {
|
|
81
|
+
effects.push(...(Array.isArray(eff) ? eff : [eff]));
|
|
82
|
+
}
|
|
68
83
|
}
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
// Fork any effects necessary
|
|
85
|
+
if (effects.length > 0) {
|
|
86
|
+
yield* _(Effect.forkAll(effects));
|
|
87
|
+
}
|
|
88
|
+
// Set the element when it is ready
|
|
89
|
+
yield* _(ctx.eventSource.setup(wire, scope));
|
|
90
|
+
// Emit our DomRenderEvent
|
|
71
91
|
yield* _(sink.onSuccess((0, _RenderEvent.DomRenderEvent)(wire)));
|
|
92
|
+
// Stop hydrating
|
|
93
|
+
hydrateCtx.hydrate = false;
|
|
94
|
+
// Ensure our templates last forever in the DOM environment
|
|
95
|
+
// so event listeners are kept attached to the current Scope.
|
|
72
96
|
yield* _(Effect.never);
|
|
73
97
|
}));
|
|
74
98
|
};
|
|
@@ -85,46 +109,56 @@ const START = "typed-start";
|
|
|
85
109
|
const END = "typed-end";
|
|
86
110
|
// Finds all of the childNodes between the "typed-start" and "typed-end" comments
|
|
87
111
|
function findRootChildNodes(where) {
|
|
88
|
-
|
|
89
|
-
let
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
112
|
+
let start = -1;
|
|
113
|
+
let end = -1;
|
|
114
|
+
const {
|
|
115
|
+
childNodes
|
|
116
|
+
} = where;
|
|
117
|
+
const length = childNodes.length;
|
|
118
|
+
for (let i = 0; i < length; i++) {
|
|
119
|
+
const node = childNodes[i];
|
|
120
|
+
if (node.nodeType === node.COMMENT_NODE && node.nodeValue === START) {
|
|
121
|
+
start = i;
|
|
122
|
+
break;
|
|
98
123
|
}
|
|
99
124
|
}
|
|
100
|
-
for (let i =
|
|
101
|
-
const node =
|
|
102
|
-
if (node.nodeType === node.COMMENT_NODE) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
125
|
+
for (let i = length - 1; i >= start; i--) {
|
|
126
|
+
const node = childNodes[i];
|
|
127
|
+
if (node.nodeType === node.COMMENT_NODE && node.nodeValue === END) {
|
|
128
|
+
end = i;
|
|
129
|
+
break;
|
|
107
130
|
}
|
|
108
131
|
}
|
|
109
|
-
|
|
110
|
-
|
|
132
|
+
// If we can't find the start and end comments, just return all childNodes
|
|
133
|
+
if (start === -1 && end === -1) {
|
|
134
|
+
return Array.from(childNodes);
|
|
135
|
+
}
|
|
136
|
+
start = start === -1 ? 0 : start;
|
|
137
|
+
end = end === -1 ? length - 1 : end;
|
|
138
|
+
const rootChildNodes = Array(end - start);
|
|
139
|
+
for (let i = start + 1, j = 0; i <= end; i++) {
|
|
140
|
+
rootChildNodes[j++] = childNodes[i];
|
|
111
141
|
}
|
|
112
|
-
return
|
|
142
|
+
return rootChildNodes;
|
|
113
143
|
}
|
|
114
144
|
function findTemplateResultPartChildNodes(where, parentTemplate, childTemplate, partIndex, childIndex) {
|
|
115
145
|
const [, path] = parentTemplate.parts[partIndex];
|
|
116
146
|
const parentNode = (0, _utils.findPath)(where, path);
|
|
117
|
-
const
|
|
147
|
+
const childNodesEither = findPartChildNodes(parentNode, childTemplate.hash, partIndex);
|
|
148
|
+
if (_effect.Either.isLeft(childNodesEither)) return _effect.Either.left(childNodesEither.left);
|
|
149
|
+
const childNodes = childNodesEither.right;
|
|
118
150
|
const parentChildNodes = {
|
|
119
151
|
parentNode,
|
|
120
152
|
childNodes: childIndex !== undefined ? [childNodes[childIndex]] : childNodes
|
|
121
153
|
};
|
|
122
|
-
return parentChildNodes;
|
|
154
|
+
return _effect.Either.right(parentChildNodes);
|
|
123
155
|
}
|
|
124
156
|
function findPartChildNodes({
|
|
125
157
|
childNodes
|
|
126
158
|
}, hash, partIndex) {
|
|
127
|
-
const
|
|
159
|
+
const either = findPartComment(childNodes, partIndex);
|
|
160
|
+
if (_effect.Either.isLeft(either)) return _effect.Either.left(either.left);
|
|
161
|
+
const [comment, index] = either.right;
|
|
128
162
|
const nodes = [];
|
|
129
163
|
const previousHoleValue = `hole${partIndex - 1}`;
|
|
130
164
|
if (hash) {
|
|
@@ -137,29 +171,27 @@ function findPartChildNodes({
|
|
|
137
171
|
}
|
|
138
172
|
}
|
|
139
173
|
} else {
|
|
140
|
-
return [...(0, _utils.getPreviousNodes)(comment, partIndex), comment];
|
|
174
|
+
return _effect.Either.right([...(0, _utils.getPreviousNodes)(comment, partIndex), comment]);
|
|
141
175
|
}
|
|
142
176
|
if (nodes.length === 0) {
|
|
143
|
-
|
|
177
|
+
return _effect.Either.left(new _errors.CouldNotFindRootElement(partIndex));
|
|
144
178
|
}
|
|
145
179
|
nodes.push(comment);
|
|
146
|
-
return nodes;
|
|
180
|
+
return _effect.Either.right(nodes);
|
|
147
181
|
}
|
|
148
182
|
function findPartComment(childNodes, partIndex) {
|
|
149
183
|
const search = partIndex === -1 ? `typed-end` : `hole${partIndex}`;
|
|
150
184
|
for (let i = 0; i < childNodes.length; ++i) {
|
|
151
185
|
const node = childNodes[i];
|
|
152
186
|
if ((0, _utils.isCommentWithValue)(node, search)) {
|
|
153
|
-
return [node, i];
|
|
187
|
+
return _effect.Either.right([node, i]);
|
|
154
188
|
}
|
|
155
189
|
}
|
|
156
|
-
|
|
190
|
+
return _effect.Either.left(new _errors.CouldNotFindCommentError(partIndex));
|
|
157
191
|
}
|
|
158
192
|
function getHydrateEntry({
|
|
159
193
|
childIndex,
|
|
160
194
|
document,
|
|
161
|
-
eventSource,
|
|
162
|
-
onCause,
|
|
163
195
|
parentTemplate,
|
|
164
196
|
renderContext,
|
|
165
197
|
rootIndex,
|
|
@@ -170,9 +202,12 @@ function getHydrateEntry({
|
|
|
170
202
|
template
|
|
171
203
|
} = (0, _render.getBrowserEntry)(document, renderContext, strings);
|
|
172
204
|
if (parentTemplate) {
|
|
173
|
-
|
|
205
|
+
const either = findTemplateResultPartChildNodes(where, parentTemplate, template, rootIndex, childIndex);
|
|
206
|
+
if (_effect.Either.isLeft(either)) {
|
|
207
|
+
return _effect.Either.left(either.left);
|
|
208
|
+
}
|
|
209
|
+
where = either.right;
|
|
174
210
|
}
|
|
175
|
-
const parts = (0, _render.buildParts)(document, renderContext, template, where, eventSource, onCause, true);
|
|
176
211
|
const wire = (() => {
|
|
177
212
|
if (!parentTemplate) {
|
|
178
213
|
const childNodes = Array.from(where.childNodes).filter(node => (0, _utils.isComment)(node) ? !(0, _utils.isCommentWithValue)(node, END) : true);
|
|
@@ -186,11 +221,10 @@ function getHydrateEntry({
|
|
|
186
221
|
}
|
|
187
222
|
return Array.from(where.childNodes).filter(node => !(0, _utils.isCommentWithValue)(node, `hole${rootIndex}`));
|
|
188
223
|
})();
|
|
189
|
-
return {
|
|
224
|
+
return _effect.Either.right({
|
|
190
225
|
template,
|
|
191
226
|
wire,
|
|
192
|
-
parts,
|
|
193
227
|
where
|
|
194
|
-
};
|
|
228
|
+
});
|
|
195
229
|
}
|
|
196
230
|
//# sourceMappingURL=hydrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydrate.js","names":["Fx","_interopRequireWildcard","require","Effect","_RenderEvent","_indexRefCounter","_context","_Scope","_errors","_EventSource","_HydrateContext","_render","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","hydrateTemplate","document","renderContext","render_","renderTemplate","templateStrings","values","make","sink","gen","_","
|
|
1
|
+
{"version":3,"file":"hydrate.js","names":["Fx","_interopRequireWildcard","require","Effect","_RenderEvent","_indexRefCounter","_context","_effect","_Scope","_errors","_EventSource","_HydrateContext","_render","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","hydrateTemplate","document","renderContext","render_","renderTemplate","templateStrings","values","make","sink","gen","_","context","hydrateCtx","unsafeGet","HydrateContext","scope","Scope","hydrate","either","getHydrateEntry","strings","Either","isLeft","template","where","wire","right","length","onSuccess","DomRenderEvent","zipRight","never","makeHydrateContext","index","rootIndex","parentTemplate","refCounter","indexRefCounter2","ctx","eventSource","makeEventSource","expected","onCause","onFailure","effects","part","path","parts","eff","renderPart2","push","Array","isArray","forkAll","setup","exports","findRootParentChildNodes","childNodes","findRootChildNodes","parentNode","START","END","start","end","node","nodeType","COMMENT_NODE","nodeValue","from","rootChildNodes","j","findTemplateResultPartChildNodes","childTemplate","partIndex","childIndex","findPath","childNodesEither","findPartChildNodes","hash","left","parentChildNodes","undefined","findPartComment","comment","nodes","previousHoleValue","isHtmlElement","dataset","typed","unshift","isCommentWithValue","getPreviousNodes","CouldNotFindRootElement","search","CouldNotFindCommentError","getBrowserEntry","filter","isComment"],"sources":["../../../src/internal/hydrate.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -53,6 +53,7 @@ const isWhitespaceToken = (input, pos) => SPACE_REGEX.test(input[pos]);
|
|
|
53
53
|
const isOpenTagEndToken = (input, pos) => input[pos] === chars.greaterThan;
|
|
54
54
|
const isSelfClosingTagEndToken = (input, pos) => input[pos] === chars.slash && input[pos + 1] === chars.greaterThan;
|
|
55
55
|
const isCommentEndToken = (input, pos) => input[pos] === chars.hypen && input[pos + 1] === chars.hypen && input[pos + 2] === chars.greaterThan;
|
|
56
|
+
const isGreaterThanToken = (input, pos) => input[pos] === chars.greaterThan;
|
|
56
57
|
const Continue = a => ["continue", a];
|
|
57
58
|
const Break = a => ["break", Option.fromNullable(a)];
|
|
58
59
|
const Skip = ["skip"];
|
|
@@ -166,8 +167,10 @@ class ParserImpl {
|
|
|
166
167
|
if (nextChar == "-") {
|
|
167
168
|
this.consumeAmount(2);
|
|
168
169
|
return [this.parseComment()];
|
|
169
|
-
} else {
|
|
170
|
+
} else if (nextChar.toLowerCase() === "d") {
|
|
170
171
|
return [this.parseDocType()];
|
|
172
|
+
} else {
|
|
173
|
+
throw new SyntaxError(`Unknown comment type ${nextChar}`);
|
|
171
174
|
}
|
|
172
175
|
} else if (nextChar === "/") {
|
|
173
176
|
// Self-closing tag
|
|
@@ -224,9 +227,14 @@ class ParserImpl {
|
|
|
224
227
|
const children = this.parseTemplateChildren();
|
|
225
228
|
this.path.pop();
|
|
226
229
|
const element = new Template.ElementNode(tagName, attributes, children);
|
|
230
|
+
this.skipWhitespace();
|
|
231
|
+
this.consumeClosingTag(tagName);
|
|
227
232
|
return element;
|
|
228
233
|
}
|
|
229
234
|
}
|
|
235
|
+
consumeClosingTag(tagName) {
|
|
236
|
+
this.chunk((0, _chunks.getClosingTagName)(tagName));
|
|
237
|
+
}
|
|
230
238
|
parseSelfClosingElement(tagName) {
|
|
231
239
|
const attributes = this.parseAttributes();
|
|
232
240
|
return new Template.SelfClosingElementNode(tagName, attributes);
|
|
@@ -253,7 +261,7 @@ class ParserImpl {
|
|
|
253
261
|
return this.addPart(new Template.SparseCommentNode(textAndParts));
|
|
254
262
|
}
|
|
255
263
|
parseDocType() {
|
|
256
|
-
this.parseTextUntil(
|
|
264
|
+
this.parseTextUntil(isGreaterThanToken);
|
|
257
265
|
this.consumeAmount(1);
|
|
258
266
|
this.skipWhitespace();
|
|
259
267
|
return new Template.DocType("html");
|
|
@@ -387,16 +395,16 @@ class ParserImpl {
|
|
|
387
395
|
return f(index);
|
|
388
396
|
}
|
|
389
397
|
parseTextUntil(predicate) {
|
|
390
|
-
|
|
398
|
+
const start = this.pos;
|
|
399
|
+
let i = 0;
|
|
391
400
|
while (this.pos < this.length) {
|
|
392
|
-
const char = this.nextChar();
|
|
393
401
|
if (predicate(this.input, this.pos)) {
|
|
394
402
|
break;
|
|
395
403
|
}
|
|
396
|
-
|
|
404
|
+
i++;
|
|
397
405
|
this.consumeAmount(1);
|
|
398
406
|
}
|
|
399
|
-
return
|
|
407
|
+
return this.input.slice(start, start + i);
|
|
400
408
|
}
|
|
401
409
|
parseTextUntilMany(predicates) {
|
|
402
410
|
const [keys, length] = getPredicatesCache(predicates);
|