@fragno-dev/create 0.0.4 → 0.1.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.
@@ -4,9 +4,9 @@ $ tsdown
4
4
  ℹ entry: src/index.ts
5
5
  ℹ tsconfig: tsconfig.json
6
6
  ℹ Build start
7
- ℹ dist/index.js  5.15 kB │ gzip: 1.70 kB
8
- ℹ dist/index.js.map 10.09 kB │ gzip: 3.07 kB
7
+ ℹ dist/index.js  5.95 kB │ gzip: 1.91 kB
8
+ ℹ dist/index.js.map 11.69 kB │ gzip: 3.44 kB
9
9
  ℹ dist/index.d.ts.map  0.58 kB │ gzip: 0.31 kB
10
- ℹ dist/index.d.ts  1.25 kB │ gzip: 0.46 kB
11
- ℹ 4 files, total: 17.08 kB
12
- ✔ Build complete in 2604ms
10
+ ℹ dist/index.d.ts  1.28 kB │ gzip: 0.48 kB
11
+ ℹ 4 files, total: 19.50 kB
12
+ ✔ Build complete in 3193ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @fragno-dev/create
2
2
 
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 1032f44: Use new defaults API in schema
8
+
9
+ ## 0.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 4cd4081: Support optionally initializing a Fragment template with data layer
14
+
3
15
  ## 0.0.4
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -37,6 +37,7 @@ declare const createOptionsSchema: z.ZodObject<{
37
37
  "AGENTS.md": "AGENTS.md";
38
38
  "CLAUDE.md": "CLAUDE.md";
39
39
  }>;
40
+ withDatabase: z.ZodBoolean;
40
41
  }, z.core.$strip>;
41
42
  type CreateOptions = z.infer<typeof createOptionsSchema>;
42
43
  declare function create(options: CreateOptions): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;cAOM,qBAAmB,CAAA,CAAA;KACb,aAAA,GAAgB,CAAA,CAAE,aAAa;AAHnB,cAKlB,gBAH2C,EAG3B,CAAA,CAAA,OAHG,CAAA;EACb,OAAA,EAAA,SAAa;EAEnB,MAAA,EAAA,QAAA;EASM,IAAA,EAAA,MAAA;EAEN,MAAA,EAAA,QAAA;EACM,OAAA,EAAA,SAAS;EAER,MAAA,EAAA,QAAA;;;KALD,UAAA,GAAa,CAAA,CAAE,aAAa;cAElC,iBAAe,CAAA,CAAA;;;EAGW,WAAA,EAAA,WAAA;CAAA,CAAA;AAQ3B,KAVO,SAAA,GAAY,CAAA,CAAE,KAUU,CAAA,OAVG,eAUhB,CAAA;AAEP,cAVH,mBAUgC,EAVb,CAAA,CAAA,SAUa,CAAA;;;;;;;;;;;;;;;;;;;KAFxC,aAAA,GAAgB,CAAA,CAAE,aAAa;iBAEpB,MAAA,UAAgB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;cAOM,qBAAmB,CAAA,CAAA;KACb,aAAA,GAAgB,CAAA,CAAE,aAAa;AAHnB,cAKlB,gBAH2C,EAG3B,CAAA,CAAA,OAHG,CAAA;EACb,OAAA,EAAA,SAAa;EAEnB,MAAA,EAAA,QAAA;EASM,IAAA,EAAA,MAAA;EAEN,MAAA,EAAA,QAAA;EACM,OAAA,EAAA,SAAS;EAER,MAAA,EAAA,QAAA;;;KALD,UAAA,GAAa,CAAA,CAAE,aAAa;cAElC,iBAAe,CAAA,CAAA;;;;CAGW,CAAA;AAAA,KAFpB,SAAA,GAAY,CAAA,CAAE,KAEM,CAAA,OAFO,eAEP,CAAA;AAS3B,cATQ,mBASuB,EATJ,CAAA,CAAA,SASX,CAAE;EAEP,IAAA,aAAM;;;;;;;;;;;;;;;;;;;KAFjB,aAAA,GAAgB,CAAA,CAAE,aAAa;iBAEpB,MAAA,UAAgB"}
package/dist/index.js CHANGED
@@ -47,7 +47,28 @@ function copy(from, to, rename = identity) {
47
47
 
48
48
  //#endregion
49
49
  //#region src/package-json.ts
50
- const unpluginFragnoVersion = "^0.0.1";
50
+ const fragnoCoreVersion = "^0.1.2";
51
+ const fragnoDbVersion = "^0.1.2";
52
+ const unpluginFragnoVersion = "^0.0.2";
53
+ const fragnoCliVersion = "^0.1.3";
54
+ const basePkg = {
55
+ dependencies: {
56
+ "@fragno-dev/core": fragnoCoreVersion,
57
+ zod: "^4.0.5"
58
+ },
59
+ devDependencies: {
60
+ "@fragno-dev/cli": fragnoCliVersion,
61
+ "@types/node": "^22"
62
+ },
63
+ peerDependencies: {
64
+ typescript: "^5",
65
+ react: ">=18.0.0",
66
+ svelte: ">=4.0.0",
67
+ "solid-js": ">=1.0.0",
68
+ vue: ">=3.0.0"
69
+ }
70
+ };
71
+ const databasePkg = { dependencies: { "@fragno-dev/db": fragnoDbVersion } };
51
72
  const buildToolPkg = {
52
73
  none: {},
53
74
  tsdown: {
@@ -122,11 +143,13 @@ const createOptionsSchema = z.object({
122
143
  buildTool: buildToolsSchema,
123
144
  name: z.string(),
124
145
  template: templateTypesSchema,
125
- agentDocs: agentDocsSchema
146
+ agentDocs: agentDocsSchema,
147
+ withDatabase: z.boolean()
126
148
  });
127
149
  function create(options) {
128
- let pkgOverride = { name: options.name };
150
+ let pkgOverride = merge(basePkg, { name: options.name });
129
151
  pkgOverride = merge(pkgOverride, buildToolPkg[options.buildTool]);
152
+ if (options.withDatabase) pkgOverride = merge(pkgOverride, databasePkg);
130
153
  if (options.template == "fragment") writeFragmentTemplate(options.path, pkgOverride);
131
154
  else throw new Error(`Unsupported template type: ${options.template}`);
132
155
  switch (options.buildTool) {
@@ -159,6 +182,10 @@ function create(options) {
159
182
  break;
160
183
  case "none": break;
161
184
  }
185
+ if (options.withDatabase) {
186
+ writeOptionalTemplate(options.path, "database/index.ts", "src/index.ts");
187
+ writeOptionalTemplate(options.path, "database/schema.ts", "src/schema.ts");
188
+ }
162
189
  }
163
190
  function getTemplateDir() {
164
191
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["e: unknown","buildToolPkg: Record<BuildTools, Record<string, unknown>>","pkgOverride: Record<string, unknown>"],"sources":["../src/utils.ts","../src/package-json.ts","../src/index.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function mkdirp(dir: string): void {\n try {\n fs.mkdirSync(dir, { recursive: true });\n } catch (e: unknown) {\n if (e instanceof Error && \"code\" in e && e.code === \"EEXIST\") return;\n throw e;\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === \"[object Object]\"\n );\n}\n\n/**\n * Deep merge plain objects. Arrays and primitives are overwritten, not merged.\n * @param target The target object\n * @param source The source object\n * @returns The merged object\n */\nexport function merge<T extends Record<string, unknown>>(\n target: T,\n source: Record<string, unknown>,\n): T {\n const result = { ...target } as Record<string, unknown>;\n\n for (const key in source) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {\n result[key] = merge(targetValue, sourceValue);\n } else {\n result[key] = sourceValue;\n }\n }\n\n return result as T;\n}\n\nfunction identity<T>(x: T): T {\n return x;\n}\n\nexport function copy(\n from: string,\n to: string,\n rename: (basename: string) => string = identity,\n): void {\n if (!fs.existsSync(from)) return;\n\n const stats = fs.statSync(from);\n\n if (stats.isDirectory()) {\n fs.readdirSync(from).forEach((file) => {\n copy(path.join(from, file), path.join(to, rename(file)));\n });\n } else {\n mkdirp(path.dirname(to));\n fs.copyFileSync(from, to);\n }\n}\n","import type { BuildTools } from \"./index\";\n\nconst unpluginFragnoVersion = \"^0.0.1\";\n\nexport const buildToolPkg: Record<BuildTools, Record<string, unknown>> = {\n none: {},\n tsdown: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n tsdown: \"^0.11.9\",\n },\n scripts: {\n build: \"tsdown\",\n },\n },\n esbuild: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n esbuild: \"^0.25.10\",\n },\n scripts: {\n build: \"./esbuild.config.js\",\n },\n },\n vite: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n vite: \"^6.0.0\",\n },\n scripts: {\n build: \"vite build\",\n },\n },\n rollup: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rollup/plugin-node-resolve\": \"^16.0.2\",\n \"@rollup/plugin-typescript\": \"^12.1.4\",\n tslib: \"^2.8.1\",\n rollup: \"^4.52.4\",\n },\n scripts: {\n build: \"rollup -c\",\n },\n },\n webpack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n webpack: \"^5.102.0\",\n \"webpack-cli\": \"^6.0.1\",\n \"ts-loader\": \"^9.5.1\",\n },\n scripts: {\n build: \"webpack\",\n },\n },\n rspack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rspack/core\": \"^1.5.8\",\n \"@rspack/cli\": \"^1.5.8\",\n },\n scripts: {\n build: \"rspack build\",\n },\n },\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { copy, merge } from \"./utils.ts\";\nimport { buildToolPkg } from \"./package-json.ts\";\nimport { z } from \"zod\";\n\nconst templateTypesSchema = z.literal(\"fragment\");\nexport type TemplateTypes = z.infer<typeof templateTypesSchema>;\n\nconst buildToolsSchema = z.enum([\n \"esbuild\",\n \"tsdown\",\n \"vite\",\n \"rollup\",\n \"webpack\",\n \"rspack\",\n \"none\",\n]);\nexport type BuildTools = z.infer<typeof buildToolsSchema>;\n\nconst agentDocsSchema = z.enum([\"AGENTS.md\", \"CLAUDE.md\", \"none\"]);\nexport type AgentDocs = z.infer<typeof agentDocsSchema>;\n\nexport const createOptionsSchema = z.object({\n path: z.string(),\n buildTool: buildToolsSchema,\n name: z.string(),\n template: templateTypesSchema,\n agentDocs: agentDocsSchema,\n});\n\ntype CreateOptions = z.infer<typeof createOptionsSchema>;\n\nexport function create(options: CreateOptions) {\n let pkgOverride: Record<string, unknown> = { name: options.name };\n\n // Build tool pkg overrides\n pkgOverride = merge(pkgOverride, buildToolPkg[options.buildTool]);\n\n if (options.template == \"fragment\") {\n writeFragmentTemplate(options.path, pkgOverride);\n } else {\n throw new Error(`Unsupported template type: ${options.template}`);\n }\n\n switch (options.buildTool) {\n case \"esbuild\":\n writeOptionalTemplate(options.path, \"builder/esbuild.config.js\");\n break;\n case \"tsdown\":\n writeOptionalTemplate(options.path, \"builder/tsdown.config.ts\");\n break;\n case \"vite\":\n writeOptionalTemplate(options.path, \"builder/vite.config.ts\");\n break;\n case \"rollup\":\n writeOptionalTemplate(options.path, \"builder/rollup.config.js\");\n break;\n case \"webpack\":\n writeOptionalTemplate(options.path, \"builder/webpack.config.js\");\n break;\n case \"rspack\":\n writeOptionalTemplate(options.path, \"builder/rspack.config.js\");\n break;\n case \"none\":\n break;\n }\n\n switch (options.agentDocs) {\n case \"AGENTS.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\");\n break;\n case \"CLAUDE.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\", \"CLAUDE.md\");\n break;\n case \"none\":\n break;\n }\n}\n\nfunction getTemplateDir(): string {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n return path.join(__dirname, \"..\", \"templates\");\n}\n\nfunction writeOptionalTemplate(targetPath: string, template: string, rename?: string) {\n const templatePath = path.join(getTemplateDir(), \"optional\", template);\n const targetFileName = rename ? rename : path.basename(template);\n const targetFile = path.join(targetPath, targetFileName);\n\n copy(templatePath, targetFile);\n}\n\nfunction writeFragmentTemplate(targetPath: string, pkgOverrides: Record<string, unknown>) {\n const templateDir = path.join(getTemplateDir(), \"fragment\");\n\n // Copy template files\n copy(templateDir, targetPath, (basename) => {\n if (basename === \"package.template.json\") {\n return \"package.json\";\n }\n return basename;\n });\n\n // Update package.json based on chosen options\n const packageJsonPath = path.join(targetPath, \"package.json\");\n const basePkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const newPkg = merge(basePkg, pkgOverrides);\n\n // Write to disk\n fs.writeFileSync(packageJsonPath, JSON.stringify(newPkg, null, 2) + \"\\n\");\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["e: unknown","basePkg: Record<string, unknown>","databasePkg: Record<string, unknown>","buildToolPkg: Record<BuildTools, Record<string, unknown>>","pkgOverride: Record<string, unknown>"],"sources":["../src/utils.ts","../src/package-json.ts","../src/index.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function mkdirp(dir: string): void {\n try {\n fs.mkdirSync(dir, { recursive: true });\n } catch (e: unknown) {\n if (e instanceof Error && \"code\" in e && e.code === \"EEXIST\") {\n return;\n }\n throw e;\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === \"[object Object]\"\n );\n}\n\n/**\n * Deep merge plain objects. Arrays and primitives are overwritten, not merged.\n * @param target The target object\n * @param source The source object\n * @returns The merged object\n */\nexport function merge<T extends Record<string, unknown>>(\n target: T,\n source: Record<string, unknown>,\n): T {\n const result = { ...target } as Record<string, unknown>;\n\n for (const key in source) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {\n result[key] = merge(targetValue, sourceValue);\n } else {\n result[key] = sourceValue;\n }\n }\n\n return result as T;\n}\n\nfunction identity<T>(x: T): T {\n return x;\n}\n\nexport function copy(\n from: string,\n to: string,\n rename: (basename: string) => string = identity,\n): void {\n if (!fs.existsSync(from)) {\n return;\n }\n\n const stats = fs.statSync(from);\n\n if (stats.isDirectory()) {\n fs.readdirSync(from).forEach((file) => {\n copy(path.join(from, file), path.join(to, rename(file)));\n });\n } else {\n mkdirp(path.dirname(to));\n fs.copyFileSync(from, to);\n }\n}\n","import type { BuildTools } from \"./index\";\n\nconst fragnoCoreVersion = \"^0.1.2\";\nconst fragnoDbVersion = \"^0.1.2\";\nconst unpluginFragnoVersion = \"^0.0.2\";\nconst fragnoCliVersion = \"^0.1.3\";\n\nexport const basePkg: Record<string, unknown> = {\n dependencies: {\n \"@fragno-dev/core\": fragnoCoreVersion,\n zod: \"^4.0.5\",\n },\n devDependencies: {\n \"@fragno-dev/cli\": fragnoCliVersion,\n \"@types/node\": \"^22\",\n },\n peerDependencies: {\n typescript: \"^5\",\n react: \">=18.0.0\",\n svelte: \">=4.0.0\",\n \"solid-js\": \">=1.0.0\",\n vue: \">=3.0.0\",\n },\n};\n\nexport const databasePkg: Record<string, unknown> = {\n dependencies: {\n \"@fragno-dev/db\": fragnoDbVersion,\n },\n};\n\nexport const buildToolPkg: Record<BuildTools, Record<string, unknown>> = {\n none: {},\n tsdown: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n tsdown: \"^0.11.9\",\n },\n scripts: {\n build: \"tsdown\",\n },\n },\n esbuild: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n esbuild: \"^0.25.10\",\n },\n scripts: {\n build: \"./esbuild.config.js\",\n },\n },\n vite: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n vite: \"^6.0.0\",\n },\n scripts: {\n build: \"vite build\",\n },\n },\n rollup: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rollup/plugin-node-resolve\": \"^16.0.2\",\n \"@rollup/plugin-typescript\": \"^12.1.4\",\n tslib: \"^2.8.1\",\n rollup: \"^4.52.4\",\n },\n scripts: {\n build: \"rollup -c\",\n },\n },\n webpack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n webpack: \"^5.102.0\",\n \"webpack-cli\": \"^6.0.1\",\n \"ts-loader\": \"^9.5.1\",\n },\n scripts: {\n build: \"webpack\",\n },\n },\n rspack: {\n devDependencies: {\n \"@fragno-dev/unplugin-fragno\": unpluginFragnoVersion,\n \"@rspack/core\": \"^1.5.8\",\n \"@rspack/cli\": \"^1.5.8\",\n },\n scripts: {\n build: \"rspack build\",\n },\n },\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { copy, merge } from \"./utils.ts\";\nimport { basePkg, buildToolPkg, databasePkg } from \"./package-json.ts\";\nimport { z } from \"zod\";\n\nconst templateTypesSchema = z.literal(\"fragment\");\nexport type TemplateTypes = z.infer<typeof templateTypesSchema>;\n\nconst buildToolsSchema = z.enum([\n \"esbuild\",\n \"tsdown\",\n \"vite\",\n \"rollup\",\n \"webpack\",\n \"rspack\",\n \"none\",\n]);\nexport type BuildTools = z.infer<typeof buildToolsSchema>;\n\nconst agentDocsSchema = z.enum([\"AGENTS.md\", \"CLAUDE.md\", \"none\"]);\nexport type AgentDocs = z.infer<typeof agentDocsSchema>;\n\nexport const createOptionsSchema = z.object({\n path: z.string(),\n buildTool: buildToolsSchema,\n name: z.string(),\n template: templateTypesSchema,\n agentDocs: agentDocsSchema,\n withDatabase: z.boolean(),\n});\n\ntype CreateOptions = z.infer<typeof createOptionsSchema>;\n\nexport function create(options: CreateOptions) {\n let pkgOverride: Record<string, unknown> = merge(basePkg, { name: options.name });\n\n // Build tool pkg overrides\n pkgOverride = merge(pkgOverride, buildToolPkg[options.buildTool]);\n\n // Database pkg overrides\n if (options.withDatabase) {\n pkgOverride = merge(pkgOverride, databasePkg);\n }\n\n if (options.template == \"fragment\") {\n writeFragmentTemplate(options.path, pkgOverride);\n } else {\n throw new Error(`Unsupported template type: ${options.template}`);\n }\n\n switch (options.buildTool) {\n case \"esbuild\":\n writeOptionalTemplate(options.path, \"builder/esbuild.config.js\");\n break;\n case \"tsdown\":\n writeOptionalTemplate(options.path, \"builder/tsdown.config.ts\");\n break;\n case \"vite\":\n writeOptionalTemplate(options.path, \"builder/vite.config.ts\");\n break;\n case \"rollup\":\n writeOptionalTemplate(options.path, \"builder/rollup.config.js\");\n break;\n case \"webpack\":\n writeOptionalTemplate(options.path, \"builder/webpack.config.js\");\n break;\n case \"rspack\":\n writeOptionalTemplate(options.path, \"builder/rspack.config.js\");\n break;\n case \"none\":\n break;\n }\n\n switch (options.agentDocs) {\n case \"AGENTS.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\");\n break;\n case \"CLAUDE.md\":\n writeOptionalTemplate(options.path, \"agent/AGENTS.md\", \"CLAUDE.md\");\n break;\n case \"none\":\n break;\n }\n\n if (options.withDatabase) {\n writeOptionalTemplate(options.path, \"database/index.ts\", \"src/index.ts\");\n writeOptionalTemplate(options.path, \"database/schema.ts\", \"src/schema.ts\");\n }\n}\n\nfunction getTemplateDir(): string {\n const __dirname = path.dirname(fileURLToPath(import.meta.url));\n return path.join(__dirname, \"..\", \"templates\");\n}\n\nfunction writeOptionalTemplate(targetPath: string, template: string, rename?: string) {\n const templatePath = path.join(getTemplateDir(), \"optional\", template);\n const targetFileName = rename ? rename : path.basename(template);\n const targetFile = path.join(targetPath, targetFileName);\n\n copy(templatePath, targetFile);\n}\n\nfunction writeFragmentTemplate(targetPath: string, pkgOverrides: Record<string, unknown>) {\n const templateDir = path.join(getTemplateDir(), \"fragment\");\n\n // Copy template files\n copy(templateDir, targetPath, (basename) => {\n if (basename === \"package.template.json\") {\n return \"package.json\";\n }\n return basename;\n });\n\n // Update package.json based on chosen options\n const packageJsonPath = path.join(targetPath, \"package.json\");\n const basePkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const newPkg = merge(basePkg, pkgOverrides);\n\n // Write to disk\n fs.writeFileSync(packageJsonPath, JSON.stringify(newPkg, null, 2) + \"\\n\");\n}\n"],"mappings":"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"}