@warlock.js/web 5.3.0 → 5.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/CHANGELOG.md CHANGED
@@ -2,6 +2,34 @@
2
2
 
3
3
  All notable changes to `@warlock.js/web` are documented here.
4
4
 
5
+ ## 5.3.2 - 2026-09-05
6
+
7
+ ### Fixed
8
+
9
+ - A page-file segment carrying a bracket but no complete group could reach the parameter-name read with nothing to read. Unreachable as the surrounding checks stand, and now stated as a guard rather than assumed, so a future narrowing of those checks fails here naming the segment instead of throwing further down.
10
+
11
+ ## 5.3.1 - 2026-09-04
12
+
13
+ ### Fixed
14
+
15
+ - Republished the complete family so a clean install resolves. Same code as 5.3.0, published as one complete set.
16
+
17
+ ## 5.3.0 - 2026-09-03
18
+
19
+ ### Added
20
+
21
+ - A standalone Warlock 404 page, styled and served by the web layer.
22
+ - Request-bound web localization: the active locale travels with the request rather than being read from ambient state.
23
+
24
+ ### Fixed
25
+
26
+ - The 404 page's stylesheet was imported through a Vite-only `?url&inline` query, which the release bundler could not resolve — the web package could not be built for publication at all. The stylesheet URL is now produced by a plain module, guarded by a test that keeps the emitted markup byte-exact against the CSS file.
27
+ - A directory that owned a layout `prefix` was never classified, so bracket syntax inside a group name went unexamined and two different pages could derive the same route. Every directory name is now validated before the route decides whether it contributes.
28
+ - A page's DECLARED `route.path` was never validated — the validator had zero callers.
29
+ - Bracket syntax inside a group name is rejected instead of silently deriving a route.
30
+ - `discover-pages` now composes paths through the same validated seam as the rest of routing, so the two can no longer disagree.
31
+ - An unobservable auth mark revokes a cache opt-in: unproven now means revoked, not assumed safe.
32
+
5
33
  ## 5.2.3 - 2026-09-02
6
34
 
7
35
  ### Fixed
@@ -31,7 +31,8 @@ function classifyPageFileSegment(segment) {
31
31
  const remaining = groups.reduce((text, group) => text.replace(group, ""), segment);
32
32
  if (remaining.includes("[") || remaining.includes("]")) return rejected(`Segment "${segment}" has unbalanced "[" or "]" brackets, which page routes do not support — balance the brackets, as in a whole-segment param like "[id]".`);
33
33
  if (groups.length > 1) return rejected(`Segment "${segment}" contains more than one bracket group, and page routes require a dynamic segment to occupy its whole filesystem segment — split them into separate directory segments, as in "[id]/[slug]".`);
34
- const [group] = groups;
34
+ const group = groups[0];
35
+ if (group === void 0) return rejected(`Segment "${segment}" has unbalanced "[" or "]" brackets, which page routes do not support — balance the brackets, as in a whole-segment param like "[id]".`);
35
36
  if (remaining !== "") return rejected(`Segment "${segment}" mixes a bracket group with other text, and page routes require a dynamic segment to occupy its whole filesystem segment — declare it as its own segment, as in "[id]".`);
36
37
  const name = group.slice(1, -1);
37
38
  if (name === "") return rejected(`Segment "${segment}" has an empty parameter name — declare a name inside the brackets, as in "[id]".`);
@@ -1 +1 @@
1
- {"version":3,"file":"page-file-segment.mjs","names":[],"sources":["../../../../../../../web/src/routing/page-file-segment.ts"],"sourcesContent":["/**\n * Page-file segment grammar — the single, pure predicate that decides\n * whether one filesystem segment of a page file (a directory name or the\n * `.page.tsx` basename) is inside the grammar `filesystem-route.ts` can\n * actually translate into a route. This is a SIBLING of\n * `page-route-grammar.ts`, not an extension of it: that module validates a\n * page's DECLARED colon-form `route.path` (`/users/:id`); this one validates\n * a FILESYSTEM segment as it appears on disk (`[id]`) before it is turned\n * into one.\n *\n * DIRECTORY CONTRACT — applies to everything in `web/src/routing/`: nothing\n * here may import `node:fs`, `node:path`, `vite`, or `fastify`. This module\n * receives a single path segment string and trusts nothing about it beyond\n * what it checks — it asserts rather than trusts, but it never repairs a\n * malformed segment into a valid one.\n *\n * ALLOWED — and ONLY these shapes; anything else is rejected by default:\n * a plain static segment containing no \"[\" and no \"]\" at all; a `(group)`\n * directory whose name contains no \"[\" and no \"]\"; and exactly `[name]`,\n * where the segment is nothing but a single bracket pair and `name` matches\n * `^[A-Za-z_][A-Za-z0-9_]*$` — i.e. precisely the shape `filesystem-route.ts`\n * can translate into a `:name` route param.\n *\n * REJECTED — each with a reason naming the offending segment and, where one\n * exists, the supported alternative: a `(group)` directory whose name\n * contains \"[\" or \"]\" anywhere (`(bad[id])`, `([x])`) — a group contributes\n * nothing to the URL path, so bracket syntax inside one can never produce a\n * dynamic segment, and the fix is to move the dynamic segment out of the\n * group; a catch-all group (`[...slug]`, `[...]`); two or more bracket\n * groups in one segment (`[id].[slug]`, `[a]-[b]`); a bracket group mixed\n * with other text (`pre[id]`); an empty parameter name (`[]`); a parameter\n * name that does not start with a letter or `_`, or contains a character\n * other than a letter, digit or `_` (`[1bad]`, `[a-b]`, `[a b]`); and\n * unbalanced or stray `[`/`]` characters.\n *\n * REJECTION IS DATA, NOT A THROW: {@link classifyPageFileSegment} is total\n * and never raises. What a rejection MEANS to the user is nonetheless fixed\n * here: {@link PageFileSegmentNotSupportedError} is the single error\n * contract every caller raises when it refuses a rejected segment — one\n * class, one message shape, built from the rejection reason plus\n * caller-supplied page identity. Callers decide only WHEN to raise it and\n * supply that context; none of them wraps the rejection in a category or\n * wording of its own.\n */\n\n/**\n * The predicate's verdict for one filesystem segment:\n *\n * - `\"allowed\"` — the segment is one of the grammar's allowed shapes.\n * - `\"rejected\"` — the segment is outside the grammar; `reason` is a\n * complete, user-readable sentence naming the offending segment and the\n * supported alternative if one exists.\n */\nexport type PageFileSegmentVerdict = { type: \"allowed\" } | { type: \"rejected\"; reason: string };\n\nconst allowed: PageFileSegmentVerdict = { type: \"allowed\" };\n\nfunction rejected(reason: string): PageFileSegmentVerdict {\n return { type: \"rejected\", reason };\n}\n\n/** A whole, unqualified parameter name — no leading digit, no punctuation. */\nconst parameterNamePattern = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** A single balanced, non-nested bracket group such as `[id]` or `[...slug]`. */\nconst bracketGroupPattern = /\\[[^[\\]]*]/g;\n\n/** A `(group)` directory — the whole segment wrapped in one pair of parens. */\nconst groupSegmentPattern = /^\\(([^/]+)\\)$/;\n\n/**\n * Decides whether one filesystem segment is inside the grammar\n * `filesystem-route.ts` can translate. Pure and total: every input yields a\n * verdict and nothing throws. `segment` must already be the isolated\n * segment (a single directory name, or the page basename with `.page.tsx`\n * already stripped) — no normalization is performed here.\n */\nexport function classifyPageFileSegment(segment: string): PageFileSegmentVerdict {\n const groupMatch = groupSegmentPattern.exec(segment);\n\n if (groupMatch) {\n const groupName = groupMatch[1];\n\n if (groupName.includes(\"[\") || groupName.includes(\"]\")) {\n return rejected(\n `Segment \"${segment}\" is a group, and a group contributes nothing to the URL path, so ` +\n `bracket syntax inside it can never produce a dynamic segment — move the dynamic ` +\n `segment out of the group, as in \"(marketing)/[id]/page.page.tsx\" rather than ` +\n `\"(marketing[id])/page.page.tsx\".`,\n );\n }\n\n return allowed;\n }\n\n if (!segment.includes(\"[\") && !segment.includes(\"]\")) {\n return allowed;\n }\n\n const groups = segment.match(bracketGroupPattern) ?? [];\n const remaining = groups.reduce((text, group) => text.replace(group, \"\"), segment);\n\n if (remaining.includes(\"[\") || remaining.includes(\"]\")) {\n return rejected(\n `Segment \"${segment}\" has unbalanced \"[\" or \"]\" brackets, which page routes do not ` +\n `support — balance the brackets, as in a whole-segment param like \"[id]\".`,\n );\n }\n\n if (groups.length > 1) {\n return rejected(\n `Segment \"${segment}\" contains more than one bracket group, and page routes require a ` +\n `dynamic segment to occupy its whole filesystem segment — split them into separate ` +\n `directory segments, as in \"[id]/[slug]\".`,\n );\n }\n\n const [group] = groups;\n\n if (remaining !== \"\") {\n return rejected(\n `Segment \"${segment}\" mixes a bracket group with other text, and page routes require a ` +\n `dynamic segment to occupy its whole filesystem segment — declare it as its own segment, ` +\n `as in \"[id]\".`,\n );\n }\n\n const name = group.slice(1, -1);\n\n if (name === \"\") {\n return rejected(\n `Segment \"${segment}\" has an empty parameter name — declare a name inside the brackets, ` +\n `as in \"[id]\".`,\n );\n }\n\n if (name.startsWith(\"...\")) {\n return rejected(\n `Segment \"${segment}\" is a catch-all pattern, which page routes do not support — page ` +\n `routes support only a whole-segment param such as \"[id]\", not a catch-all.`,\n );\n }\n\n if (parameterNamePattern.test(name)) {\n return allowed;\n }\n\n return rejected(\n `Segment \"${segment}\" declares a parameter name page routes do not support — a parameter ` +\n `name must start with a letter or \"_\" and contain only letters, digits and \"_\", as in ` +\n `\"[id]\" or \"[user_id]\".`,\n );\n}\n\n/**\n * The single error contract for a rejected page-file segment — the one\n * class and one message every caller of {@link classifyPageFileSegment}\n * raises when it refuses a page whose filesystem segment was rejected.\n * `pageFile` is the caller's context (its audience-appropriate identifier\n * for the page — an app-root-relative POSIX path, in practice); `segment`\n * and `reason` come from the verdict; the category and wording are this\n * module's.\n */\nexport class PageFileSegmentNotSupportedError extends Error {\n public constructor(\n public readonly pageFile: string,\n public readonly segment: string,\n public readonly reason: string,\n ) {\n super(\n `\"${pageFile}\" contains the filesystem segment \"${segment}\", which is not supported: ` +\n `${reason} Page routes support a plain static segment or a whole-segment dynamic param ` +\n `such as \"[id]\".`,\n );\n this.name = \"PageFileSegmentNotSupportedError\";\n }\n}\n"],"mappings":";AAuDA,MAAM,UAAkC,EAAE,MAAM,UAAU;AAE1D,SAAS,SAAS,QAAwC;CACxD,OAAO;EAAE,MAAM;EAAY;CAAO;AACpC;;AAGA,MAAM,uBAAuB;;AAG7B,MAAM,sBAAsB;;AAG5B,MAAM,sBAAsB;;;;;;;;AAS5B,SAAgB,wBAAwB,SAAyC;CAC/E,MAAM,aAAa,oBAAoB,KAAK,OAAO;CAEnD,IAAI,YAAY;EACd,MAAM,YAAY,WAAW;EAE7B,IAAI,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,GAAG,GACnD,OAAO,SACL,YAAY,QAAQ,gQAItB;EAGF,OAAO;CACT;CAEA,IAAI,CAAC,QAAQ,SAAS,GAAG,KAAK,CAAC,QAAQ,SAAS,GAAG,GACjD,OAAO;CAGT,MAAM,SAAS,QAAQ,MAAM,mBAAmB,KAAK,CAAC;CACtD,MAAM,YAAY,OAAO,QAAQ,MAAM,UAAU,KAAK,QAAQ,OAAO,EAAE,GAAG,OAAO;CAEjF,IAAI,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,GAAG,GACnD,OAAO,SACL,YAAY,QAAQ,wIAEtB;CAGF,IAAI,OAAO,SAAS,GAClB,OAAO,SACL,YAAY,QAAQ,6LAGtB;CAGF,MAAM,CAAC,SAAS;CAEhB,IAAI,cAAc,IAChB,OAAO,SACL,YAAY,QAAQ,yKAGtB;CAGF,MAAM,OAAO,MAAM,MAAM,GAAG,EAAE;CAE9B,IAAI,SAAS,IACX,OAAO,SACL,YAAY,QAAQ,kFAEtB;CAGF,IAAI,KAAK,WAAW,KAAK,GACvB,OAAO,SACL,YAAY,QAAQ,6IAEtB;CAGF,IAAI,qBAAqB,KAAK,IAAI,GAChC,OAAO;CAGT,OAAO,SACL,YAAY,QAAQ,iLAGtB;AACF;;;;;;;;;;AAWA,IAAa,mCAAb,cAAsD,MAAM;CAExC;CACA;CACA;CAHlB,AAAO,YACL,AAAgB,UAChB,AAAgB,SAChB,AAAgB,QAChB;EACA,MACE,IAAI,SAAS,qCAAqC,QAAQ,6BACrD,OAAO,6FAEd;EARgB;EACA;EACA;EAOhB,KAAK,OAAO;CACd;AACF"}
1
+ {"version":3,"file":"page-file-segment.mjs","names":[],"sources":["../../../../../../../web/src/routing/page-file-segment.ts"],"sourcesContent":["/**\n * Page-file segment grammar — the single, pure predicate that decides\n * whether one filesystem segment of a page file (a directory name or the\n * `.page.tsx` basename) is inside the grammar `filesystem-route.ts` can\n * actually translate into a route. This is a SIBLING of\n * `page-route-grammar.ts`, not an extension of it: that module validates a\n * page's DECLARED colon-form `route.path` (`/users/:id`); this one validates\n * a FILESYSTEM segment as it appears on disk (`[id]`) before it is turned\n * into one.\n *\n * DIRECTORY CONTRACT — applies to everything in `web/src/routing/`: nothing\n * here may import `node:fs`, `node:path`, `vite`, or `fastify`. This module\n * receives a single path segment string and trusts nothing about it beyond\n * what it checks — it asserts rather than trusts, but it never repairs a\n * malformed segment into a valid one.\n *\n * ALLOWED — and ONLY these shapes; anything else is rejected by default:\n * a plain static segment containing no \"[\" and no \"]\" at all; a `(group)`\n * directory whose name contains no \"[\" and no \"]\"; and exactly `[name]`,\n * where the segment is nothing but a single bracket pair and `name` matches\n * `^[A-Za-z_][A-Za-z0-9_]*$` — i.e. precisely the shape `filesystem-route.ts`\n * can translate into a `:name` route param.\n *\n * REJECTED — each with a reason naming the offending segment and, where one\n * exists, the supported alternative: a `(group)` directory whose name\n * contains \"[\" or \"]\" anywhere (`(bad[id])`, `([x])`) — a group contributes\n * nothing to the URL path, so bracket syntax inside one can never produce a\n * dynamic segment, and the fix is to move the dynamic segment out of the\n * group; a catch-all group (`[...slug]`, `[...]`); two or more bracket\n * groups in one segment (`[id].[slug]`, `[a]-[b]`); a bracket group mixed\n * with other text (`pre[id]`); an empty parameter name (`[]`); a parameter\n * name that does not start with a letter or `_`, or contains a character\n * other than a letter, digit or `_` (`[1bad]`, `[a-b]`, `[a b]`); and\n * unbalanced or stray `[`/`]` characters.\n *\n * REJECTION IS DATA, NOT A THROW: {@link classifyPageFileSegment} is total\n * and never raises. What a rejection MEANS to the user is nonetheless fixed\n * here: {@link PageFileSegmentNotSupportedError} is the single error\n * contract every caller raises when it refuses a rejected segment — one\n * class, one message shape, built from the rejection reason plus\n * caller-supplied page identity. Callers decide only WHEN to raise it and\n * supply that context; none of them wraps the rejection in a category or\n * wording of its own.\n */\n\n/**\n * The predicate's verdict for one filesystem segment:\n *\n * - `\"allowed\"` — the segment is one of the grammar's allowed shapes.\n * - `\"rejected\"` — the segment is outside the grammar; `reason` is a\n * complete, user-readable sentence naming the offending segment and the\n * supported alternative if one exists.\n */\nexport type PageFileSegmentVerdict = { type: \"allowed\" } | { type: \"rejected\"; reason: string };\n\nconst allowed: PageFileSegmentVerdict = { type: \"allowed\" };\n\nfunction rejected(reason: string): PageFileSegmentVerdict {\n return { type: \"rejected\", reason };\n}\n\n/** A whole, unqualified parameter name — no leading digit, no punctuation. */\nconst parameterNamePattern = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/** A single balanced, non-nested bracket group such as `[id]` or `[...slug]`. */\nconst bracketGroupPattern = /\\[[^[\\]]*]/g;\n\n/** A `(group)` directory — the whole segment wrapped in one pair of parens. */\nconst groupSegmentPattern = /^\\(([^/]+)\\)$/;\n\n/**\n * Decides whether one filesystem segment is inside the grammar\n * `filesystem-route.ts` can translate. Pure and total: every input yields a\n * verdict and nothing throws. `segment` must already be the isolated\n * segment (a single directory name, or the page basename with `.page.tsx`\n * already stripped) — no normalization is performed here.\n */\nexport function classifyPageFileSegment(segment: string): PageFileSegmentVerdict {\n const groupMatch = groupSegmentPattern.exec(segment);\n\n if (groupMatch) {\n const groupName = groupMatch[1];\n\n if (groupName.includes(\"[\") || groupName.includes(\"]\")) {\n return rejected(\n `Segment \"${segment}\" is a group, and a group contributes nothing to the URL path, so ` +\n `bracket syntax inside it can never produce a dynamic segment — move the dynamic ` +\n `segment out of the group, as in \"(marketing)/[id]/page.page.tsx\" rather than ` +\n `\"(marketing[id])/page.page.tsx\".`,\n );\n }\n\n return allowed;\n }\n\n if (!segment.includes(\"[\") && !segment.includes(\"]\")) {\n return allowed;\n }\n\n const groups = segment.match(bracketGroupPattern) ?? [];\n const remaining = groups.reduce((text, group) => text.replace(group, \"\"), segment);\n\n if (remaining.includes(\"[\") || remaining.includes(\"]\")) {\n return rejected(\n `Segment \"${segment}\" has unbalanced \"[\" or \"]\" brackets, which page routes do not ` +\n `support — balance the brackets, as in a whole-segment param like \"[id]\".`,\n );\n }\n\n if (groups.length > 1) {\n return rejected(\n `Segment \"${segment}\" contains more than one bracket group, and page routes require a ` +\n `dynamic segment to occupy its whole filesystem segment — split them into separate ` +\n `directory segments, as in \"[id]/[slug]\".`,\n );\n }\n\n const group = groups[0];\n\n // Unreachable as the checks above stand: a segment carrying a bracket but no\n // COMPLETE group leaves that bracket in `remaining`, which the unbalanced\n // check has already rejected. Stated as a guard rather than asserted away\n // with `!`, so that if either check above is ever narrowed this fails here,\n // naming the segment, instead of throwing on `group.slice` a few lines down.\n if (group === undefined) {\n return rejected(\n `Segment \"${segment}\" has unbalanced \"[\" or \"]\" brackets, which page routes do not ` +\n `support — balance the brackets, as in a whole-segment param like \"[id]\".`,\n );\n }\n\n if (remaining !== \"\") {\n return rejected(\n `Segment \"${segment}\" mixes a bracket group with other text, and page routes require a ` +\n `dynamic segment to occupy its whole filesystem segment — declare it as its own segment, ` +\n `as in \"[id]\".`,\n );\n }\n\n const name = group.slice(1, -1);\n\n if (name === \"\") {\n return rejected(\n `Segment \"${segment}\" has an empty parameter name — declare a name inside the brackets, ` +\n `as in \"[id]\".`,\n );\n }\n\n if (name.startsWith(\"...\")) {\n return rejected(\n `Segment \"${segment}\" is a catch-all pattern, which page routes do not support — page ` +\n `routes support only a whole-segment param such as \"[id]\", not a catch-all.`,\n );\n }\n\n if (parameterNamePattern.test(name)) {\n return allowed;\n }\n\n return rejected(\n `Segment \"${segment}\" declares a parameter name page routes do not support — a parameter ` +\n `name must start with a letter or \"_\" and contain only letters, digits and \"_\", as in ` +\n `\"[id]\" or \"[user_id]\".`,\n );\n}\n\n/**\n * The single error contract for a rejected page-file segment — the one\n * class and one message every caller of {@link classifyPageFileSegment}\n * raises when it refuses a page whose filesystem segment was rejected.\n * `pageFile` is the caller's context (its audience-appropriate identifier\n * for the page — an app-root-relative POSIX path, in practice); `segment`\n * and `reason` come from the verdict; the category and wording are this\n * module's.\n */\nexport class PageFileSegmentNotSupportedError extends Error {\n public constructor(\n public readonly pageFile: string,\n public readonly segment: string,\n public readonly reason: string,\n ) {\n super(\n `\"${pageFile}\" contains the filesystem segment \"${segment}\", which is not supported: ` +\n `${reason} Page routes support a plain static segment or a whole-segment dynamic param ` +\n `such as \"[id]\".`,\n );\n this.name = \"PageFileSegmentNotSupportedError\";\n }\n}\n"],"mappings":";AAuDA,MAAM,UAAkC,EAAE,MAAM,UAAU;AAE1D,SAAS,SAAS,QAAwC;CACxD,OAAO;EAAE,MAAM;EAAY;CAAO;AACpC;;AAGA,MAAM,uBAAuB;;AAG7B,MAAM,sBAAsB;;AAG5B,MAAM,sBAAsB;;;;;;;;AAS5B,SAAgB,wBAAwB,SAAyC;CAC/E,MAAM,aAAa,oBAAoB,KAAK,OAAO;CAEnD,IAAI,YAAY;EACd,MAAM,YAAY,WAAW;EAE7B,IAAI,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,GAAG,GACnD,OAAO,SACL,YAAY,QAAQ,gQAItB;EAGF,OAAO;CACT;CAEA,IAAI,CAAC,QAAQ,SAAS,GAAG,KAAK,CAAC,QAAQ,SAAS,GAAG,GACjD,OAAO;CAGT,MAAM,SAAS,QAAQ,MAAM,mBAAmB,KAAK,CAAC;CACtD,MAAM,YAAY,OAAO,QAAQ,MAAM,UAAU,KAAK,QAAQ,OAAO,EAAE,GAAG,OAAO;CAEjF,IAAI,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,GAAG,GACnD,OAAO,SACL,YAAY,QAAQ,wIAEtB;CAGF,IAAI,OAAO,SAAS,GAClB,OAAO,SACL,YAAY,QAAQ,6LAGtB;CAGF,MAAM,QAAQ,OAAO;CAOrB,IAAI,UAAU,QACZ,OAAO,SACL,YAAY,QAAQ,wIAEtB;CAGF,IAAI,cAAc,IAChB,OAAO,SACL,YAAY,QAAQ,yKAGtB;CAGF,MAAM,OAAO,MAAM,MAAM,GAAG,EAAE;CAE9B,IAAI,SAAS,IACX,OAAO,SACL,YAAY,QAAQ,kFAEtB;CAGF,IAAI,KAAK,WAAW,KAAK,GACvB,OAAO,SACL,YAAY,QAAQ,6IAEtB;CAGF,IAAI,qBAAqB,KAAK,IAAI,GAChC,OAAO;CAGT,OAAO,SACL,YAAY,QAAQ,iLAGtB;AACF;;;;;;;;;;AAWA,IAAa,mCAAb,cAAsD,MAAM;CAExC;CACA;CACA;CAHlB,AAAO,YACL,AAAgB,UAChB,AAAgB,SAChB,AAAgB,QAChB;EACA,MACE,IAAI,SAAS,qCAAqC,QAAQ,6BACrD,OAAO,6FAEd;EARgB;EACA;EACA;EAOhB,KAAK,OAAO;CACd;AACF"}
package/package.json CHANGED
@@ -12,8 +12,8 @@
12
12
  },
13
13
  "peerDependencies": {
14
14
  "@vitejs/plugin-react": "^5.2.0",
15
- "@warlock.js/core": "5.3.0",
16
- "@warlock.js/seal": "5.3.0",
15
+ "@warlock.js/core": "5.3.2",
16
+ "@warlock.js/seal": "5.3.2",
17
17
  "react": "*",
18
18
  "react-dom": "*",
19
19
  "vite": ">=7.3.5 <8"
@@ -38,7 +38,7 @@
38
38
  ],
39
39
  "author": "hassanzohdy",
40
40
  "license": "MIT",
41
- "version": "5.3.0",
41
+ "version": "5.3.2",
42
42
  "type": "module",
43
43
  "main": "./esm/index.mjs",
44
44
  "module": "./esm/index.mjs",