kintone-effect-schema
Version:
Type-safe kintone field schema definitions with Effect-TS. Normalize empty values, validate writes, and ensure runtime type safety for kintone API responses.
1,495 lines (1,490 loc) • 49.8 kB
JavaScript
import { Schema } from 'effect';
export { Schema } from 'effect';
// src/schemas/common.ts
var KintoneUserSchema = Schema.Struct({
code: Schema.String,
name: Schema.String
});
var KintoneOrganizationSchema = Schema.Struct({
code: Schema.String,
name: Schema.String
});
var KintoneGroupSchema = Schema.Struct({
code: Schema.String,
name: Schema.String
});
var KintoneFileSchema = Schema.Struct({
contentType: Schema.String,
fileKey: Schema.String,
name: Schema.String,
size: Schema.String
});
var SingleLineTextFieldSchema = Schema.Struct({
type: Schema.Literal("SINGLE_LINE_TEXT"),
value: Schema.String
});
var MultiLineTextFieldSchema = Schema.Struct({
type: Schema.Literal("MULTI_LINE_TEXT"),
value: Schema.String
});
var RichTextFieldSchema = Schema.Struct({
type: Schema.Literal("RICH_TEXT"),
value: Schema.String
});
var NumberFieldSchema = Schema.Struct({
type: Schema.Literal("NUMBER"),
value: Schema.Union(Schema.String, Schema.Null)
});
var CalcFieldSchema = Schema.Struct({
type: Schema.Literal("CALC"),
value: Schema.String
});
var RadioButtonFieldSchema = Schema.Struct({
type: Schema.Literal("RADIO_BUTTON"),
value: Schema.Union(Schema.String, Schema.Null)
});
var CheckBoxFieldSchema = Schema.Struct({
type: Schema.Literal("CHECK_BOX"),
value: Schema.Array(Schema.String)
});
var MultiSelectFieldSchema = Schema.Struct({
type: Schema.Literal("MULTI_SELECT"),
value: Schema.Array(Schema.String)
});
var DropDownFieldSchema = Schema.Struct({
type: Schema.Literal("DROP_DOWN"),
value: Schema.Union(Schema.String, Schema.Null)
});
var DateFieldSchema = Schema.Struct({
type: Schema.Literal("DATE"),
value: Schema.Union(Schema.String, Schema.Null)
});
var TimeFieldSchema = Schema.Struct({
type: Schema.Literal("TIME"),
value: Schema.Union(Schema.String, Schema.Null)
});
var DateTimeFieldSchema = Schema.Struct({
type: Schema.Literal("DATETIME"),
value: Schema.Union(Schema.String, Schema.Null)
});
var LinkFieldSchema = Schema.Struct({
type: Schema.Literal("LINK"),
value: Schema.String
});
var UserSelectFieldSchema = Schema.Struct({
type: Schema.Literal("USER_SELECT"),
value: Schema.Array(KintoneUserSchema)
});
var OrganizationSelectFieldSchema = Schema.Struct({
type: Schema.Literal("ORGANIZATION_SELECT"),
value: Schema.Array(KintoneOrganizationSchema)
});
var GroupSelectFieldSchema = Schema.Struct({
type: Schema.Literal("GROUP_SELECT"),
value: Schema.Array(KintoneGroupSchema)
});
var FileFieldSchema = Schema.Struct({
type: Schema.Literal("FILE"),
value: Schema.Array(KintoneFileSchema)
});
var RecordNumberFieldSchema = Schema.Struct({
type: Schema.Literal("RECORD_NUMBER"),
value: Schema.String
});
var CreatorFieldSchema = Schema.Struct({
type: Schema.Literal("CREATOR"),
value: KintoneUserSchema
});
var CreatedTimeFieldSchema = Schema.Struct({
type: Schema.Literal("CREATED_TIME"),
value: Schema.String
});
var ModifierFieldSchema = Schema.Struct({
type: Schema.Literal("MODIFIER"),
value: KintoneUserSchema
});
var UpdatedTimeFieldSchema = Schema.Struct({
type: Schema.Literal("UPDATED_TIME"),
value: Schema.String
});
var StatusFieldSchema = Schema.Struct({
type: Schema.Literal("STATUS"),
value: Schema.String
});
var StatusAssigneeFieldSchema = Schema.Struct({
type: Schema.Literal("STATUS_ASSIGNEE"),
value: Schema.Array(KintoneUserSchema)
});
var CategoryFieldSchema = Schema.Struct({
type: Schema.Literal("CATEGORY"),
value: Schema.Array(Schema.String)
});
var LookupFieldSchema = Schema.Struct({
type: Schema.Literal("LOOKUP"),
value: Schema.String
});
var RecordIdFieldSchema = Schema.Struct({
type: Schema.Literal("RECORD_ID"),
value: Schema.String
});
var RevisionFieldSchema = Schema.Struct({
type: Schema.Literal("REVISION"),
value: Schema.String
});
var KintoneFieldSchema = Schema.Union(
SingleLineTextFieldSchema,
MultiLineTextFieldSchema,
RichTextFieldSchema,
NumberFieldSchema,
CalcFieldSchema,
RadioButtonFieldSchema,
CheckBoxFieldSchema,
MultiSelectFieldSchema,
DropDownFieldSchema,
DateFieldSchema,
TimeFieldSchema,
DateTimeFieldSchema,
LinkFieldSchema,
UserSelectFieldSchema,
OrganizationSelectFieldSchema,
GroupSelectFieldSchema,
FileFieldSchema,
RecordNumberFieldSchema,
CreatorFieldSchema,
CreatedTimeFieldSchema,
ModifierFieldSchema,
UpdatedTimeFieldSchema,
StatusFieldSchema,
StatusAssigneeFieldSchema,
CategoryFieldSchema,
LookupFieldSchema,
RecordIdFieldSchema,
RevisionFieldSchema
);
var SubtableFieldSchema = Schema.Struct({
type: Schema.Literal("SUBTABLE"),
value: Schema.Array(
Schema.Struct({
id: Schema.String,
value: Schema.Record({
key: Schema.String,
value: KintoneFieldSchema
})
})
)
});
var KintoneRecordSchema = Schema.Record({
key: Schema.String,
value: Schema.Union(KintoneFieldSchema, SubtableFieldSchema)
});
var GetRecordResponseSchema = Schema.Struct({
record: KintoneRecordSchema
});
var GetRecordsResponseSchema = Schema.Struct({
records: Schema.Array(KintoneRecordSchema),
totalCount: Schema.Union(Schema.String, Schema.Null)
});
var KintoneRecordForWriteSchema = Schema.Record({
key: Schema.String,
value: Schema.Struct({
value: Schema.Unknown
})
});
var normalizeFieldValue = (field) => {
if (!field || typeof field !== "object") {
return field;
}
const fieldObj = field;
const type = fieldObj["type"];
const value = fieldObj["value"];
switch (type) {
// 文字列系: undefined → ""
case "SINGLE_LINE_TEXT":
case "MULTI_LINE_TEXT":
case "LINK":
case "LOOKUP":
return { ...fieldObj, value: value === void 0 ? "" : value };
// リッチテキスト: 変換不要
case "RICH_TEXT":
return fieldObj;
// 数値・日時系: undefined/"" → null
case "NUMBER":
case "DATETIME":
return {
...fieldObj,
value: value === void 0 || value === "" ? null : value
};
// 日付・時刻: undefined → null
case "DATE":
case "TIME":
return { ...fieldObj, value: value === void 0 ? null : value };
// ドロップダウン: undefined/"" → null
case "DROP_DOWN":
return {
...fieldObj,
value: value === void 0 || value === "" ? null : value
};
// ラジオボタン: undefined/"" → null
case "RADIO_BUTTON":
return {
...fieldObj,
value: value === void 0 || value === "" ? null : value
};
// 配列系: undefined/null → []
case "CHECK_BOX":
case "MULTI_SELECT":
case "USER_SELECT":
case "ORGANIZATION_SELECT":
case "GROUP_SELECT":
case "FILE":
case "CATEGORY":
case "STATUS_ASSIGNEE":
return {
...fieldObj,
value: value === void 0 || value === null ? [] : value
};
// その他のフィールド(CALC, STATUS, CREATOR等): 変換不要
default:
return fieldObj;
}
};
var decodeKintoneField = (data) => {
const normalized = normalizeFieldValue(data);
return Schema.decodeUnknownSync(KintoneFieldSchema)(normalized);
};
var decodeKintoneRecord = (record) => {
const normalizedRecord = {};
for (const [fieldCode, field] of Object.entries(record)) {
normalizedRecord[fieldCode] = normalizeFieldValue(field);
}
return normalizedRecord;
};
// src/validators.ts
var KintoneValidationError = class extends Error {
constructor(fieldType, message) {
super(message);
this.fieldType = fieldType;
this.name = "KintoneValidationError";
}
};
var validateFieldForWrite = (field) => {
const { type, value } = field;
const nonEmptyFields = ["RADIO_BUTTON", "CATEGORY", "STATUS_ASSIGNEE"];
if (nonEmptyFields.includes(type)) {
let isEmpty = false;
switch (type) {
case "RADIO_BUTTON":
isEmpty = value === null || value === "";
break;
case "CATEGORY":
case "STATUS_ASSIGNEE":
isEmpty = Array.isArray(value) && value.length === 0;
break;
}
if (isEmpty) {
throw new KintoneValidationError(
type,
`${type}\u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u306F\u7A7A\u306E\u5024\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093`
);
}
}
};
var validateRecordForWrite = (record) => {
for (const [fieldCode, field] of Object.entries(record)) {
try {
validateFieldForWrite(field);
} catch (error) {
if (error instanceof KintoneValidationError) {
throw new KintoneValidationError(
error.fieldType,
`\u30D5\u30A3\u30FC\u30EB\u30C9 "${fieldCode}": ${error.message}`
);
}
throw error;
}
}
};
var isNonEmptyField = (type) => {
return ["RADIO_BUTTON", "CATEGORY", "STATUS_ASSIGNEE"].includes(type);
};
var getEmptyValueForWrite = (type) => {
switch (type) {
// 文字列系
case "SINGLE_LINE_TEXT":
case "MULTI_LINE_TEXT":
case "RICH_TEXT":
case "LINK":
case "LOOKUP":
return "";
// null を使用する系
case "NUMBER":
case "DATE":
case "TIME":
case "DATETIME":
case "DROP_DOWN":
return null;
// 配列系
case "CHECK_BOX":
case "MULTI_SELECT":
case "USER_SELECT":
case "ORGANIZATION_SELECT":
case "GROUP_SELECT":
case "FILE":
return [];
// 空値を設定できない
case "RADIO_BUTTON":
case "CATEGORY":
case "STATUS_ASSIGNEE":
throw new KintoneValidationError(
type,
`${type}\u30D5\u30A3\u30FC\u30EB\u30C9\u306B\u306F\u7A7A\u306E\u5024\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093`
);
// その他(通常は読み取り専用)
default:
return "";
}
};
var NumericStringSchema = Schema.String;
var RESERVED_FIELD_CODES = /* @__PURE__ */ new Set([
"\u30B9\u30C6\u30FC\u30BF\u30B9",
"\u4F5C\u696D\u8005",
"\u30AB\u30C6\u30B4\u30EA\u30FC",
"__ROOT__",
"not",
"\u30EC\u30B3\u30FC\u30C9\u756A\u53F7",
"\u4F5C\u6210\u8005",
"\u4F5C\u6210\u65E5\u6642",
"\u66F4\u65B0\u8005",
"\u66F4\u65B0\u65E5\u6642"
]);
var SystemFieldCodeSchema = Schema.String.pipe(
Schema.pattern(
/^[$ぁ-ん\u30A0-\u30FF\u3040-\u309F\u4E00-\u9FAF\uFF66-\uFF9FA-Za-z0-9A-Za-z0-9__・・$¥€£₩¥]+$/
),
Schema.minLength(1),
Schema.filter((value) => !/^[0-9]/.test(value))
);
var UserFieldCodeSchema = SystemFieldCodeSchema.pipe(
Schema.filter((value) => !RESERVED_FIELD_CODES.has(value))
);
var BaseFieldPropertiesSchema = Schema.Struct({
type: Schema.String,
code: UserFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean),
required: Schema.optional(Schema.Boolean)
});
var OptionSchema = Schema.Struct({
label: Schema.String,
index: NumericStringSchema
});
var EntitySchema = Schema.Struct({
type: Schema.Literal("USER", "ORGANIZATION", "GROUP"),
code: UserFieldCodeSchema
});
var LookupSettingSchema = Schema.Struct({
relatedApp: Schema.Struct({
app: Schema.String,
code: Schema.optional(Schema.String)
}),
relatedKeyField: Schema.String,
fieldMappings: Schema.optional(
Schema.Union(
Schema.Array(
Schema.Struct({
field: Schema.String,
relatedField: Schema.String
})
),
Schema.Literal("")
)
),
lookupPickerFields: Schema.optional(
Schema.Union(Schema.Array(Schema.String), Schema.Literal(""))
),
filterCond: Schema.optional(Schema.String),
sort: Schema.optional(Schema.String)
});
var ReferenceTableSettingSchema = Schema.Struct({
relatedApp: Schema.Struct({
app: Schema.String,
code: Schema.optional(Schema.String)
}),
condition: Schema.Struct({
field: Schema.String,
relatedField: Schema.String
}),
filterCond: Schema.optional(Schema.String),
displayFields: Schema.Array(Schema.String),
sort: Schema.optional(Schema.String),
size: NumericStringSchema
// kintone APIで空文字列として返される(必須)
});
var SingleLineTextFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("SINGLE_LINE_TEXT"),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
unique: Schema.optional(Schema.Boolean),
minLength: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
maxLength: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
expression: Schema.optional(Schema.String),
hideExpression: Schema.optional(Schema.Boolean),
lookup: Schema.optional(LookupSettingSchema)
})
);
var MultiLineTextFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("MULTI_LINE_TEXT"),
defaultValue: Schema.String
// kintone APIで空文字列として返される(必須)
})
);
var RichTextFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("RICH_TEXT"),
defaultValue: Schema.String
// kintone APIで空文字列として返される(必須)
})
);
var NumberFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("NUMBER"),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
unique: Schema.optional(Schema.Boolean),
minValue: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
maxValue: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
digit: Schema.optional(Schema.Boolean),
displayScale: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
unit: Schema.String,
// kintone APIで空文字列として返される(必須)
unitPosition: Schema.optional(Schema.Union(Schema.Literal("BEFORE"), Schema.Literal("AFTER"))),
lookup: Schema.optional(LookupSettingSchema)
})
);
var CalcFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("CALC"),
expression: Schema.optional(Schema.String),
format: Schema.optional(
Schema.Union(
Schema.Literal("NUMBER"),
Schema.Literal("NUMBER_DIGIT"),
Schema.Literal("DATETIME"),
Schema.Literal("DATE"),
Schema.Literal("TIME"),
Schema.Literal("HOUR_MINUTE"),
Schema.Literal("DAY_HOUR_MINUTE")
)
),
displayScale: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
hideExpression: Schema.optional(Schema.Boolean),
unit: Schema.String,
// kintone APIで空文字列として返される(必須)
unitPosition: Schema.optional(Schema.Union(Schema.Literal("BEFORE"), Schema.Literal("AFTER")))
})
);
var RadioButtonFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("RADIO_BUTTON"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
align: Schema.optional(Schema.Union(Schema.Literal("HORIZONTAL"), Schema.Literal("VERTICAL")))
})
);
var CheckBoxFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("CHECK_BOX"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.Array(Schema.String),
// kintone APIで空配列として返される(必須)
align: Schema.optional(Schema.Union(Schema.Literal("HORIZONTAL"), Schema.Literal("VERTICAL")))
})
);
var MultiSelectFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("MULTI_SELECT"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.Array(Schema.String)
// kintone APIで空配列として返される(必須)
})
);
var DropDownFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("DROP_DOWN"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.String
// kintone APIで空文字列として返される(必須)
})
);
var DateFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("DATE"),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
unique: Schema.optional(Schema.Boolean),
defaultNowValue: Schema.optional(Schema.Boolean),
lookup: Schema.optional(LookupSettingSchema)
})
);
var TimeFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("TIME"),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
defaultNowValue: Schema.optional(Schema.Boolean)
})
);
var DateTimeFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("DATETIME"),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
unique: Schema.optional(Schema.Boolean),
defaultNowValue: Schema.optional(Schema.Boolean),
lookup: Schema.optional(LookupSettingSchema)
})
);
var LinkFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("LINK"),
protocol: Schema.Union(Schema.Literal("WEB"), Schema.Literal("CALL"), Schema.Literal("MAIL")),
defaultValue: Schema.String,
// kintone APIで空文字列として返される(必須)
unique: Schema.optional(Schema.Boolean),
minLength: NumericStringSchema,
// kintone APIで空文字列として返される(必須)
maxLength: NumericStringSchema
// kintone APIで空文字列として返される(必須)
})
);
var UserSelectFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("USER_SELECT"),
entities: Schema.optional(Schema.Array(EntitySchema)),
defaultValue: Schema.optional(
Schema.Array(
Schema.Struct({
type: Schema.Union(
Schema.Literal("USER"),
Schema.Literal("ORGANIZATION"),
Schema.Literal("GROUP")
),
code: UserFieldCodeSchema
})
)
)
})
);
var OrganizationSelectFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("ORGANIZATION_SELECT"),
entities: Schema.optional(Schema.Array(EntitySchema)),
defaultValue: Schema.optional(
Schema.Array(
Schema.Struct({
type: Schema.Literal("ORGANIZATION"),
code: UserFieldCodeSchema
})
)
)
})
);
var GroupSelectFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("GROUP_SELECT"),
entities: Schema.optional(Schema.Array(EntitySchema)),
defaultValue: Schema.optional(
Schema.Array(
Schema.Struct({
type: Schema.Literal("GROUP"),
code: UserFieldCodeSchema
})
)
)
})
);
var FileFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("FILE"),
thumbnailSize: NumericStringSchema
// kintone APIで空文字列として返される(必須)
})
);
var ReferenceTableFieldPropertiesSchema = Schema.extend(
BaseFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("REFERENCE_TABLE"),
referenceTable: Schema.optional(ReferenceTableSettingSchema)
})
);
var RecordNumberFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("RECORD_NUMBER"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean)
});
var CreatorFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("CREATOR"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean)
});
var CreatedTimeFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("CREATED_TIME"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean)
});
var ModifierFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("MODIFIER"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean)
});
var UpdatedTimeFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("UPDATED_TIME"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean)
});
var StatusFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("STATUS"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean),
enabled: Schema.optional(Schema.Boolean)
});
var StatusAssigneeFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("STATUS_ASSIGNEE"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean),
enabled: Schema.optional(Schema.Boolean)
});
var CategoryFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("CATEGORY"),
code: SystemFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean),
enabled: Schema.optional(Schema.Boolean)
});
var BaseSubtableFieldPropertiesSchema = Schema.Struct({
type: Schema.String,
code: UserFieldCodeSchema,
label: Schema.String,
noLabel: Schema.Boolean,
// 必ず存在
required: Schema.Boolean
// 必ず存在
});
var SubtableSingleLineTextFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("SINGLE_LINE_TEXT"),
defaultValue: Schema.String,
// 空文字列または値(必ず存在)
unique: Schema.Boolean,
// 必ず存在
minLength: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
maxLength: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
expression: Schema.String,
// 空文字列または式(必ず存在)
hideExpression: Schema.Boolean
// 必ず存在
})
);
var SubtableMultiLineTextFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("MULTI_LINE_TEXT"),
defaultValue: Schema.String
// 空文字列または値(必ず存在)
})
);
var SubtableRichTextFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("RICH_TEXT"),
defaultValue: Schema.String
// 空文字列または値(必ず存在)
})
);
var SubtableNumberFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("NUMBER"),
defaultValue: Schema.String,
// 空文字列または値(必ず存在)
unique: Schema.Boolean,
// 必ず存在
minValue: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
maxValue: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
digit: Schema.Boolean,
// 必ず存在
displayScale: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
unit: Schema.String,
// 空文字列または値(必ず存在)
unitPosition: Schema.Union(
Schema.Literal("BEFORE"),
Schema.Literal("AFTER"),
Schema.Literal("")
)
// 必ず存在
})
);
var SubtableCalcFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("CALC"),
expression: Schema.String,
// 空文字列または式(必ず存在)
format: Schema.Union(
Schema.Literal("NUMBER"),
Schema.Literal("NUMBER_DIGIT"),
Schema.Literal("DATETIME"),
Schema.Literal("DATE"),
Schema.Literal("TIME"),
Schema.Literal("HOUR_MINUTE"),
Schema.Literal("DAY_HOUR_MINUTE"),
Schema.Literal("")
),
// 必ず存在
displayScale: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
hideExpression: Schema.Boolean,
// 必ず存在
unit: Schema.String,
// 空文字列または値(必ず存在)
unitPosition: Schema.Union(
Schema.Literal("BEFORE"),
Schema.Literal("AFTER"),
Schema.Literal("")
)
// 必ず存在
})
);
var SubtableRadioButtonFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("RADIO_BUTTON"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.String,
// 空文字列または値(必ず存在)
align: Schema.Union(
Schema.Literal("HORIZONTAL"),
Schema.Literal("VERTICAL"),
Schema.Literal("")
)
// 必ず存在
})
);
var SubtableCheckBoxFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("CHECK_BOX"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.Array(Schema.String),
// 配列(必ず存在、空配列の場合もある)
align: Schema.Union(
Schema.Literal("HORIZONTAL"),
Schema.Literal("VERTICAL"),
Schema.Literal("")
)
// 必ず存在
})
);
var SubtableMultiSelectFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("MULTI_SELECT"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.Array(Schema.String)
// 配列(必ず存在、空配列の場合もある)
})
);
var SubtableDropDownFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("DROP_DOWN"),
options: Schema.Record({ key: Schema.String, value: OptionSchema }),
defaultValue: Schema.String
// 空文字列または値(必ず存在)
})
);
var SubtableDateFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("DATE"),
defaultValue: Schema.String,
// 空文字列または値(必ず存在)
unique: Schema.Boolean,
// 必ず存在
defaultNowValue: Schema.Boolean
// 必ず存在
})
);
var SubtableTimeFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("TIME"),
defaultValue: Schema.String,
// 空文字列または値(必ず存在)
defaultNowValue: Schema.Boolean
// 必ず存在
})
);
var SubtableDateTimeFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("DATETIME"),
defaultValue: Schema.String,
// 空文字列または値(必ず存在)
unique: Schema.Boolean,
// 必ず存在
defaultNowValue: Schema.Boolean
// 必ず存在
})
);
var SubtableLinkFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("LINK"),
protocol: Schema.Union(Schema.Literal("WEB"), Schema.Literal("CALL"), Schema.Literal("MAIL")),
defaultValue: Schema.String,
// 空文字列または値
unique: Schema.Boolean,
// 必ず存在
minLength: NumericStringSchema,
// 空文字列または数値文字列(必ず存在)
maxLength: NumericStringSchema
// 空文字列または数値文字列(必ず存在)
})
);
var SubtableUserSelectFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("USER_SELECT"),
entities: Schema.Array(EntitySchema),
// サブテーブルでは必ず存在(空配列の場合もある)
defaultValue: Schema.Array(
Schema.Struct({
type: Schema.Union(
Schema.Literal("USER"),
Schema.Literal("ORGANIZATION"),
Schema.Literal("GROUP")
),
code: UserFieldCodeSchema
})
)
// サブテーブルでは必ず存在(空配列の場合もある)
})
);
var SubtableOrganizationSelectFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("ORGANIZATION_SELECT"),
entities: Schema.Array(EntitySchema),
// サブテーブルでは必ず存在(空配列の場合もある)
defaultValue: Schema.Array(
Schema.Struct({
type: Schema.Literal("ORGANIZATION"),
code: UserFieldCodeSchema
})
)
// サブテーブルでは必ず存在(空配列の場合もある)
})
);
var SubtableGroupSelectFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("GROUP_SELECT"),
entities: Schema.Array(EntitySchema),
// サブテーブルでは必ず存在(空配列の場合もある)
defaultValue: Schema.Array(
Schema.Struct({
type: Schema.Literal("GROUP"),
code: UserFieldCodeSchema
})
)
// サブテーブルでは必ず存在(空配列の場合もある)
})
);
var SubtableFileFieldPropertiesSchema = Schema.extend(
BaseSubtableFieldPropertiesSchema,
Schema.Struct({
type: Schema.Literal("FILE"),
thumbnailSize: NumericStringSchema
// サブテーブルでは必ず存在(空文字列の場合もある)
})
);
var SubtableFieldSchema2 = Schema.Union(
SubtableSingleLineTextFieldPropertiesSchema,
SubtableMultiLineTextFieldPropertiesSchema,
SubtableRichTextFieldPropertiesSchema,
SubtableNumberFieldPropertiesSchema,
SubtableCalcFieldPropertiesSchema,
SubtableRadioButtonFieldPropertiesSchema,
SubtableCheckBoxFieldPropertiesSchema,
SubtableMultiSelectFieldPropertiesSchema,
SubtableDropDownFieldPropertiesSchema,
SubtableDateFieldPropertiesSchema,
SubtableTimeFieldPropertiesSchema,
SubtableDateTimeFieldPropertiesSchema,
SubtableLinkFieldPropertiesSchema,
SubtableUserSelectFieldPropertiesSchema,
SubtableOrganizationSelectFieldPropertiesSchema,
SubtableGroupSelectFieldPropertiesSchema,
SubtableFileFieldPropertiesSchema
);
var SubtableFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("SUBTABLE"),
code: UserFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean),
fields: Schema.Record({
key: Schema.String,
value: SubtableFieldSchema2
})
});
var GroupFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("GROUP"),
code: UserFieldCodeSchema,
label: Schema.String,
noLabel: Schema.optional(Schema.Boolean),
openGroup: Schema.optional(Schema.Boolean)
});
var RecordIdFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("RECORD_ID"),
code: UserFieldCodeSchema,
label: Schema.String
});
var RevisionFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("REVISION"),
code: UserFieldCodeSchema,
label: Schema.String
});
var SystemIdFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("__ID__"),
code: Schema.Literal("$id"),
label: Schema.String
});
var SystemRevisionFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("__REVISION__"),
code: Schema.Literal("$revision"),
label: Schema.String
});
var SpacerFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("SPACER"),
elementId: Schema.String,
size: Schema.Struct({
width: Schema.Union(Schema.Number, Schema.String),
height: Schema.optional(Schema.Union(Schema.Number, Schema.String))
})
});
var LabelFieldPropertiesSchema = Schema.Struct({
type: Schema.Literal("LABEL"),
label: Schema.String,
size: Schema.Struct({
width: Schema.Union(Schema.Number, Schema.String)
})
});
var KintoneFieldPropertiesSchema = Schema.Union(
SingleLineTextFieldPropertiesSchema,
MultiLineTextFieldPropertiesSchema,
RichTextFieldPropertiesSchema,
NumberFieldPropertiesSchema,
CalcFieldPropertiesSchema,
RadioButtonFieldPropertiesSchema,
CheckBoxFieldPropertiesSchema,
MultiSelectFieldPropertiesSchema,
DropDownFieldPropertiesSchema,
DateFieldPropertiesSchema,
TimeFieldPropertiesSchema,
DateTimeFieldPropertiesSchema,
LinkFieldPropertiesSchema,
UserSelectFieldPropertiesSchema,
OrganizationSelectFieldPropertiesSchema,
GroupSelectFieldPropertiesSchema,
FileFieldPropertiesSchema,
ReferenceTableFieldPropertiesSchema,
RecordNumberFieldPropertiesSchema,
CreatorFieldPropertiesSchema,
CreatedTimeFieldPropertiesSchema,
ModifierFieldPropertiesSchema,
UpdatedTimeFieldPropertiesSchema,
StatusFieldPropertiesSchema,
StatusAssigneeFieldPropertiesSchema,
CategoryFieldPropertiesSchema,
SubtableFieldPropertiesSchema,
GroupFieldPropertiesSchema,
RecordIdFieldPropertiesSchema,
RevisionFieldPropertiesSchema,
SystemIdFieldPropertiesSchema,
SystemRevisionFieldPropertiesSchema,
SpacerFieldPropertiesSchema,
LabelFieldPropertiesSchema
);
var GetFormFieldsResponseSchema = Schema.Struct({
properties: Schema.Record({
key: Schema.String,
value: KintoneFieldPropertiesSchema
}),
revision: Schema.optional(Schema.String)
});
function convertFormFieldToRecordSchema(formField) {
switch (formField.type) {
// Text fields
case "SINGLE_LINE_TEXT":
return SingleLineTextFieldSchema;
case "MULTI_LINE_TEXT":
return MultiLineTextFieldSchema;
case "RICH_TEXT":
return RichTextFieldSchema;
// Number and calculation fields
case "NUMBER":
return NumberFieldSchema;
case "CALC":
return CalcFieldSchema;
// Selection fields
case "RADIO_BUTTON":
return RadioButtonFieldSchema;
case "CHECK_BOX":
return CheckBoxFieldSchema;
case "MULTI_SELECT":
return MultiSelectFieldSchema;
case "DROP_DOWN":
return DropDownFieldSchema;
// Date and time fields
case "DATE":
return DateFieldSchema;
case "TIME":
return TimeFieldSchema;
case "DATETIME":
return DateTimeFieldSchema;
// Link field
case "LINK":
return LinkFieldSchema;
// User/Organization/Group selection fields
case "USER_SELECT":
return UserSelectFieldSchema;
case "ORGANIZATION_SELECT":
return OrganizationSelectFieldSchema;
case "GROUP_SELECT":
return GroupSelectFieldSchema;
// File field
case "FILE":
return FileFieldSchema;
// Reference table (not included in record data directly)
case "REFERENCE_TABLE":
return void 0;
// System fields
case "RECORD_NUMBER":
return RecordNumberFieldSchema;
case "CREATOR":
return CreatorFieldSchema;
case "CREATED_TIME":
return CreatedTimeFieldSchema;
case "MODIFIER":
return ModifierFieldSchema;
case "UPDATED_TIME":
return UpdatedTimeFieldSchema;
case "STATUS":
return StatusFieldSchema;
case "STATUS_ASSIGNEE":
return StatusAssigneeFieldSchema;
case "CATEGORY":
return CategoryFieldSchema;
// Special ID fields
case "RECORD_ID":
return RecordIdFieldSchema;
case "REVISION":
return RevisionFieldSchema;
// Subtable (special handling)
case "SUBTABLE":
return convertSubtableFormToRecordSchema(formField);
// Layout fields (not included in record data)
case "GROUP":
return void 0;
default:
return void 0;
}
}
function convertSubtableFieldToRecordSchema(fieldProps) {
const field = fieldProps;
switch (field.type) {
case "SINGLE_LINE_TEXT":
return SingleLineTextFieldSchema;
case "MULTI_LINE_TEXT":
return MultiLineTextFieldSchema;
case "RICH_TEXT":
return RichTextFieldSchema;
case "NUMBER":
return NumberFieldSchema;
case "CALC":
return CalcFieldSchema;
case "RADIO_BUTTON":
return RadioButtonFieldSchema;
case "CHECK_BOX":
return CheckBoxFieldSchema;
case "MULTI_SELECT":
return MultiSelectFieldSchema;
case "DROP_DOWN":
return DropDownFieldSchema;
case "DATE":
return DateFieldSchema;
case "TIME":
return TimeFieldSchema;
case "DATETIME":
return DateTimeFieldSchema;
case "LINK":
return LinkFieldSchema;
case "USER_SELECT":
return UserSelectFieldSchema;
case "ORGANIZATION_SELECT":
return OrganizationSelectFieldSchema;
case "GROUP_SELECT":
return GroupSelectFieldSchema;
case "FILE":
return FileFieldSchema;
default:
return void 0;
}
}
function convertSubtableFormToRecordSchema(subtableField) {
if (subtableField.type !== "SUBTABLE") {
return void 0;
}
const convertedFields = [];
for (const [, fieldProps] of Object.entries(subtableField.fields)) {
const recordSchema = convertSubtableFieldToRecordSchema(fieldProps);
if (recordSchema) {
convertedFields.push(recordSchema);
}
}
return Schema.Struct({
type: Schema.Literal("SUBTABLE"),
value: Schema.Array(
Schema.Struct({
id: Schema.String,
value: Schema.Record({
key: Schema.String,
value: convertedFields.length > 0 ? Schema.Union(...convertedFields) : Schema.Unknown
})
})
)
});
}
function convertFormFieldsToRecordSchema(formFields) {
const recordSchemas = {};
for (const [fieldCode, fieldProps] of Object.entries(formFields)) {
const recordSchema = convertFormFieldToRecordSchema(fieldProps);
if (recordSchema) {
recordSchemas[fieldCode] = recordSchema;
}
}
return recordSchemas;
}
function createRecordSchemaFromForm(formFields, customValidations) {
const recordSchemas = convertFormFieldsToRecordSchema(formFields);
if (customValidations) {
for (const [fieldCode, validation] of Object.entries(customValidations)) {
if (recordSchemas[fieldCode]) {
recordSchemas[fieldCode] = validation(recordSchemas[fieldCode]);
}
}
}
return Schema.Record({
key: Schema.String,
value: Object.values(recordSchemas).length > 0 ? Schema.Union(...Object.values(recordSchemas)) : Schema.Unknown
});
}
function getRecordFieldType(formFieldType) {
switch (formFieldType) {
// Most types are the same
case "SINGLE_LINE_TEXT":
case "MULTI_LINE_TEXT":
case "RICH_TEXT":
case "NUMBER":
case "CALC":
case "RADIO_BUTTON":
case "CHECK_BOX":
case "MULTI_SELECT":
case "DROP_DOWN":
case "DATE":
case "TIME":
case "DATETIME":
case "LINK":
case "USER_SELECT":
case "ORGANIZATION_SELECT":
case "GROUP_SELECT":
case "FILE":
case "RECORD_NUMBER":
case "CREATOR":
case "CREATED_TIME":
case "MODIFIER":
case "UPDATED_TIME":
case "STATUS":
case "STATUS_ASSIGNEE":
case "CATEGORY":
case "SUBTABLE":
case "RECORD_ID":
case "REVISION":
return formFieldType;
// Layout fields don't exist in records
case "REFERENCE_TABLE":
case "GROUP":
return void 0;
default:
return void 0;
}
}
var FIELD_TYPE_TO_PROPERTIES_SCHEMA = {
SINGLE_LINE_TEXT: SingleLineTextFieldPropertiesSchema,
MULTI_LINE_TEXT: MultiLineTextFieldPropertiesSchema,
RICH_TEXT: RichTextFieldPropertiesSchema,
NUMBER: NumberFieldPropertiesSchema,
CALC: CalcFieldPropertiesSchema,
RADIO_BUTTON: RadioButtonFieldPropertiesSchema,
CHECK_BOX: CheckBoxFieldPropertiesSchema,
MULTI_SELECT: MultiSelectFieldPropertiesSchema,
DROP_DOWN: DropDownFieldPropertiesSchema,
DATE: DateFieldPropertiesSchema,
TIME: TimeFieldPropertiesSchema,
DATETIME: DateTimeFieldPropertiesSchema,
LINK: LinkFieldPropertiesSchema,
USER_SELECT: UserSelectFieldPropertiesSchema,
ORGANIZATION_SELECT: OrganizationSelectFieldPropertiesSchema,
GROUP_SELECT: GroupSelectFieldPropertiesSchema,
FILE: FileFieldPropertiesSchema,
REFERENCE_TABLE: ReferenceTableFieldPropertiesSchema,
RECORD_NUMBER: RecordNumberFieldPropertiesSchema,
CREATOR: CreatorFieldPropertiesSchema,
CREATED_TIME: CreatedTimeFieldPropertiesSchema,
MODIFIER: ModifierFieldPropertiesSchema,
UPDATED_TIME: UpdatedTimeFieldPropertiesSchema,
STATUS: StatusFieldPropertiesSchema,
STATUS_ASSIGNEE: StatusAssigneeFieldPropertiesSchema,
CATEGORY: CategoryFieldPropertiesSchema,
SUBTABLE: SubtableFieldPropertiesSchema,
GROUP: GroupFieldPropertiesSchema,
RECORD_ID: RecordIdFieldPropertiesSchema,
REVISION: RevisionFieldPropertiesSchema,
__ID__: SystemIdFieldPropertiesSchema,
__REVISION__: SystemRevisionFieldPropertiesSchema,
SPACER: SpacerFieldPropertiesSchema,
LABEL: LabelFieldPropertiesSchema
};
function toFormPropertiesSchema(field) {
return FIELD_TYPE_TO_PROPERTIES_SCHEMA[field.type];
}
function buildFormSchemaFromJson(properties) {
const propsSchemas = {};
for (const [code, field] of Object.entries(properties)) {
const schema = toFormPropertiesSchema(field);
if (schema) {
propsSchemas[code] = schema;
}
}
return Schema.Struct({
properties: Schema.Struct(propsSchemas)
});
}
// src/utils/form-config-to-effect-module-code.ts
var FIELD_TYPE_TO_FORM_SCHEMA = {
SINGLE_LINE_TEXT: "SingleLineTextFieldPropertiesSchema",
MULTI_LINE_TEXT: "MultiLineTextFieldPropertiesSchema",
RICH_TEXT: "RichTextFieldPropertiesSchema",
NUMBER: "NumberFieldPropertiesSchema",
CALC: "CalcFieldPropertiesSchema",
RADIO_BUTTON: "RadioButtonFieldPropertiesSchema",
CHECK_BOX: "CheckBoxFieldPropertiesSchema",
MULTI_SELECT: "MultiSelectFieldPropertiesSchema",
DROP_DOWN: "DropDownFieldPropertiesSchema",
DATE: "DateFieldPropertiesSchema",
TIME: "TimeFieldPropertiesSchema",
DATETIME: "DateTimeFieldPropertiesSchema",
LINK: "LinkFieldPropertiesSchema",
USER_SELECT: "UserSelectFieldPropertiesSchema",
ORGANIZATION_SELECT: "OrganizationSelectFieldPropertiesSchema",
GROUP_SELECT: "GroupSelectFieldPropertiesSchema",
FILE: "FileFieldPropertiesSchema",
REFERENCE_TABLE: "ReferenceTableFieldPropertiesSchema",
RECORD_NUMBER: "RecordNumberFieldPropertiesSchema",
CREATOR: "CreatorFieldPropertiesSchema",
CREATED_TIME: "CreatedTimeFieldPropertiesSchema",
MODIFIER: "ModifierFieldPropertiesSchema",
UPDATED_TIME: "UpdatedTimeFieldPropertiesSchema",
STATUS: "StatusFieldPropertiesSchema",
STATUS_ASSIGNEE: "StatusAssigneeFieldPropertiesSchema",
CATEGORY: "CategoryFieldPropertiesSchema",
SUBTABLE: "SubtableFieldPropertiesSchema",
GROUP: "GroupFieldPropertiesSchema",
RECORD_ID: "RecordIdFieldPropertiesSchema",
REVISION: "RevisionFieldPropertiesSchema",
__ID__: "SystemIdFieldPropertiesSchema",
__REVISION__: "SystemRevisionFieldPropertiesSchema",
SPACER: "SpacerFieldPropertiesSchema",
LABEL: "LabelFieldPropertiesSchema"
};
function isReservedWord(word) {
const reserved = /* @__PURE__ */ new Set([
"break",
"case",
"catch",
"class",
"const",
"continue",
"debugger",
"default",
"delete",
"do",
"else",
"export",
"extends",
"finally",
"for",
"function",
"if",
"import",
"in",
"instanceof",
"new",
"return",
"super",
"switch",
"this",
"throw",
"try",
"typeof",
"var",
"void",
"while",
"with",
"yield",
"enum",
"implements",
"interface",
"let",
"package",
"private",
"protected",
"public",
"static",
"await",
"abstract",
"boolean",
"byte",
"char",
"double",
"final",
"float",
"goto",
"int",
"long",
"native",
"short",
"synchronized",
"throws",
"transient",
"volatile"
]);
return reserved.has(word);
}
function valueToCode(value, indent = 0) {
const spaces = " ".repeat(indent);
if (value === null) return "null";
if (value === void 0) return "undefined";
if (typeof value === "string") return JSON.stringify(value);
if (typeof value === "number" || typeof value === "boolean") return String(value);
if (Array.isArray(value)) {
if (value.length === 0) return "[]";
const items = value.map((v) => valueToCode(v, indent + 1));
if (items.every((i) => i.length < 40) && items.join(", ").length < 60) {
return `[${items.join(", ")}]`;
}
return `[
${spaces} ${items.join(`,
${spaces} `)}
${spaces}]`;
}
if (typeof value === "object") {
const entries = Object.entries(value).filter(([, v]) => v !== void 0);
if (entries.length === 0) return "{}";
const props = entries.map(([key, val]) => {
const needsQuotes = !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) || isReservedWord(key);
const keyStr = needsQuotes ? JSON.stringify(key) : key;
const valStr = valueToCode(val, indent + 1);
return `${spaces} ${keyStr}: ${valStr}`;
});
return `{
${props.join(",\n")}
${spaces}}`;
}
return JSON.stringify(value);
}
function formConfigToEffectModuleCode(properties, options) {
const entries = Object.entries(properties);
if (entries.length === 0) {
return `import { Schema } from '${options?.importSource ?? "kintone-effect-schema"}';
export const ${options?.valueVarName ?? "appForm"} = { properties: {} as const };
export const ${options?.schemaVarName ?? "appFormFieldsSchema"} = Schema.Struct({ properties: Schema.Struct({}) });`;
}
const importSet = /* @__PURE__ */ new Set(["Schema"]);
const fieldSchemasForStruct = [];
const sortedCodes = entries.map(([code]) => code).sort();
for (const code of sortedCodes) {
const field = properties[code];
const schemaConst = FIELD_TYPE_TO_FORM_SCHEMA[field.type];
if (schemaConst) importSet.add(schemaConst);
const needsQuotes = code.startsWith("$") || !/^[a-zA-Z_][a-zA-Z0-9_$]*$/.test(code) || isReservedWord(code);
const key = needsQuotes ? JSON.stringify(code) : code;
fieldSchemasForStruct.push(` ${key}: ${schemaConst}`);
}
const importSource = options?.importSource ?? "kintone-effect-schema";
const imports = `import {
${Array.from(importSet).sort((a, b) => a === "Schema" ? -1 : b === "Schema" ? 1 : a.localeCompare(b)).join(",\n ")}
} from '${importSource}';`;
const valueVarName = options?.valueVarName ?? "appForm";
const schemaVarName = options?.schemaVarName ?? "appFormFieldsSchema";
const valueCode = `export const ${valueVarName} = ${valueToCode({ properties }, 0)} as const;`;
const schemaCode = `export const ${schemaVarName} = Schema.Struct({
properties: Schema.Struct({
${fieldSchemasForStruct.join(",\n")}
})
});`;
return [imports, "", valueCode, "", schemaCode].join("\n");
}
export { CalcFieldPropertiesSchema, CalcFieldSchema, CategoryFieldPropertiesSchema, CategoryFieldSchema, CheckBoxFieldPropertiesSchema, CheckBoxFieldSchema, CreatedTimeFieldPropertiesSchema, CreatedTimeFieldSchema, CreatorFieldPropertiesSchema, CreatorFieldSchema, DateFieldPropertiesSchema, DateFieldSchema, DateTimeFieldPropertiesSchema, DateTimeFieldSchema, DropDownFieldPropertiesSchema, DropDownFieldSchema, FileFieldPropertiesSchema, FileFieldSchema, GetFormFieldsResponseSchema, GetRecordResponseSchema, GetRecordsResponseSchema, GroupFieldPropertiesSchema, GroupSelectFieldPropertiesSchema, GroupSelectFieldSchema, KintoneFieldPropertiesSchema, KintoneFieldSchema, KintoneFileSchema, KintoneGroupSchema, KintoneOrganizationSchema, KintoneRecordForWriteSchema, KintoneRecordSchema, KintoneUserSchema, KintoneValidationError, LabelFieldPropertiesSchema, LinkFieldPropertiesSchema, LinkFieldSchema, LookupFieldSchema, ModifierFieldPropertiesSchema, ModifierFieldSchema, MultiLineTextFieldPropertiesSchema, MultiLineTextFieldSchema, MultiSelectFieldPropertiesSchema, MultiSelectFieldSchema, NumberFieldPropertiesSchema, NumberFieldSchema, OrganizationSelectFieldPropertiesSchema, OrganizationSelectFieldSchema, RadioButtonFieldPropertiesSchema, RadioButtonFieldSchema, RecordIdFieldPropertiesSchema, RecordIdFieldSchema, RecordNumberFieldPropertiesSchema, RecordNumberFieldSchema, ReferenceTableFieldPropertiesSchema, RevisionFieldPropertiesSchema, RevisionFieldSchema, RichTextFieldPropertiesSchema, RichTextFieldSchema, SingleLineTextFieldPropertiesSchema, SingleLineTextFieldSchema, SpacerFieldPropertiesSchema, StatusAssigneeFieldPropertiesSchema, StatusAssigneeFieldSchema, StatusFieldPropertiesSchema, StatusFieldSchema, SubtableCalcFieldPropertiesSchema, SubtableCheckBoxFieldPropertiesSchema, SubtableDateFieldPropertiesSchema, SubtableDateTimeFieldPropertiesSchema, SubtableDropDownFieldPropertiesSchema, SubtableFieldPropertiesSchema, SubtableFieldSchema, SubtableFileFieldPropertiesSchema, SubtableGroupSelectFieldPropertiesSchema, SubtableLinkFieldPropertiesSchema, SubtableMultiLineTextFieldPropertiesSchema, SubtableMultiSelectFieldPropertiesSchema, SubtableNumberFieldPropertiesSchema, SubtableOrganizationSelectFieldPropertiesSchema, SubtableRadioButtonFieldPropertiesSchema, SubtableRichTextFieldPropertiesSchema, SubtableSingleLineTextFieldPropertiesSchema, SubtableTimeFieldPropertiesSchema, SubtableUserSelectFieldPropertiesSchema, SystemFieldCodeSchema, SystemIdFieldPropertiesSchema, SystemRevisionFieldPropertiesSchema, TimeFieldPropertiesSchema, TimeFieldSchema, UpdatedTimeFieldPropertiesSchema, UpdatedTimeFieldSchema, UserFieldCodeSchema, UserSelectFieldPropertiesSchema, UserSelectFieldSchema, buildFormSchemaFromJson, convertFormFieldToRecordSchema, convertFormFieldsToRecordSchema, createRecordSchemaFromForm, decodeKintoneField, decodeKintoneRecord, formConfigToEffectModuleCode, getEmptyValueForWrite, getRecordFieldType, isNonEmptyField, normalizeFieldValue, toFormPropertiesSchema, validateFieldForWrite, validateRecordForWrite };
//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map