attaform 0.20.2 → 0.21.1

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.
Files changed (150) hide show
  1. package/dist/chunks/dev-key-collision-warnings.cjs +58 -0
  2. package/dist/chunks/dev-key-collision-warnings.cjs.map +1 -0
  3. package/dist/chunks/dev-key-collision-warnings.mjs +55 -0
  4. package/dist/chunks/dev-key-collision-warnings.mjs.map +1 -0
  5. package/dist/chunks/devtools.cjs +1 -1
  6. package/dist/chunks/devtools.mjs +1 -1
  7. package/dist/chunks/fingerprint.cjs +186 -0
  8. package/dist/chunks/fingerprint.cjs.map +1 -0
  9. package/dist/chunks/fingerprint.mjs +184 -0
  10. package/dist/chunks/fingerprint.mjs.map +1 -0
  11. package/dist/chunks/fingerprint2.cjs +162 -0
  12. package/dist/chunks/fingerprint2.cjs.map +1 -0
  13. package/dist/chunks/fingerprint2.mjs +160 -0
  14. package/dist/chunks/fingerprint2.mjs.map +1 -0
  15. package/dist/chunks/indexeddb.cjs +1 -1
  16. package/dist/chunks/indexeddb.mjs +1 -1
  17. package/dist/chunks/local-storage.cjs +1 -1
  18. package/dist/chunks/local-storage.mjs +1 -1
  19. package/dist/chunks/multi-tab-sync.cjs +367 -0
  20. package/dist/chunks/multi-tab-sync.cjs.map +1 -0
  21. package/dist/chunks/multi-tab-sync.mjs +364 -0
  22. package/dist/chunks/multi-tab-sync.mjs.map +1 -0
  23. package/dist/chunks/session-storage.cjs +1 -1
  24. package/dist/chunks/session-storage.mjs +1 -1
  25. package/dist/chunks/wire-persistence.cjs +396 -0
  26. package/dist/chunks/wire-persistence.cjs.map +1 -0
  27. package/dist/chunks/wire-persistence.mjs +394 -0
  28. package/dist/chunks/wire-persistence.mjs.map +1 -0
  29. package/dist/esbuild.cjs +28 -0
  30. package/dist/esbuild.cjs.map +1 -0
  31. package/dist/esbuild.d.cts +56 -0
  32. package/dist/esbuild.d.mts +56 -0
  33. package/dist/esbuild.d.ts +56 -0
  34. package/dist/esbuild.mjs +26 -0
  35. package/dist/esbuild.mjs.map +1 -0
  36. package/dist/index.cjs +5 -3
  37. package/dist/index.cjs.map +1 -1
  38. package/dist/index.d.cts +66 -70
  39. package/dist/index.d.mts +66 -70
  40. package/dist/index.d.ts +66 -70
  41. package/dist/index.mjs +5 -5
  42. package/dist/nuxt.d.cts +1 -1
  43. package/dist/nuxt.d.mts +1 -1
  44. package/dist/nuxt.d.ts +1 -1
  45. package/dist/rollup.cjs +24 -0
  46. package/dist/rollup.cjs.map +1 -0
  47. package/dist/rollup.d.cts +35 -0
  48. package/dist/rollup.d.mts +35 -0
  49. package/dist/rollup.d.ts +35 -0
  50. package/dist/rollup.mjs +22 -0
  51. package/dist/rollup.mjs.map +1 -0
  52. package/dist/rspack.cjs +10 -0
  53. package/dist/rspack.cjs.map +1 -0
  54. package/dist/rspack.d.cts +40 -0
  55. package/dist/rspack.d.mts +40 -0
  56. package/dist/rspack.d.ts +40 -0
  57. package/dist/rspack.mjs +8 -0
  58. package/dist/rspack.mjs.map +1 -0
  59. package/dist/runtime/plugins/attaform.cjs +2 -2
  60. package/dist/runtime/plugins/attaform.mjs +2 -2
  61. package/dist/shared/attaform.BJGA_UOS.mjs +37 -0
  62. package/dist/shared/attaform.BJGA_UOS.mjs.map +1 -0
  63. package/dist/shared/attaform.BRGIpZo4.cjs +26 -0
  64. package/dist/shared/attaform.BRGIpZo4.cjs.map +1 -0
  65. package/dist/shared/{attaform.DAKrGhxc.cjs → attaform.BSkvn43g.cjs} +101 -417
  66. package/dist/shared/attaform.BSkvn43g.cjs.map +1 -0
  67. package/dist/shared/{attaform.sWm8B15V.d.mts → attaform.BWfliRIK.d.cts} +172 -2
  68. package/dist/shared/{attaform.BGk8cfw2.mjs → attaform.Be8NZG9M.mjs} +178 -21
  69. package/dist/shared/attaform.Be8NZG9M.mjs.map +1 -0
  70. package/dist/shared/{attaform.D2SCCd4O.cjs → attaform.Bq5sX7TF.cjs} +2 -2
  71. package/dist/shared/{attaform.D2SCCd4O.cjs.map → attaform.Bq5sX7TF.cjs.map} +1 -1
  72. package/dist/shared/{attaform.ceGEAEMk.d.ts → attaform.Bv7dRDWK.d.ts} +172 -2
  73. package/dist/shared/attaform.C3Doa9Pt.mjs +24 -0
  74. package/dist/shared/attaform.C3Doa9Pt.mjs.map +1 -0
  75. package/dist/shared/{attaform.B_hph5AE.cjs → attaform.CICFZ1iS.cjs} +178 -20
  76. package/dist/shared/attaform.CICFZ1iS.cjs.map +1 -0
  77. package/dist/shared/attaform.CQN9R62B.cjs +39 -0
  78. package/dist/shared/attaform.CQN9R62B.cjs.map +1 -0
  79. package/dist/shared/{attaform.CwLjUqmQ.cjs → attaform.ClXwitZj.cjs} +735 -960
  80. package/dist/shared/attaform.ClXwitZj.cjs.map +1 -0
  81. package/dist/shared/{attaform.99cfHcIt.d.cts → attaform.D0dWZsJt.d.cts} +349 -77
  82. package/dist/shared/{attaform.99cfHcIt.d.mts → attaform.D0dWZsJt.d.mts} +349 -77
  83. package/dist/shared/{attaform.99cfHcIt.d.ts → attaform.D0dWZsJt.d.ts} +349 -77
  84. package/dist/shared/{attaform.z5j3LwJz.cjs → attaform.D32WwKk6.cjs} +216 -35
  85. package/dist/shared/attaform.D32WwKk6.cjs.map +1 -0
  86. package/dist/shared/{attaform.C5aYC_T8.mjs → attaform.DMEP_ENr.mjs} +39 -392
  87. package/dist/shared/attaform.DMEP_ENr.mjs.map +1 -0
  88. package/dist/shared/{attaform.tiWEVznj.mjs → attaform.DR6RmxWZ.mjs} +725 -962
  89. package/dist/shared/attaform.DR6RmxWZ.mjs.map +1 -0
  90. package/dist/shared/{attaform.Dt7dEcHk.mjs → attaform.DozgVlCE.mjs} +89 -405
  91. package/dist/shared/attaform.DozgVlCE.mjs.map +1 -0
  92. package/dist/shared/{attaform.DN5CvZrg.d.ts → attaform.Duecg2NO.d.mts} +2 -2
  93. package/dist/shared/attaform.DuzQYscR.d.cts +41 -0
  94. package/dist/shared/attaform.DuzQYscR.d.mts +41 -0
  95. package/dist/shared/attaform.DuzQYscR.d.ts +41 -0
  96. package/dist/shared/{attaform.BXinSW2T.d.mts → attaform.FudOcHaa.d.cts} +2 -2
  97. package/dist/shared/attaform.LEWUFqUw.cjs +54 -0
  98. package/dist/shared/attaform.LEWUFqUw.cjs.map +1 -0
  99. package/dist/shared/{attaform.CywE4y8x.d.cts → attaform.MtrpT6Ki.d.ts} +2 -2
  100. package/dist/shared/{attaform.DbRgDFa7.d.cts → attaform.NQ8mybyW.d.mts} +172 -2
  101. package/dist/shared/{attaform.Cd4AOfwu.cjs → attaform.S-pYLSo4.cjs} +68 -402
  102. package/dist/shared/attaform.S-pYLSo4.cjs.map +1 -0
  103. package/dist/shared/{attaform.CnrxbkB6.mjs → attaform.Y1ZGhM4k.mjs} +2 -2
  104. package/dist/shared/{attaform.CnrxbkB6.mjs.map → attaform.Y1ZGhM4k.mjs.map} +1 -1
  105. package/dist/shared/{attaform.QG5TG8lB.mjs → attaform.pmtahXKy.mjs} +216 -36
  106. package/dist/shared/attaform.pmtahXKy.mjs.map +1 -0
  107. package/dist/shared/attaform.sHkHv_98.mjs +51 -0
  108. package/dist/shared/attaform.sHkHv_98.mjs.map +1 -0
  109. package/dist/vite.cjs +9 -45
  110. package/dist/vite.cjs.map +1 -1
  111. package/dist/vite.d.cts +36 -0
  112. package/dist/vite.d.mts +36 -0
  113. package/dist/vite.d.ts +36 -0
  114. package/dist/vite.mjs +8 -44
  115. package/dist/vite.mjs.map +1 -1
  116. package/dist/webpack.cjs +10 -0
  117. package/dist/webpack.cjs.map +1 -0
  118. package/dist/webpack.d.cts +37 -0
  119. package/dist/webpack.d.mts +37 -0
  120. package/dist/webpack.d.ts +37 -0
  121. package/dist/webpack.mjs +8 -0
  122. package/dist/webpack.mjs.map +1 -0
  123. package/dist/zod-v3.cjs +3 -3
  124. package/dist/zod-v3.d.cts +3 -3
  125. package/dist/zod-v3.d.mts +3 -3
  126. package/dist/zod-v3.d.ts +3 -3
  127. package/dist/zod-v3.mjs +3 -3
  128. package/dist/zod-v4.cjs +3 -3
  129. package/dist/zod-v4.d.cts +4 -4
  130. package/dist/zod-v4.d.mts +4 -4
  131. package/dist/zod-v4.d.ts +4 -4
  132. package/dist/zod-v4.mjs +3 -3
  133. package/dist/zod.cjs +8 -8
  134. package/dist/zod.cjs.map +1 -1
  135. package/dist/zod.d.cts +52 -10
  136. package/dist/zod.d.mts +52 -10
  137. package/dist/zod.d.ts +52 -10
  138. package/dist/zod.mjs +6 -6
  139. package/dist/zod.mjs.map +1 -1
  140. package/package.json +19 -5
  141. package/dist/shared/attaform.BGk8cfw2.mjs.map +0 -1
  142. package/dist/shared/attaform.B_hph5AE.cjs.map +0 -1
  143. package/dist/shared/attaform.C5aYC_T8.mjs.map +0 -1
  144. package/dist/shared/attaform.Cd4AOfwu.cjs.map +0 -1
  145. package/dist/shared/attaform.CwLjUqmQ.cjs.map +0 -1
  146. package/dist/shared/attaform.DAKrGhxc.cjs.map +0 -1
  147. package/dist/shared/attaform.Dt7dEcHk.mjs.map +0 -1
  148. package/dist/shared/attaform.QG5TG8lB.mjs.map +0 -1
  149. package/dist/shared/attaform.tiWEVznj.mjs.map +0 -1
  150. package/dist/shared/attaform.z5j3LwJz.cjs.map +0 -1
@@ -0,0 +1,40 @@
1
+ import { W as WebpackFamilyPlugin, a as WebpackFamilyPluginOptions } from './shared/attaform.DuzQYscR.cjs';
2
+
3
+ /**
4
+ * `attaform/rspack` — Rspack plugin that rewrites `attaform/zod` imports
5
+ * to the single matching adapter subpath (`attaform/zod-v3` or
6
+ * `attaform/zod-v4`) at build time, based on the consumer's installed Zod
7
+ * major. Without it, Rspack ships both adapters because the unified
8
+ * `attaform/zod` entry imports both for runtime dispatch.
9
+ *
10
+ * Usage:
11
+ *
12
+ * // rspack.config.mjs
13
+ * import { attaform } from 'attaform/rspack'
14
+ *
15
+ * export default {
16
+ * plugins: [attaform()],
17
+ * }
18
+ *
19
+ * Rspack mirrors webpack's plugin API for the resolve hook attaform taps,
20
+ * so this shares its body with `attaform/webpack` via
21
+ * `createWebpackFamilyPlugin`; only the diagnostic tag differs.
22
+ *
23
+ * This plugin only does the adapter rewrite. The Vue SFC `v-register`
24
+ * transforms that `attaform/vite` wires (load-bearing for SSR initial
25
+ * render) are `@vitejs/plugin-vue`-specific and do not transfer; a
26
+ * non-Vite consumer that needs them wires `attaform/transforms` into
27
+ * their Vue compiler separately.
28
+ *
29
+ * Zero-dep: the plugin imports nothing from `@rspack/core` (it taps the
30
+ * resolve hook the compiler injects at the consumer's build).
31
+ */
32
+
33
+ /** Options for the Rspack `attaform()` plugin. */
34
+ type AttaformRspackPluginOptions = WebpackFamilyPluginOptions;
35
+ /** The structural shape Rspack requires of the plugin. */
36
+ type AttaformRspackPlugin = WebpackFamilyPlugin;
37
+ declare function attaform(options?: AttaformRspackPluginOptions): AttaformRspackPlugin;
38
+
39
+ export { attaform };
40
+ export type { AttaformRspackPlugin, AttaformRspackPluginOptions };
@@ -0,0 +1,40 @@
1
+ import { W as WebpackFamilyPlugin, a as WebpackFamilyPluginOptions } from './shared/attaform.DuzQYscR.mjs';
2
+
3
+ /**
4
+ * `attaform/rspack` — Rspack plugin that rewrites `attaform/zod` imports
5
+ * to the single matching adapter subpath (`attaform/zod-v3` or
6
+ * `attaform/zod-v4`) at build time, based on the consumer's installed Zod
7
+ * major. Without it, Rspack ships both adapters because the unified
8
+ * `attaform/zod` entry imports both for runtime dispatch.
9
+ *
10
+ * Usage:
11
+ *
12
+ * // rspack.config.mjs
13
+ * import { attaform } from 'attaform/rspack'
14
+ *
15
+ * export default {
16
+ * plugins: [attaform()],
17
+ * }
18
+ *
19
+ * Rspack mirrors webpack's plugin API for the resolve hook attaform taps,
20
+ * so this shares its body with `attaform/webpack` via
21
+ * `createWebpackFamilyPlugin`; only the diagnostic tag differs.
22
+ *
23
+ * This plugin only does the adapter rewrite. The Vue SFC `v-register`
24
+ * transforms that `attaform/vite` wires (load-bearing for SSR initial
25
+ * render) are `@vitejs/plugin-vue`-specific and do not transfer; a
26
+ * non-Vite consumer that needs them wires `attaform/transforms` into
27
+ * their Vue compiler separately.
28
+ *
29
+ * Zero-dep: the plugin imports nothing from `@rspack/core` (it taps the
30
+ * resolve hook the compiler injects at the consumer's build).
31
+ */
32
+
33
+ /** Options for the Rspack `attaform()` plugin. */
34
+ type AttaformRspackPluginOptions = WebpackFamilyPluginOptions;
35
+ /** The structural shape Rspack requires of the plugin. */
36
+ type AttaformRspackPlugin = WebpackFamilyPlugin;
37
+ declare function attaform(options?: AttaformRspackPluginOptions): AttaformRspackPlugin;
38
+
39
+ export { attaform };
40
+ export type { AttaformRspackPlugin, AttaformRspackPluginOptions };
@@ -0,0 +1,40 @@
1
+ import { W as WebpackFamilyPlugin, a as WebpackFamilyPluginOptions } from './shared/attaform.DuzQYscR.js';
2
+
3
+ /**
4
+ * `attaform/rspack` — Rspack plugin that rewrites `attaform/zod` imports
5
+ * to the single matching adapter subpath (`attaform/zod-v3` or
6
+ * `attaform/zod-v4`) at build time, based on the consumer's installed Zod
7
+ * major. Without it, Rspack ships both adapters because the unified
8
+ * `attaform/zod` entry imports both for runtime dispatch.
9
+ *
10
+ * Usage:
11
+ *
12
+ * // rspack.config.mjs
13
+ * import { attaform } from 'attaform/rspack'
14
+ *
15
+ * export default {
16
+ * plugins: [attaform()],
17
+ * }
18
+ *
19
+ * Rspack mirrors webpack's plugin API for the resolve hook attaform taps,
20
+ * so this shares its body with `attaform/webpack` via
21
+ * `createWebpackFamilyPlugin`; only the diagnostic tag differs.
22
+ *
23
+ * This plugin only does the adapter rewrite. The Vue SFC `v-register`
24
+ * transforms that `attaform/vite` wires (load-bearing for SSR initial
25
+ * render) are `@vitejs/plugin-vue`-specific and do not transfer; a
26
+ * non-Vite consumer that needs them wires `attaform/transforms` into
27
+ * their Vue compiler separately.
28
+ *
29
+ * Zero-dep: the plugin imports nothing from `@rspack/core` (it taps the
30
+ * resolve hook the compiler injects at the consumer's build).
31
+ */
32
+
33
+ /** Options for the Rspack `attaform()` plugin. */
34
+ type AttaformRspackPluginOptions = WebpackFamilyPluginOptions;
35
+ /** The structural shape Rspack requires of the plugin. */
36
+ type AttaformRspackPlugin = WebpackFamilyPlugin;
37
+ declare function attaform(options?: AttaformRspackPluginOptions): AttaformRspackPlugin;
38
+
39
+ export { attaform };
40
+ export type { AttaformRspackPlugin, AttaformRspackPluginOptions };
@@ -0,0 +1,8 @@
1
+ import { c as createWebpackFamilyPlugin } from './shared/attaform.C3Doa9Pt.mjs';
2
+
3
+ function attaform(options = {}) {
4
+ return createWebpackFamilyPlugin("attaform/rspack", options);
5
+ }
6
+
7
+ export { attaform };
8
+ //# sourceMappingURL=rspack.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rspack.mjs","sources":["../src/rspack.ts"],"sourcesContent":["/**\n * `attaform/rspack` — Rspack plugin that rewrites `attaform/zod` imports\n * to the single matching adapter subpath (`attaform/zod-v3` or\n * `attaform/zod-v4`) at build time, based on the consumer's installed Zod\n * major. Without it, Rspack ships both adapters because the unified\n * `attaform/zod` entry imports both for runtime dispatch.\n *\n * Usage:\n *\n * // rspack.config.mjs\n * import { attaform } from 'attaform/rspack'\n *\n * export default {\n * plugins: [attaform()],\n * }\n *\n * Rspack mirrors webpack's plugin API for the resolve hook attaform taps,\n * so this shares its body with `attaform/webpack` via\n * `createWebpackFamilyPlugin`; only the diagnostic tag differs.\n *\n * This plugin only does the adapter rewrite. The Vue SFC `v-register`\n * transforms that `attaform/vite` wires (load-bearing for SSR initial\n * render) are `@vitejs/plugin-vue`-specific and do not transfer; a\n * non-Vite consumer that needs them wires `attaform/transforms` into\n * their Vue compiler separately.\n *\n * Zero-dep: the plugin imports nothing from `@rspack/core` (it taps the\n * resolve hook the compiler injects at the consumer's build).\n */\nimport {\n createWebpackFamilyPlugin,\n type WebpackFamilyPlugin,\n type WebpackFamilyPluginOptions,\n} from './core/webpack-family-plugin'\n\n/** Options for the Rspack `attaform()` plugin. */\nexport type AttaformRspackPluginOptions = WebpackFamilyPluginOptions\n/** The structural shape Rspack requires of the plugin. */\nexport type AttaformRspackPlugin = WebpackFamilyPlugin\n\nexport function attaform(options: AttaformRspackPluginOptions = {}): AttaformRspackPlugin {\n return createWebpackFamilyPlugin('attaform/rspack', options)\n}\n"],"names":[],"mappings":";;AAwCO,SAAS,QAAA,CAAS,OAAA,GAAuC,EAAC,EAAyB;AACxF,EAAA,OAAO,yBAAA,CAA0B,mBAAmB,OAAO,CAAA;AAC7D;;;;"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  const app = require('nuxt/app');
4
- const devtoolsShared = require('../../shared/attaform.D2SCCd4O.cjs');
5
- const paths = require('../../shared/attaform.z5j3LwJz.cjs');
4
+ const devtoolsShared = require('../../shared/attaform.Bq5sX7TF.cjs');
5
+ const paths = require('../../shared/attaform.D32WwKk6.cjs');
6
6
 
7
7
  var attaform_default = app.defineNuxtPlugin({
8
8
  // `enforce: 'pre'` makes the "we run before any component's setup" claim
@@ -1,6 +1,6 @@
1
1
  import { defineNuxtPlugin, useRuntimeConfig, useRoute } from 'nuxt/app';
2
- import { r as renderAttaformState, h as hydrateAttaformState, D as DEVTOOLS_WINDOW_KEY } from '../../shared/attaform.CnrxbkB6.mjs';
3
- import { m as createAttaform, y as kAttaformWizardActiveStepResolver, s as getRegistryFromApp } from '../../shared/attaform.QG5TG8lB.mjs';
2
+ import { r as renderAttaformState, h as hydrateAttaformState, D as DEVTOOLS_WINDOW_KEY } from '../../shared/attaform.Y1ZGhM4k.mjs';
3
+ import { m as createAttaform, y as kAttaformWizardActiveStepResolver, s as getRegistryFromApp } from '../../shared/attaform.pmtahXKy.mjs';
4
4
 
5
5
  var attaform_default = defineNuxtPlugin({
6
6
  // `enforce: 'pre'` makes the "we run before any component's setup" claim
@@ -0,0 +1,37 @@
1
+ function canonicalStringify(value, seen = /* @__PURE__ */ new WeakSet()) {
2
+ if (value === null) return "null";
3
+ if (value === void 0) return "undefined";
4
+ const t = typeof value;
5
+ if (t === "string") return JSON.stringify(value);
6
+ if (t === "number" || t === "boolean") return String(value);
7
+ if (t === "bigint") return `${String(value)}n`;
8
+ if (t === "function") return "fn:*";
9
+ if (t === "symbol") return "symbol:*";
10
+ if (Array.isArray(value)) {
11
+ if (seen.has(value)) return "<cyclic>";
12
+ seen.add(value);
13
+ try {
14
+ const parts = value.map((v) => canonicalStringify(v, seen));
15
+ return `[${parts.join(",")}]`;
16
+ } finally {
17
+ seen.delete(value);
18
+ }
19
+ }
20
+ if (t === "object") {
21
+ const obj = value;
22
+ if (seen.has(obj)) return "<cyclic>";
23
+ seen.add(obj);
24
+ try {
25
+ if (value instanceof Date) return `date:${value.getTime()}`;
26
+ if (value instanceof RegExp) return `regex:${String(value)}`;
27
+ const entries = Object.entries(obj).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([k, v]) => `${JSON.stringify(k)}:${canonicalStringify(v, seen)}`);
28
+ return `{${entries.join(",")}}`;
29
+ } finally {
30
+ seen.delete(obj);
31
+ }
32
+ }
33
+ return "unknown";
34
+ }
35
+
36
+ export { canonicalStringify as c };
37
+ //# sourceMappingURL=attaform.BJGA_UOS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attaform.BJGA_UOS.mjs","sources":["../../src/runtime/core/canonical-stringify.ts"],"sourcesContent":["/**\n * Canonical stringify for arbitrary values, shared by the v3 and v4\n * schema fingerprint walkers. Produces a stable string surface for\n * structural equality testing: object keys are sorted, arrays walk in\n * index order, and functions / symbols / cycles collapse to opaque\n * sentinels.\n *\n * This is NOT JSON. The output is not meant to round-trip through\n * `JSON.parse`; it exists purely so two structurally-equal values\n * serialise to the same string and two structurally-different values\n * do not.\n *\n * Cycle detection uses an ancestor-stack add / delete pattern: a\n * reference is only treated as cyclic while it sits on the path from\n * the root being stringified. Without the `delete` on the way back up,\n * two sibling properties pointing at the same object would see the\n * second one falsely labelled `<cyclic>`.\n */\nexport function canonicalStringify(value: unknown, seen: WeakSet<object> = new WeakSet()): string {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n const t = typeof value\n if (t === 'string') return JSON.stringify(value)\n if (t === 'number' || t === 'boolean') return String(value)\n if (t === 'bigint') return `${String(value)}n`\n if (t === 'function') return 'fn:*'\n if (t === 'symbol') return 'symbol:*'\n if (Array.isArray(value)) {\n if (seen.has(value)) return '<cyclic>'\n seen.add(value)\n try {\n const parts = value.map((v) => canonicalStringify(v, seen))\n return `[${parts.join(',')}]`\n } finally {\n seen.delete(value)\n }\n }\n if (t === 'object') {\n // `null` already returned above, so the remaining `object` branch is\n // non-null; narrowing against null again is redundant (eslint's\n // no-unnecessary-condition rule flags it).\n const obj = value as Record<string, unknown>\n if (seen.has(obj)) return '<cyclic>'\n seen.add(obj)\n try {\n if (value instanceof Date) return `date:${value.getTime()}`\n if (value instanceof RegExp) return `regex:${String(value)}`\n const entries = Object.entries(obj)\n .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(([k, v]) => `${JSON.stringify(k)}:${canonicalStringify(v, seen)}`)\n return `{${entries.join(',')}}`\n } finally {\n seen.delete(obj)\n }\n }\n return 'unknown'\n}\n"],"names":[],"mappings":"AAkBO,SAAS,kBAAA,CAAmB,KAAA,EAAgB,IAAA,mBAAwB,IAAI,SAAQ,EAAW;AAChG,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,WAAA;AAChC,EAAA,MAAM,IAAI,OAAO,KAAA;AACjB,EAAA,IAAI,CAAA,KAAM,QAAA,EAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC/C,EAAA,IAAI,MAAM,QAAA,IAAY,CAAA,KAAM,SAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAC1D,EAAA,IAAI,MAAM,QAAA,EAAU,OAAO,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA;AAC3C,EAAA,IAAI,CAAA,KAAM,YAAY,OAAO,MAAA;AAC7B,EAAA,IAAI,CAAA,KAAM,UAAU,OAAO,UAAA;AAC3B,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG,OAAO,UAAA;AAC5B,IAAA,IAAA,CAAK,IAAI,KAAK,CAAA;AACd,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,CAAC,MAAM,kBAAA,CAAmB,CAAA,EAAG,IAAI,CAAC,CAAA;AAC1D,MAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IAC5B,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IACnB;AAAA,EACF;AACA,EAAA,IAAI,MAAM,QAAA,EAAU;AAIlB,IAAA,MAAM,GAAA,GAAM,KAAA;AACZ,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,UAAA;AAC1B,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,IAAI;AACF,MAAA,IAAI,iBAAiB,IAAA,EAAM,OAAO,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAS,CAAA,CAAA;AACzD,MAAA,IAAI,iBAAiB,MAAA,EAAQ,OAAO,CAAA,MAAA,EAAS,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAC1D,MAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAC/B,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAO,CAAA,GAAI,CAAA,GAAI,KAAK,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAE,EAC/C,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA,CAAA,EAAI,mBAAmB,CAAA,EAAG,IAAI,CAAC,CAAA,CAAE,CAAA;AACxE,MAAA,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IAC9B,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,IACjB;AAAA,EACF;AACA,EAAA,OAAO,SAAA;AACT;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const detectZodMajor = require('./attaform.LEWUFqUw.cjs');
4
+
5
+ const TAP_NAME = "attaform";
6
+ function createWebpackFamilyPlugin(tag, options) {
7
+ const resolveZodAlias = options.resolveZodAlias !== false;
8
+ const warnState = { warned: false };
9
+ return {
10
+ apply(compiler) {
11
+ const root = compiler.context ?? options.root ?? process.cwd();
12
+ const target = detectZodMajor.resolveZodAliasTarget(root, tag, resolveZodAlias, warnState);
13
+ if (target === null) return;
14
+ compiler.hooks.normalModuleFactory.tap(TAP_NAME, (factory) => {
15
+ factory.hooks.beforeResolve.tap(TAP_NAME, (data) => {
16
+ if (data.request === detectZodMajor.ZOD_UNIFIED_SPECIFIER) {
17
+ data.request = target;
18
+ }
19
+ });
20
+ });
21
+ }
22
+ };
23
+ }
24
+
25
+ exports.createWebpackFamilyPlugin = createWebpackFamilyPlugin;
26
+ //# sourceMappingURL=attaform.BRGIpZo4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attaform.BRGIpZo4.cjs","sources":["../../src/core/webpack-family-plugin.ts"],"sourcesContent":["/**\n * Shared webpack/rspack plugin body. Rspack mirrors webpack's plugin API\n * for the resolve hooks attaform taps, so one implementation backs both\n * `attaform/webpack` and `attaform/rspack`; only the diagnostic `tag`\n * differs.\n *\n * The plugin taps `normalModuleFactory.beforeResolve` and rewrites the\n * `attaform/zod` request to the matching adapter subpath, the same effect\n * as webpack's own `NormalModuleReplacementPlugin` but tapping the hook\n * directly so the plugin imports nothing from webpack/rspack (keeping\n * attaform dependency-free). The bundler injects the hook API at the\n * consumer's build, so the minimal structural types below are all the\n * plugin needs to compile.\n *\n * Build-time only: never part of a consumer's browser bundle.\n */\nimport { resolveZodAliasTarget, ZOD_UNIFIED_SPECIFIER } from './detect-zod-major'\n\nexport interface WebpackFamilyPluginOptions {\n /**\n * Rewrite `attaform/zod` imports at build time to the matching adapter\n * subpath, based on the consumer's installed Zod major. Default `true`.\n * Set to `false` to keep the runtime-dispatch unified entry (ships both\n * adapters) when a project intentionally mixes Zod versions or resolves\n * Zod in a non-standard way.\n */\n resolveZodAlias?: boolean\n /**\n * Project root to resolve the installed Zod from. Defaults to the\n * compiler's `context`, falling back to `process.cwd()`. Set this when\n * the build runs from a directory other than the project that owns the\n * Zod dependency (some monorepo layouts).\n */\n root?: string\n}\n\ninterface WebpackTapable<T> {\n tap(name: string, fn: (arg: T) => void): void\n}\ninterface WebpackResolveData {\n request: string\n}\ninterface WebpackNormalModuleFactory {\n hooks: { beforeResolve: WebpackTapable<WebpackResolveData> }\n}\ninterface WebpackCompiler {\n context?: string\n hooks: { normalModuleFactory: WebpackTapable<WebpackNormalModuleFactory> }\n}\n\n/** The structural shape webpack/rspack require of a plugin: an object\n * with an `apply(compiler)` method. */\nexport interface WebpackFamilyPlugin {\n apply(compiler: WebpackCompiler): void\n}\n\nconst TAP_NAME = 'attaform'\n\nexport function createWebpackFamilyPlugin(\n tag: string,\n options: WebpackFamilyPluginOptions\n): WebpackFamilyPlugin {\n const resolveZodAlias = options.resolveZodAlias !== false\n const warnState = { warned: false }\n return {\n apply(compiler) {\n const root = compiler.context ?? options.root ?? process.cwd()\n const target = resolveZodAliasTarget(root, tag, resolveZodAlias, warnState)\n if (target === null) return\n compiler.hooks.normalModuleFactory.tap(TAP_NAME, (factory) => {\n factory.hooks.beforeResolve.tap(TAP_NAME, (data) => {\n if (data.request === ZOD_UNIFIED_SPECIFIER) {\n data.request = target\n }\n })\n })\n },\n }\n}\n"],"names":["resolveZodAliasTarget","ZOD_UNIFIED_SPECIFIER"],"mappings":";;;;AAwDA,MAAM,QAAA,GAAW,UAAA;AAEV,SAAS,yBAAA,CACd,KACA,OAAA,EACqB;AACrB,EAAA,MAAM,eAAA,GAAkB,QAAQ,eAAA,KAAoB,KAAA;AACpD,EAAA,MAAM,SAAA,GAAY,EAAE,MAAA,EAAQ,KAAA,EAAM;AAClC,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,EAAU;AACd,MAAA,MAAM,OAAO,QAAA,CAAS,OAAA,IAAW,OAAA,CAAQ,IAAA,IAAQ,QAAQ,GAAA,EAAI;AAC7D,MAAA,MAAM,MAAA,GAASA,oCAAA,CAAsB,IAAA,EAAM,GAAA,EAAK,iBAAiB,SAAS,CAAA;AAC1E,MAAA,IAAI,WAAW,IAAA,EAAM;AACrB,MAAA,QAAA,CAAS,KAAA,CAAM,mBAAA,CAAoB,GAAA,CAAI,QAAA,EAAU,CAAC,OAAA,KAAY;AAC5D,QAAA,OAAA,CAAQ,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,QAAA,EAAU,CAAC,IAAA,KAAS;AAClD,UAAA,IAAI,IAAA,CAAK,YAAYC,oCAAA,EAAuB;AAC1C,YAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,UACjB;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;;;;"}