@metaobjectsdev/render 1.0.9-rc.5 → 1.0.9

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.
@@ -7,6 +7,14 @@ export declare const TRUNCATED: unique symbol;
7
7
  * leak through as the text "null".
8
8
  */
9
9
  export declare const NULL_LITERAL: unique symbol;
10
+ /** True when a `//` or `/*` comment opens at `i`. */
11
+ export declare function commentOpensAt(s: string, i: number): boolean;
12
+ /**
13
+ * Models write JSONC: `{"score": 7, // good` drops every field after it in a strict reader.
14
+ * When a comment opens at `i`, the index just past it (a line comment runs to the end of
15
+ * its line, a block comment to its `*\/` or the end of the text); otherwise -1.
16
+ */
17
+ export declare function commentEnd(s: string, i: number): number;
10
18
  /** Parse a tolerant JSON object span into a forgiving record. Never throws. */
11
19
  export declare function readJson(span: string | null | undefined): Record<string, unknown>;
12
20
  //# sourceMappingURL=json-forgiving-reader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-forgiving-reader.d.ts","sourceRoot":"","sources":["../../src/extract/json-forgiving-reader.ts"],"names":[],"mappings":"AAGA,kGAAkG;AAClG,eAAO,MAAM,SAAS,EAAE,OAAO,MAAyC,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAA4C,CAAC;AAiK/E,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjF"}
1
+ {"version":3,"file":"json-forgiving-reader.d.ts","sourceRoot":"","sources":["../../src/extract/json-forgiving-reader.ts"],"names":[],"mappings":"AAGA,kGAAkG;AAClG,eAAO,MAAM,SAAS,EAAE,OAAO,MAAyC,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,MAA4C,CAAC;AA4J/E,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CASvD;AAmBD,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjF"}
@@ -153,7 +153,10 @@ class Reader {
153
153
  }
154
154
  readBareScalar() {
155
155
  const start = this.i;
156
- while (this.i < this.s.length && ",}]".indexOf(this.s.charAt(this.i)) < 0)
156
+ while (this.i < this.s.length
157
+ && ",}]".indexOf(this.s.charAt(this.i)) < 0
158
+ // A comment after an unquoted value (`7 // good`) ends it; `http://x` does not.
159
+ && !(this.i > start && isWhitespace(this.s.charAt(this.i - 1)) && commentOpensAt(this.s, this.i)))
157
160
  this.i++;
158
161
  const result = this.s.substring(start, this.i).trim();
159
162
  if (result.length === 0)
@@ -162,10 +165,39 @@ class Reader {
162
165
  return NULL_LITERAL; // JSON null literal → explicit null, NOT the string "null"
163
166
  return result;
164
167
  }
168
+ /** Skip whitespace AND `//` / `/* *\/` comments — only ever called between tokens, so a
169
+ * comment marker inside a string literal is never reached here. */
165
170
  ws() {
166
- while (this.i < this.s.length && isWhitespace(this.s.charAt(this.i)))
167
- this.i++;
171
+ for (;;) {
172
+ while (this.i < this.s.length && isWhitespace(this.s.charAt(this.i)))
173
+ this.i++;
174
+ const end = commentEnd(this.s, this.i);
175
+ if (end < 0)
176
+ return;
177
+ this.i = end;
178
+ }
179
+ }
180
+ }
181
+ /** True when a `//` or `/*` comment opens at `i`. */
182
+ export function commentOpensAt(s, i) {
183
+ return s.charAt(i) === "/" && (s.charAt(i + 1) === "/" || s.charAt(i + 1) === "*");
184
+ }
185
+ /**
186
+ * Models write JSONC: `{"score": 7, // good` drops every field after it in a strict reader.
187
+ * When a comment opens at `i`, the index just past it (a line comment runs to the end of
188
+ * its line, a block comment to its `*\/` or the end of the text); otherwise -1.
189
+ */
190
+ export function commentEnd(s, i) {
191
+ if (!commentOpensAt(s, i))
192
+ return -1;
193
+ if (s.charAt(i + 1) === "/") {
194
+ let j = i + 2;
195
+ while (j < s.length && s.charAt(j) !== "\n" && s.charAt(j) !== "\r")
196
+ j++;
197
+ return j;
168
198
  }
199
+ const close = s.indexOf("*/", i + 2);
200
+ return close < 0 ? s.length : close + 2;
169
201
  }
170
202
  function unescape(c) {
171
203
  switch (c) {
@@ -1 +1 @@
1
- {"version":3,"file":"json-forgiving-reader.js","sourceRoot":"","sources":["../../src/extract/json-forgiving-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-forgiving-reader.js","sourceRoot":"","sources":["../../src/extract/json-forgiving-reader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/extract/locate.ts"],"names":[],"mappings":"AASA,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAgBxE;AAyBD,mFAAmF;AACnF,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,eAAe,EAAE,OAAO,GACvB,MAAM,GAAG,IAAI,CAcf"}
1
+ {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/extract/locate.ts"],"names":[],"mappings":"AAcA,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAWzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAgBxE;AAqCD,mFAAmF;AACnF,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,eAAe,EAAE,OAAO,GACvB,MAAM,GAAG,IAAI,CAcf"}
@@ -1,6 +1,9 @@
1
1
  // Stages 2-3: isolate and select the payload root span.
2
2
  // JSON: Extract picks among jsonCandidates by the schema (fenced first, first object carrying a
3
3
  // declared field); locateJson (first-closed-else-first-open) is its fallback. Mirrors Java Locate.
4
+ import { commentEnd } from "./json-forgiving-reader.js";
5
+ /** The characters a JSON comment may follow: whitespace or a structural separator. */
6
+ const COMMENT_MAY_FOLLOW = /[\s,{[]/;
4
7
  /** Escape regex metacharacters (equivalent of Java Pattern.quote). */
5
8
  function quote(s) {
6
9
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -46,7 +49,12 @@ export function jsonCandidates(text) {
46
49
  }
47
50
  return out;
48
51
  }
49
- /** Returns index of the matching '}', or -1 if unterminated. String-aware. */
52
+ /**
53
+ * Returns index of the matching '}', or -1 if unterminated. String-aware, and comment-aware:
54
+ * a `//` or `/* *\/` comment that opens after whitespace or a separator is skipped, so a brace
55
+ * or quote inside it (`// good } really`) cannot close the object early. `http://x` (after a
56
+ * colon or a letter) is not a comment.
57
+ */
50
58
  function scanBalanced(s, open) {
51
59
  let depth = 0;
52
60
  let inStr = false;
@@ -62,6 +70,13 @@ function scanBalanced(s, open) {
62
70
  inStr = false;
63
71
  continue;
64
72
  }
73
+ if (i > open && COMMENT_MAY_FOLLOW.test(s.charAt(i - 1))) {
74
+ const end = commentEnd(s, i);
75
+ if (end >= 0) {
76
+ i = end - 1;
77
+ continue;
78
+ }
79
+ }
65
80
  if (c === '"')
66
81
  inStr = true;
67
82
  else if (c === "{")
@@ -1 +1 @@
1
- {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/extract/locate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/extract/locate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/render",
3
- "version": "1.0.9-rc.5",
3
+ "version": "1.0.9",
4
4
  "description": "Logic-less, deterministic text render engine (Mustache) for MetaObjects templates — provider-resolved partials, format-driven escaping, zero core dependency.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -142,16 +142,49 @@ class Reader {
142
142
 
143
143
  private readBareScalar(): string | null | typeof NULL_LITERAL {
144
144
  const start = this.i;
145
- while (this.i < this.s.length && ",}]".indexOf(this.s.charAt(this.i)) < 0) this.i++;
145
+ while (
146
+ this.i < this.s.length
147
+ && ",}]".indexOf(this.s.charAt(this.i)) < 0
148
+ // A comment after an unquoted value (`7 // good`) ends it; `http://x` does not.
149
+ && !(this.i > start && isWhitespace(this.s.charAt(this.i - 1)) && commentOpensAt(this.s, this.i))
150
+ ) this.i++;
146
151
  const result = this.s.substring(start, this.i).trim();
147
152
  if (result.length === 0) return null; // no token read (zero-width)
148
153
  if (result === "null") return NULL_LITERAL; // JSON null literal → explicit null, NOT the string "null"
149
154
  return result;
150
155
  }
151
156
 
157
+ /** Skip whitespace AND `//` / `/* *\/` comments — only ever called between tokens, so a
158
+ * comment marker inside a string literal is never reached here. */
152
159
  private ws(): void {
153
- while (this.i < this.s.length && isWhitespace(this.s.charAt(this.i))) this.i++;
160
+ for (;;) {
161
+ while (this.i < this.s.length && isWhitespace(this.s.charAt(this.i))) this.i++;
162
+ const end = commentEnd(this.s, this.i);
163
+ if (end < 0) return;
164
+ this.i = end;
165
+ }
166
+ }
167
+ }
168
+
169
+ /** True when a `//` or `/*` comment opens at `i`. */
170
+ export function commentOpensAt(s: string, i: number): boolean {
171
+ return s.charAt(i) === "/" && (s.charAt(i + 1) === "/" || s.charAt(i + 1) === "*");
172
+ }
173
+
174
+ /**
175
+ * Models write JSONC: `{"score": 7, // good` drops every field after it in a strict reader.
176
+ * When a comment opens at `i`, the index just past it (a line comment runs to the end of
177
+ * its line, a block comment to its `*\/` or the end of the text); otherwise -1.
178
+ */
179
+ export function commentEnd(s: string, i: number): number {
180
+ if (!commentOpensAt(s, i)) return -1;
181
+ if (s.charAt(i + 1) === "/") {
182
+ let j = i + 2;
183
+ while (j < s.length && s.charAt(j) !== "\n" && s.charAt(j) !== "\r") j++;
184
+ return j;
154
185
  }
186
+ const close = s.indexOf("*/", i + 2);
187
+ return close < 0 ? s.length : close + 2;
155
188
  }
156
189
 
157
190
  function unescape(c: string): string {
@@ -2,6 +2,11 @@
2
2
  // JSON: Extract picks among jsonCandidates by the schema (fenced first, first object carrying a
3
3
  // declared field); locateJson (first-closed-else-first-open) is its fallback. Mirrors Java Locate.
4
4
 
5
+ import { commentEnd } from "./json-forgiving-reader.js";
6
+
7
+ /** The characters a JSON comment may follow: whitespace or a structural separator. */
8
+ const COMMENT_MAY_FOLLOW = /[\s,{[]/;
9
+
5
10
  /** Escape regex metacharacters (equivalent of Java Pattern.quote). */
6
11
  function quote(s: string): string {
7
12
  return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -44,7 +49,12 @@ export function jsonCandidates(text: string | null | undefined): string[] {
44
49
  return out;
45
50
  }
46
51
 
47
- /** Returns index of the matching '}', or -1 if unterminated. String-aware. */
52
+ /**
53
+ * Returns index of the matching '}', or -1 if unterminated. String-aware, and comment-aware:
54
+ * a `//` or `/* *\/` comment that opens after whitespace or a separator is skipped, so a brace
55
+ * or quote inside it (`// good } really`) cannot close the object early. `http://x` (after a
56
+ * colon or a letter) is not a comment.
57
+ */
48
58
  function scanBalanced(s: string, open: number): number {
49
59
  let depth = 0;
50
60
  let inStr = false;
@@ -57,6 +67,13 @@ function scanBalanced(s: string, open: number): number {
57
67
  else if (c === '"') inStr = false;
58
68
  continue;
59
69
  }
70
+ if (i > open && COMMENT_MAY_FOLLOW.test(s.charAt(i - 1))) {
71
+ const end = commentEnd(s, i);
72
+ if (end >= 0) {
73
+ i = end - 1;
74
+ continue;
75
+ }
76
+ }
60
77
  if (c === '"') inStr = true;
61
78
  else if (c === "{") depth++;
62
79
  else if (c === "}") {