@imjp/writenex-astro 1.4.0 → 1.6.0

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.
@@ -39,8 +39,29 @@ const FIELD_KIND_TO_TYPE: Record<string, string> = {
39
39
  ignored: "ignored",
40
40
  };
41
41
 
42
+ function resolveObjectFields(
43
+ fields: Record<string, FieldDefinition>
44
+ ): Record<string, SchemaField> {
45
+ const result: Record<string, SchemaField> = {};
46
+ for (const [key, value] of Object.entries(fields)) {
47
+ result[key] = resolveFieldDefinition(value);
48
+ }
49
+ return result;
50
+ }
51
+
52
+ function resolveBlockTypes(
53
+ blockTypes: Record<string, FieldDefinition>
54
+ ): Record<string, SchemaField> {
55
+ const result: Record<string, SchemaField> = {};
56
+ for (const [key, value] of Object.entries(blockTypes)) {
57
+ result[key] = resolveFieldDefinition(value);
58
+ }
59
+ return result;
60
+ }
61
+
42
62
  export function resolveFieldDefinition(field: FieldDefinition): SchemaField {
43
63
  const type = FIELD_KIND_TO_TYPE[field.fieldKind] ?? "string";
64
+
44
65
  const base: SchemaField = {
45
66
  type: type as SchemaField["type"],
46
67
  required: field.validation?.isRequired ?? false,
@@ -50,16 +71,62 @@ export function resolveFieldDefinition(field: FieldDefinition): SchemaField {
50
71
  };
51
72
 
52
73
  switch (field.fieldKind) {
74
+ case "text":
75
+ return {
76
+ ...base,
77
+ multiline: field.multiline,
78
+ };
79
+
80
+ case "slug":
81
+ case "url":
82
+ return base;
83
+
84
+ case "number":
85
+ return {
86
+ ...base,
87
+ default:
88
+ field.defaultValue ?? (field as { placeholder?: number }).placeholder,
89
+ };
90
+
91
+ case "integer":
92
+ return {
93
+ ...base,
94
+ default:
95
+ field.defaultValue ?? (field as { placeholder?: number }).placeholder,
96
+ };
97
+
53
98
  case "select":
54
99
  return {
55
100
  ...base,
56
101
  options: field.options,
102
+ default: field.defaultValue,
57
103
  };
58
104
 
59
105
  case "multiselect":
60
106
  return {
61
107
  ...base,
62
108
  items: "string",
109
+ default: field.defaultValue,
110
+ };
111
+
112
+ case "checkbox":
113
+ return {
114
+ ...base,
115
+ default: field.defaultValue,
116
+ };
117
+
118
+ case "date":
119
+ return {
120
+ ...base,
121
+ format: "date",
122
+ default: field.defaultValue,
123
+ };
124
+
125
+ case "datetime":
126
+ return {
127
+ ...base,
128
+ format: "datetime-local",
129
+ default: field.defaultValue,
63
130
  };
64
131
 
65
132
  case "image":
@@ -102,48 +169,35 @@ export function resolveFieldDefinition(field: FieldDefinition): SchemaField {
102
169
  collection: field.collection,
103
170
  };
104
171
 
105
- case "conditional":
172
+ case "path-reference":
106
173
  return {
107
174
  ...base,
108
- matchField: field.matchField,
109
- matchValue: field.matchValue,
110
- showField: resolveFieldDefinition(field.showField),
175
+ allowExternal: (
176
+ field as { contentTypes?: string[] }
177
+ ).contentTypes?.includes("url"),
111
178
  };
112
179
 
113
- case "text":
114
- return {
115
- ...base,
116
- multiline: field.multiline,
117
- };
180
+ case "markdoc":
181
+ case "mdx":
182
+ return base;
118
183
 
119
- case "date":
120
- case "datetime":
184
+ case "conditional":
121
185
  return {
122
186
  ...base,
123
- format: field.fieldKind === "datetime" ? "datetime-local" : "date",
187
+ matchField: field.matchField,
188
+ matchValue: field.matchValue,
189
+ showField: resolveFieldDefinition(field.showField),
124
190
  };
125
191
 
126
- default:
192
+ case "child":
193
+ case "cloud-image":
127
194
  return base;
128
- }
129
- }
130
-
131
- function resolveObjectFields(
132
- fields: Record<string, FieldDefinition>
133
- ): Record<string, SchemaField> {
134
- const result: Record<string, SchemaField> = {};
135
- for (const [key, value] of Object.entries(fields)) {
136
- result[key] = resolveFieldDefinition(value);
137
- }
138
- return result;
139
- }
140
195
 
141
- function resolveBlockTypes(
142
- blockTypes: Record<string, FieldDefinition>
143
- ): Record<string, SchemaField> {
144
- const result: Record<string, SchemaField> = {};
145
- for (const [key, value] of Object.entries(blockTypes)) {
146
- result[key] = resolveFieldDefinition(value);
196
+ case "empty":
197
+ case "empty-content":
198
+ case "empty-document":
199
+ case "ignored":
200
+ default:
201
+ return base;
147
202
  }
148
- return result;
149
203
  }
@@ -154,4 +154,5 @@ export interface WritenexOptions {
154
154
 
155
155
  export interface ResolvedConfig extends Required<WritenexConfig> {
156
156
  collections: Required<CollectionConfig>[];
157
+ singletons: Required<SingletonConfig>[];
157
158
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/fields/resolve.ts","../src/fields/collection.ts","../src/fields/fields.ts"],"sourcesContent":["/**\n * @fileoverview FieldDefinition to SchemaField conversion\n *\n * This module converts FieldDefinition objects (from the builder API)\n * to the internal SchemaField format used by the form system.\n *\n * @module @writenex/astro/fields/resolve\n */\n\nimport type { SchemaField } from \"@/types\";\nimport type { FieldDefinition } from \"./types\";\n\nconst FIELD_KIND_TO_TYPE: Record<string, string> = {\n text: \"string\",\n slug: \"string\",\n url: \"string\",\n number: \"number\",\n integer: \"number\",\n select: \"string\",\n multiselect: \"array\",\n checkbox: \"boolean\",\n date: \"date\",\n datetime: \"date\",\n image: \"image\",\n file: \"file\",\n object: \"object\",\n array: \"array\",\n blocks: \"blocks\",\n relationship: \"relationship\",\n \"path-reference\": \"string\",\n markdoc: \"markdoc\",\n mdx: \"mdx\",\n conditional: \"object\",\n child: \"child\",\n \"cloud-image\": \"image\",\n empty: \"empty\",\n \"empty-content\": \"empty-content\",\n \"empty-document\": \"empty-document\",\n ignored: \"ignored\",\n};\n\nexport function resolveFieldDefinition(field: FieldDefinition): SchemaField {\n const type = FIELD_KIND_TO_TYPE[field.fieldKind] ?? \"string\";\n const base: SchemaField = {\n type: type as SchemaField[\"type\"],\n required: field.validation?.isRequired ?? false,\n label: field.label,\n description: field.description,\n default: field.defaultValue,\n };\n\n switch (field.fieldKind) {\n case \"select\":\n return {\n ...base,\n options: field.options,\n };\n\n case \"multiselect\":\n return {\n ...base,\n items: \"string\",\n };\n\n case \"image\":\n return {\n ...base,\n directory: field.directory,\n publicPath: field.publicPath,\n };\n\n case \"file\":\n return {\n ...base,\n directory: field.directory,\n publicPath: field.publicPath,\n };\n\n case \"object\":\n return {\n ...base,\n fields: resolveObjectFields(field.fields),\n };\n\n case \"array\":\n return {\n ...base,\n itemField: resolveFieldDefinition(field.itemField),\n itemLabel: field.itemLabel,\n };\n\n case \"blocks\":\n return {\n ...base,\n blockTypes: resolveBlockTypes(field.blockTypes),\n itemLabel: field.itemLabel,\n };\n\n case \"relationship\":\n return {\n ...base,\n collection: field.collection,\n };\n\n case \"conditional\":\n return {\n ...base,\n matchField: field.matchField,\n matchValue: field.matchValue,\n showField: resolveFieldDefinition(field.showField),\n };\n\n case \"text\":\n return {\n ...base,\n multiline: field.multiline,\n };\n\n case \"date\":\n case \"datetime\":\n return {\n ...base,\n format: field.fieldKind === \"datetime\" ? \"datetime-local\" : \"date\",\n };\n\n default:\n return base;\n }\n}\n\nfunction resolveObjectFields(\n fields: Record<string, FieldDefinition>\n): Record<string, SchemaField> {\n const result: Record<string, SchemaField> = {};\n for (const [key, value] of Object.entries(fields)) {\n result[key] = resolveFieldDefinition(value);\n }\n return result;\n}\n\nfunction resolveBlockTypes(\n blockTypes: Record<string, FieldDefinition>\n): Record<string, SchemaField> {\n const result: Record<string, SchemaField> = {};\n for (const [key, value] of Object.entries(blockTypes)) {\n result[key] = resolveFieldDefinition(value);\n }\n return result;\n}\n","/**\n * @fileoverview Collection and Singleton schema helpers\n *\n * These helpers provide a typed way to define collection and singleton\n * schemas using the fields builder API. They convert FieldDefinition\n * objects to internal SchemaField format.\n *\n * @module @writenex/astro/fields/collection\n */\n\nimport type { CollectionConfig, ImageConfig } from \"@/types\";\nimport { resolveFieldDefinition } from \"./resolve\";\nimport type { FieldDefinition } from \"./types\";\n\nexport interface CollectionSchemaConfig {\n name: string;\n path: string;\n filePattern?: string;\n previewUrl?: string;\n schema: Record<string, FieldDefinition>;\n images?: ImageConfig;\n}\n\nexport interface SingletonSchemaConfig {\n name: string;\n path: string;\n previewUrl?: string;\n schema: Record<string, FieldDefinition>;\n images?: ImageConfig;\n}\n\nexport function collection(config: CollectionSchemaConfig): CollectionConfig {\n const schema: Record<string, import(\"@/types\").SchemaField> = {};\n for (const [key, fieldDef] of Object.entries(config.schema)) {\n schema[key] = resolveFieldDefinition(fieldDef);\n }\n\n return {\n name: config.name,\n path: config.path,\n filePattern: config.filePattern,\n previewUrl: config.previewUrl,\n schema,\n images: config.images,\n };\n}\n\nexport function singleton(config: SingletonSchemaConfig): {\n name: string;\n path: string;\n previewUrl?: string;\n schema: Record<string, import(\"@/types\").SchemaField>;\n images?: ImageConfig;\n} {\n const schema: Record<string, import(\"@/types\").SchemaField> = {};\n for (const [key, fieldDef] of Object.entries(config.schema)) {\n schema[key] = resolveFieldDefinition(fieldDef);\n }\n\n return {\n name: config.name,\n path: config.path,\n previewUrl: config.previewUrl,\n schema,\n images: config.images,\n };\n}\n","/**\n * @fileoverview Fields builder API for @writenex/astro\n *\n * This module provides a TypeScript-first builder pattern for defining\n * content schema fields. Each field type is a method on the `fields` object.\n *\n * @module @writenex/astro/fields/fields\n */\n\nimport type {\n ArrayFieldConfig,\n BaseFieldConfig,\n BlocksFieldConfig,\n CheckboxFieldConfig,\n ChildFieldConfig,\n CloudImageFieldConfig,\n ConditionalFieldConfig,\n DateFieldConfig,\n DatetimeFieldConfig,\n FieldDefinition,\n FileFieldConfig,\n ImageFieldConfig,\n IntegerFieldConfig,\n MarkdocFieldConfig,\n MdxFieldConfig,\n MultiselectFieldConfig,\n NumberFieldConfig,\n ObjectFieldConfig,\n PathReferenceFieldConfig,\n RelationshipFieldConfig,\n SelectFieldConfig,\n SlugFieldConfig,\n TextFieldConfig,\n UrlFieldConfig,\n} from \"./types\";\n\nfunction createField<K extends FieldDefinition[\"fieldKind\"]>(\n fieldKind: K,\n config: Omit<Extract<FieldDefinition, { fieldKind: K }>, \"fieldKind\">\n): Extract<FieldDefinition, { fieldKind: K }> {\n return { fieldKind, ...config } as Extract<FieldDefinition, { fieldKind: K }>;\n}\n\nexport const fields = {\n text(config: TextFieldConfig = {}): FieldDefinition {\n return createField(\"text\", config);\n },\n\n slug(config: SlugFieldConfig = {}): FieldDefinition {\n return createField(\"slug\", config);\n },\n\n url(config: UrlFieldConfig = {}): FieldDefinition {\n return createField(\"url\", config);\n },\n\n number(config: NumberFieldConfig = {}): FieldDefinition {\n return createField(\"number\", config);\n },\n\n integer(config: IntegerFieldConfig = {}): FieldDefinition {\n return createField(\"integer\", config);\n },\n\n select(config: SelectFieldConfig): FieldDefinition {\n return createField(\"select\", config);\n },\n\n multiselect(config: MultiselectFieldConfig): FieldDefinition {\n return createField(\"multiselect\", config);\n },\n\n checkbox(config: CheckboxFieldConfig = {}): FieldDefinition {\n return createField(\"checkbox\", config);\n },\n\n date(config: DateFieldConfig = {}): FieldDefinition {\n return createField(\"date\", config);\n },\n\n datetime(config: DatetimeFieldConfig = {}): FieldDefinition {\n return createField(\"datetime\", config);\n },\n\n image(config: ImageFieldConfig = {}): FieldDefinition {\n return createField(\"image\", config);\n },\n\n file(config: FileFieldConfig = {}): FieldDefinition {\n return createField(\"file\", config);\n },\n\n object(config: ObjectFieldConfig): FieldDefinition {\n return createField(\"object\", config);\n },\n\n array(config: ArrayFieldConfig): FieldDefinition {\n return createField(\"array\", config);\n },\n\n blocks(config: BlocksFieldConfig): FieldDefinition {\n return createField(\"blocks\", config);\n },\n\n relationship(config: RelationshipFieldConfig): FieldDefinition {\n return createField(\"relationship\", config);\n },\n\n pathReference(config: PathReferenceFieldConfig = {}): FieldDefinition {\n return createField(\"path-reference\", config);\n },\n\n markdoc(config: MarkdocFieldConfig = {}): FieldDefinition {\n return createField(\"markdoc\", config);\n },\n\n mdx(config: MdxFieldConfig = {}): FieldDefinition {\n return createField(\"mdx\", config);\n },\n\n conditional(config: ConditionalFieldConfig): FieldDefinition {\n return createField(\"conditional\", config);\n },\n\n child(config: ChildFieldConfig = {}): FieldDefinition {\n return createField(\"child\", config);\n },\n\n cloudImage(config: CloudImageFieldConfig = {}): FieldDefinition {\n return createField(\"cloud-image\", config);\n },\n\n empty(config: BaseFieldConfig = {}): FieldDefinition {\n return createField(\"empty\", config);\n },\n\n emptyContent(config: BaseFieldConfig = {}): FieldDefinition {\n return createField(\"empty-content\", config);\n },\n\n emptyDocument(config: BaseFieldConfig = {}): FieldDefinition {\n return createField(\"empty-document\", config);\n },\n\n ignored(config: BaseFieldConfig = {}): FieldDefinition {\n return createField(\"ignored\", config);\n },\n};\n\nexport type Fields = typeof fields;\n"],"mappings":"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","names":["fields"]}