@orizm/cli 2.2.5 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +13 -10
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +13 -10
- package/dist/cli.js.map +1 -1
- package/package.json +6 -5
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/cms/generate/command.ts","../src/lib/load-config.ts","../src/lib/cli-spinner.ts","../src/lib/cli-symbol.ts","../src/lib/cli-cursor.ts","../src/lib/handle-error.ts","../src/lib/display-valibot-error.ts","../src/cms/generate/generator.ts","../src/lib/format-ts-with-prettier.ts","../src/lib/render-helpers.ts","../src/cms/pull/command.ts","../../internal-shared/src/api-clients/assert-valid-url-origin.ts","../../../node_modules/.pnpm/openapi-fetch@0.17.0/node_modules/openapi-fetch/src/index.js","../../internal-shared/src/api-clients/dev-v2-api-client.ts","../src/lib/fetch-current-definition.ts","../src/lib/load-env.ts","../src/cms/pull/action.ts","../src/consumer/generate/command.ts","../src/consumer/pull/generate.ts","../src/consumer/generate/action.ts","../src/consumer/pull/command.ts","../src/consumer/pull/action.ts","../src/push/command.ts","../src/lib/developer-api.ts","../src/lib/display-change-events.ts","../src/lib/cli-table.ts","../src/lib/cli-input.ts","../src/config/validate/command.ts","../src/config/validate/watcher.ts","../src/config/generate-erd/command.ts","../src/config/generate-erd/generate.ts","../src/config/generate-erd/convert-to-input.ts"],"sourcesContent":["import { Command, program } from \"commander\";\nimport { cmsGenerateCommand } from \"./cms/generate/command.js\";\nimport { cmsPullCommand } from \"./cms/pull/command.js\";\nimport { consumerGenerateCommand } from \"./consumer/generate/command.js\";\nimport { consumerPullCommand } from \"./consumer/pull/command.js\";\nimport { pushCommand } from \"./push/command.js\";\nimport { validateConfigCommand } from \"./config/validate/command.js\";\nimport { generateErdCommand } from \"./config/generate-erd/command.js\";\n\nprogram.name(\"orizm CLI\");\n\nprogram.addCommand(pushCommand);\n\nconst cmsCommands = new Command(\"cms\").description(\"cms commands.\");\n\ncmsCommands.addCommand(cmsGenerateCommand);\ncmsCommands.addCommand(cmsPullCommand);\nprogram.addCommand(cmsCommands);\n\nconst consumerCommands = new Command(\"consumer\").description(\n \"consumer commands.\",\n);\n\nconsumerCommands.addCommand(consumerGenerateCommand);\nconsumerCommands.addCommand(consumerPullCommand);\nprogram.addCommand(consumerCommands);\n\nconst configCommands = new Command(\"config\").description(\"config commands.\");\n\nconfigCommands.addCommand(validateConfigCommand);\nconfigCommands.addCommand(generateErdCommand);\nprogram.addCommand(configCommands);\n\nprogram.parse();\n","import { Command } from \"commander\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { createSpinner } from \"../../lib/cli-spinner.js\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { generate as generateCode } from \"./generator.js\";\n\nconst spinner = createSpinner();\n\nexport const cmsGenerateCommand = new Command(\"generate\")\n .description(\"generate orizm client and types.\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n spinner.start(\"Loading project schema...\");\n const config = await loadConfig(options.config);\n spinner.succeed(\"Loaded project schema.\");\n\n spinner.start(\"Generating code...\");\n await generateCode({\n config,\n output: options.output,\n });\n spinner.succeed(`Generated code to '${options.output}'`);\n } catch (error) {\n handleError(error);\n }\n });\n","import esbuild from \"esbuild\";\nimport { OrizmConfigDef } from \"@orizm/common/config-validator\";\nimport * as v from \"valibot\";\nimport { CommonOrizmConfig } from \"../types.js\";\n\nexport async function loadConfig(\n configFile: string,\n): Promise<CommonOrizmConfig> {\n const buildResult = await esbuild.build({\n entryPoints: [configFile],\n bundle: true,\n write: false,\n format: \"esm\",\n target: \"node22\",\n platform: \"node\",\n });\n\n const moduleURL = `data:text/javascript,${encodeURIComponent(\n buildResult.outputFiles[0].text,\n )}`;\n\n const { default: orizmConfigRaw } = await import(moduleURL);\n\n return v.parse(OrizmConfigDef, orizmConfigRaw);\n}\n","import readline from \"readline\";\nimport * as symbol from \"./cli-symbol.js\";\nimport * as cursor from \"./cli-cursor.js\";\n\nconst FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nconst FRAME_INTERVAL = 80;\n\nclass Spinner {\n private text: string = \"\";\n private currentFrame: number = 0;\n private timer: NodeJS.Timeout | null = null;\n private isSpinning: boolean = false;\n\n start(text?: string): Spinner {\n if (text) {\n this.text = text;\n }\n\n if (this.isSpinning) {\n return this;\n }\n\n this.isSpinning = true;\n this.currentFrame = 0;\n\n cursor.hide();\n\n this.render();\n this.timer = setInterval(() => {\n this.render();\n }, FRAME_INTERVAL);\n\n return this;\n }\n\n stop(): Spinner {\n if (!this.isSpinning) {\n return this;\n }\n\n this.isSpinning = false;\n\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n readline.clearLine(process.stdout, 0);\n readline.cursorTo(process.stdout, 0);\n\n cursor.show();\n\n return this;\n }\n\n succeed(text?: string): void {\n this.stop();\n const finalText = text || this.text;\n console.log(`${symbol.success} ${finalText}`);\n }\n\n private render(): void {\n const frame = FRAMES[this.currentFrame];\n this.currentFrame = (this.currentFrame + 1) % FRAMES.length;\n\n readline.clearLine(process.stdout, 0);\n readline.cursorTo(process.stdout, 0);\n\n process.stdout.write(`${frame} ${this.text}`);\n }\n}\n\nexport function createSpinner(): Spinner {\n return new Spinner();\n}\n","import chalk from \"chalk\";\n\nexport const success = chalk.green(\"✓\");\nexport const error = chalk.red(\"✗\");\n","export function hide(): void {\n process.stdout.write(\"\\u001B[?25l\");\n}\n\nexport function show(): void {\n process.stdout.write(\"\\u001B[?25h\");\n}\n","import * as v from \"valibot\";\nimport chalk from \"chalk\";\nimport * as cursor from \"./cli-cursor.js\";\nimport { displayValibotError } from \"./display-valibot-error.js\";\n\nexport function handleError(error: unknown): void {\n cursor.show();\n\n if (v.isValiError(error)) {\n console.error();\n displayValibotError(error);\n console.error();\n\n process.exit(1);\n }\n\n console.error();\n console.error(\n chalk.red(\n \"Something went wrong. Please check the error below for more details.\",\n ),\n );\n console.error();\n console.error(error);\n console.error();\n\n process.exit(1);\n}\n","import * as v from \"valibot\";\nimport chalk from \"chalk\";\n\nexport function displayValibotError(error: unknown): void {\n if (!v.isValiError(error)) {\n return;\n }\n\n console.error(`Error: ${error.issues.length} problem(s) found.`);\n console.error(buildValiErrorMessage(error));\n}\n\nexport function buildValiErrorMessage(\n e: v.ValiError<v.GenericSchema | v.GenericSchemaAsync>,\n options?: { color?: boolean },\n): string {\n const { color = true } = options ?? {};\n\n return e.issues\n .map((issue) => {\n const path = getPath(issue);\n return ` ${getIssueMessage(issue.message, color)} (at ${getLocationPath(path, color)})`;\n })\n .join(\"\\n\");\n}\n\nfunction getIssueMessage(message: string, color: boolean): string {\n return color ? chalk.red(message) : message;\n}\n\nfunction getLocationPath(path: string, color: boolean): string {\n return color ? chalk.yellow(path) : path;\n}\n\nfunction getPath(issue: v.BaseIssue<unknown>): string {\n const issueDotPath = v.getDotPath(issue);\n const pathInfo = issue.path;\n if (!issueDotPath || !pathInfo) {\n return \"\";\n }\n\n const pathParts = issueDotPath.split(\".\");\n\n // pathInfoの要素を順番に処理して、pathの位置に対応するname値を探す\n let pathInfoIndex = 0;\n\n for (let i = 0; i < pathParts.length; i++) {\n const part = pathParts[i];\n\n if (!isNumberIndex(part)) {\n continue;\n }\n\n const index = parseInt(part);\n\n // pathInfo から該当するインデックスの情報を取得\n // pathInfoIndex以降で、type=arrayかつkey=indexの要素を探す\n for (let j = pathInfoIndex; j < pathInfo.length; j++) {\n const pathItem = pathInfo[j];\n if (pathItem.type === \"array\" && pathItem.key === index) {\n if (\n pathItem.value != null &&\n typeof pathItem.value === \"object\" &&\n \"name\" in pathItem.value\n ) {\n pathParts[i] = String(pathItem.value.name);\n pathInfoIndex = j + 1;\n break;\n }\n }\n }\n }\n\n return pathParts.join(\".\");\n}\n\nfunction isNumberIndex(part: string): boolean {\n return /^\\d+$/.test(part);\n}\n","import { mkdir, writeFile } from \"fs/promises\";\nimport path from \"path\";\nimport { CommonOrizmConfig, ServerOrizmConfig } from \"../../types.js\";\nimport { formatTsWithPrettier } from \"../../lib/format-ts-with-prettier\";\nimport {\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderPreamble,\n renderSection,\n renderWebhookTypesSection,\n} from \"../../lib/render-helpers\";\n\ntype GenerateOptions = {\n config: CommonOrizmConfig | ServerOrizmConfig;\n output: string;\n};\n\nexport async function generate(options: GenerateOptions) {\n const config = options.config;\n\n await mkdir(options.output, { recursive: true });\n const renderedTypes = await renderTypes(config);\n await writeFile(\n path.join(options.output, \"types.ts\"),\n renderedTypes,\n \"utf-8\",\n );\n const renderedClient = await renderClient(config);\n await writeFile(\n path.join(options.output, \"client.ts\"),\n renderedClient,\n \"utf-8\",\n );\n}\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n isSubmissions?: boolean;\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n formOptions?: { submissionColumns?: RenderColumn[] };\n};\n\nexport async function renderTypes(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const submissionTables: RenderTable[] = config.tables\n .filter((t) => t.enableForm)\n .map((t) => ({\n name: t.name + \"__submission\",\n columns: t.formOptions?.submissionColumns ?? [],\n isSubmissions: true,\n }));\n const allTables: RenderTable[] = [...config.tables, ...submissionTables];\n const modules = config.tableModules ?? [];\n\n const source = [\n renderPreamble(\"@orizm/cms-sdk/common\"),\n renderSection(\"Tables\", allTables.map(renderTableTypes)),\n renderSection(\"Module types\", modules.map(renderModuleTypes)),\n // CMS: モジュール descriptor 間は空行なし(スナップショット互換)\n \"// Descriptor types\\n\" +\n [\n ...allTables.map(renderTableDescriptor),\n modules.map(renderModuleDescriptorBlock).join(\"\\n\"),\n ].join(\"\\n\\n\"),\n renderWebhookTypesSection(allTables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n return await formatTsWithPrettier(source);\n}\n\nfunction renderTableTypes(table: RenderTable): string {\n const cols = table.columns;\n const name = toCodeTypeName(table.name);\n\n const rowType = renderTypeBlock(name, [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n ...(!table.isSubmissions\n ? [\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n \"scheduledPublishAt: string | null;\",\n \"scheduledUnpublishAt: string | null;\",\n ]\n : [\n \"_formId: string;\",\n \"_content: unknown;\",\n \"_formSchema: unknown;\",\n \"_attachments: StorageItemType[];\",\n ]),\n ...cols.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...(!table.isSubmissions\n ? [\n \"group?: string | null;\",\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n ...cols\n .filter((col) => !col.readOnly)\n .map((col) =>\n renderColumnField(col, { optional: true, suffix: \"UpdateInput\" }),\n ),\n ...(!table.isSubmissions\n ? [\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderModuleTypes(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n const cols = mod.columns;\n\n const rowType = renderModuleRowTypeBlock(mod);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n \"id?: string;\",\n ...cols.map((col) => renderColumnField(col, { optional: !col.required })),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n `create: ${name}CreateInput;`,\n `update: ${name}UpdateInput;`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ...(table.enableForm\n ? [`submissionDescriptor: ${name}_Submission__Descriptor;`]\n : [\"submissionDescriptor: never;\"]),\n ]);\n}\n\nexport async function renderClient(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.client.getTableClient<Models.${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n const bucketEntries = (config.buckets ?? [])\n .map((b) => `${b.name}: this.client.getBucketClient(\"${b.name}\"),`)\n .join(\"\\n\");\n\n const source = `// This file was automatically generated and should not be edited.\n\nimport { OrizmCMSClient } from \"@orizm/cms-sdk\";\n\nimport * as Models from \"./types\";\n\nexport class CMSClient {\n constructor(protected client: OrizmCMSClient) {\n this.tables = {\n ${tableEntries}\n };\n\n this.buckets = {\n ${bucketEntries}\n };\n\n this.userManagement = this.client.userManagement;\n\n this.userinfo = this.client.userinfo;\n\n this.auth = this.client.auth;\n }\n\n readonly tables;\n readonly buckets;\n readonly userManagement;\n readonly userinfo;\n readonly auth;\n}\n`;\n\n return await formatTsWithPrettier(source);\n}\n","import * as prettier from \"prettier/standalone\";\nimport prettierPluginEstree from \"prettier/plugins/estree.js\";\nimport prettierPluginTypeScript from \"prettier/plugins/typescript.js\";\n\nexport function formatTsWithPrettier(code: string) {\n return prettier.format(code, {\n parser: \"typescript\",\n plugins: [prettierPluginEstree, prettierPluginTypeScript],\n });\n}\n","/**\n * レンダリング用のカラム型。\n * CommonOrizmConfig と ServerOrizmConfig の両方のカラム型を受け付けるために、\n * 必要なプロパティだけを定義している。\n */\nexport type RenderColumn = {\n name: string;\n type: string;\n required?: boolean;\n readOnly?: boolean;\n moduleName?: string;\n tableName?: string;\n includeName?: string;\n};\n\nexport type RenderIndex = {\n columns: string[];\n unique?: boolean;\n nullsNotDistinct?: boolean;\n};\n\n// --- 名前変換 ---\n\nexport function toCodeTypeName(str: string): string {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n return str.replace(/_([a-z])/g, (g) => g[1].toUpperCase());\n}\n\nexport function typeName(column: RenderColumn, moduleSuffix = \"\"): string {\n switch (column.type) {\n case \"reference\":\n return \"string\";\n case \"module\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix;\n case \"module-array\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix + \"[]\";\n case \"json\":\n return \"unknown\";\n case \"storage\":\n return \"StorageItemType\";\n default:\n return column.type;\n }\n}\n\nexport function nullableSuffix(column: RenderColumn): string {\n return !column.required && column.type !== \"module-array\" ? \" | null\" : \"\";\n}\n\n// --- 参照カラム ---\n\nexport function filterRefColumns(columns: RenderColumn[]): RenderColumn[] {\n return columns.filter(\n (c) =>\n (c.type === \"reference\" &&\n c.tableName !== undefined &&\n c.includeName !== undefined &&\n c.includeName !== \"\") ||\n (c.type === \"module\" && c.moduleName !== undefined) ||\n (c.type === \"module-array\" && c.moduleName !== undefined),\n );\n}\n\nexport function getIncludeName(column: RenderColumn): string {\n return column.type === \"reference\"\n ? column.includeName || column.name\n : column.name;\n}\n\nexport function getIncludeType(column: RenderColumn): string {\n if (column.type === \"reference\" && column.tableName) {\n return toCodeTypeName(column.tableName) + \"__Descriptor\";\n }\n if (column.type === \"module\" && column.moduleName) {\n return `_ModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n if (column.type === \"module-array\" && column.moduleName) {\n return `_ArrayModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n return \"\";\n}\n\n// --- フィールド・型ブロック ---\n\nexport function renderColumnField(\n col: RenderColumn,\n options?: { optional?: boolean; suffix?: string },\n): string {\n const optional = options?.optional === true ? \"?\" : \"\";\n const suffix = options?.suffix ?? \"\";\n return `${col.name}${optional}: ${typeName(col, suffix)}${nullableSuffix(col)};`;\n}\n\nexport function renderTypeBlock(name: string, fields: string[]): string {\n return `export type ${name} = {\\n${fields.join(\"\\n\")}\\n};`;\n}\n\nexport function renderRefsFieldLines(columns: RenderColumn[]): string[] {\n const refCols = filterRefColumns(columns);\n if (refCols.length === 0) return [\"refs: object;\"];\n return [\n \"refs: {\",\n ...refCols.map((c) => `${getIncludeName(c)}: ${getIncludeType(c)};`),\n \"}\",\n ];\n}\n\nexport function renderUniqueFieldLines(table: {\n columns: RenderColumn[];\n indexes?: RenderIndex[];\n}): string[] {\n const uniqueIndexes = (table.indexes ?? []).filter((i) => i.unique);\n if (uniqueIndexes.length === 0) return [\"unique: [];\"];\n const entries = uniqueIndexes.map((index) => {\n const cols = index.columns.map((colName) => {\n const col = table.columns.find((c) => c.name === colName);\n if (!col) throw new Error(`column ${colName} not found`);\n const nullable = !col.required && index.nullsNotDistinct ? \" | null\" : \"\";\n return `${col.name}:${typeName(col)}${nullable},`;\n });\n return `{ ${cols.join(\"\")} },`;\n });\n return [\"unique: [\", ...entries, \"]\"];\n}\n\n// --- 共通ブロック ---\n\nexport function renderModuleRowTypeBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n return renderTypeBlock(toCodeTypeName(mod.name), [\n \"id: string;\",\n ...mod.columns.map((col) => renderColumnField(col)),\n ]);\n}\n\nexport function renderModuleDescriptorBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(mod.columns),\n \"unique: [];\",\n ]);\n}\n\n// --- セクション ---\n\nexport function renderPreamble(importFrom: string): string {\n return `// This file was automatically generated and should not be edited.\n\nimport { FormValidationRules, StorageItemType } from \"${importFrom}\";\n\n// Utilities\ntype _ModuleRef<T> = T & _ModuleDescriptor;\ntype _ModuleDescriptor = {\n isModule: true;\n};\ntype _ArrayModuleRef<T> = T & _ArrayModuleDescriptor;\ntype _ArrayModuleDescriptor = {\n isModuleArray: true;\n};`;\n}\n\nexport function renderSection(title: string, blocks: string[]): string {\n if (blocks.length === 0) return \"\";\n return `// ${title}\\n${blocks.join(\"\\n\\n\")}`;\n}\n\nexport function renderWebhookTypesSection(tables: { name: string }[]): string {\n const lines: string[] = [\n \"// Webhook types\",\n 'export type WebhookEvent = \"content.create\" | \"content.update\" | \"content.delete\";',\n \"\",\n \"type WebhookPayloadBase = {\",\n \" event: WebhookEvent;\",\n \" timestamp: string;\",\n \" project: string;\",\n \"};\",\n \"\",\n ];\n if (tables.length > 0) {\n const unionMembers = tables\n .map((t) => {\n const name = toCodeTypeName(t.name);\n return `| {\\n table: \"${t.name}\";\\n content: ${name};\\n old?: ${name};\\n}`;\n })\n .join(\"\\n\");\n lines.push(\n `export type WebhookPayload = WebhookPayloadBase & (\\n${unionMembers}\\n);`,\n );\n } else {\n lines.push(\"export type WebhookPayload = WebhookPayloadBase;\");\n }\n return lines.join(\"\\n\");\n}\n","import { Command } from \"commander\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { pullAction } from \"./action.js\";\n\nexport const cmsPullCommand = new Command(\"pull\")\n .description(\"pull orizm schema and generate client and types.\")\n .option(\"-e, --env [path]\", \"env file path.\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n await pullAction({\n destination: options.output,\n envPath: options.env,\n });\n } catch (error) {\n handleError(error);\n }\n });\n","export function assertValidUrlOrigin(origin: string) {\n const url = new URL(origin);\n if (url.origin !== origin) {\n throw new Error(`${origin} is not a valid URL origin`);\n }\n}\n","// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType =\n headers.get instanceof Function\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","import createClient, {\n HeadersOptions,\n createPathBasedClient,\n} from \"openapi-fetch\";\nimport type { paths, components } from \"./generated/dev-v2-api-types\";\nimport { assertValidUrlOrigin } from \"./assert-valid-url-origin\";\n\nexport type { paths, components };\n\ntype DeveloperAPIv2ClientParams = {\n serverOrigin?: string;\n fetch?: typeof fetch;\n headers?: HeadersOptions;\n};\nexport function createDeveloperAPIv2Client({\n serverOrigin = \"\",\n fetch,\n headers,\n}: DeveloperAPIv2ClientParams) {\n if (serverOrigin) assertValidUrlOrigin(serverOrigin);\n\n return createClient<paths>({\n baseUrl: `${serverOrigin}/api/dev/v2`,\n fetch,\n headers,\n });\n}\n\nexport function createPathBasedDeveloperAPIv2Client({\n serverOrigin = \"\",\n fetch,\n headers,\n}: DeveloperAPIv2ClientParams) {\n if (serverOrigin) assertValidUrlOrigin(serverOrigin);\n\n return createPathBasedClient<paths>({\n baseUrl: `${serverOrigin}/api/dev/v2`,\n fetch,\n headers,\n });\n}\n","import { createDeveloperAPIv2Client } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport { ServerProjectDefinition } from \"../types\";\n\nexport async function fetchCurrentDefinition(options: {\n baseUrl: string;\n apiKey: string;\n projectName: string;\n}): Promise<ServerProjectDefinition> {\n const client = createDeveloperAPIv2Client({\n serverOrigin: options.baseUrl,\n headers: {\n \"x-api-key\": options.apiKey,\n },\n });\n\n const abortController = new AbortController();\n const timeout = setTimeout(() => {\n abortController.abort();\n }, 10000);\n\n try {\n const response = await client.GET(\n \"/projects/{projectName}/definitions/current\",\n {\n params: { path: { projectName: options.projectName } },\n signal: abortController.signal,\n },\n );\n if (response.data) {\n return response.data;\n }\n\n if (response.response.status === 404) {\n throw new Error(`Project ${options.projectName} not found.`);\n }\n\n if (response.response.status === 401) {\n throw new Error(`API Key is invalid.`);\n }\n\n throw new Error(\n `Unknown error occurred when fetching definitions for project ${options.projectName}.`,\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(\"Request timed out.\");\n }\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n}\n","import fs from \"fs/promises\";\nimport * as v from \"valibot\";\nimport dotenv from \"dotenv\";\n\nconst DEFAULT_ENV_FILE_PATH = \".env\";\n\nconst EnvSchema = v.object({\n ORIZM_PROJECT: v.pipe(\n v.string(),\n v.minLength(1, \"ORIZM_PROJECT is required\"),\n v.brand(\"ORIZM_PROJECT\"),\n ),\n ORIZM_BASE_URL: v.pipe(\n v.optional(v.string(), \"https://app.orizm.com\"), // if null, use default value\n v.transform((v) => v.replace(/\\/$/, \"\")), // remove trailing slash\n v.brand(\"ORIZM_BASE_URL\"),\n ),\n ORIZM_API_KEY: v.pipe(\n v.string(),\n v.minLength(1, \"ORIZM_API_KEY is required\"),\n v.brand(\"ORIZM_API_KEY\"),\n ),\n});\n\nexport type DevAPIEnv = v.InferOutput<typeof EnvSchema>;\n\nexport async function loadEnv(envPath?: string): Promise<DevAPIEnv> {\n let envFileContent: string | null;\n\n if (envPath) {\n envFileContent = await fs.readFile(envPath, \"utf-8\").catch(() => null);\n\n // envPathが指定されているにもかかわらず、存在しない場合エラーとする\n if (!envFileContent) {\n throw new Error(`Environment variables file: '${envPath}' is not found.`);\n }\n } else {\n envFileContent = await fs\n .readFile(DEFAULT_ENV_FILE_PATH, \"utf-8\")\n .catch(() => null);\n }\n\n if (envFileContent !== null) {\n const dotenvParsed = dotenv.parse(envFileContent);\n const envParseResult = v.safeParse(EnvSchema, dotenvParsed);\n if (!envParseResult.success) {\n throw new Error(\n `Environment variables are not valid.\\n` +\n envParseResult.issues.map((issue) => issue.message).join(\"\\n\"),\n );\n }\n return envParseResult.output;\n }\n\n // デフォルトの.envファイルも存在しない場合は、process.envからの読み込みを試みる\n const processEnvParseResult = v.safeParse(EnvSchema, process.env);\n if (!processEnvParseResult.success) {\n throw new Error(\n \"Environment variables are not valid. Put .env file or set environment variables in process.env.\\n\" +\n processEnvParseResult.issues.map((issue) => issue.message).join(\"\\n\"),\n );\n }\n\n return processEnvParseResult.output;\n}\n","import { createSpinner } from \"../../lib/cli-spinner.js\";\nimport { fetchCurrentDefinition } from \"../../lib/fetch-current-definition.js\";\nimport { loadEnv } from \"../../lib/load-env.js\";\nimport { generate } from \"../generate/generator.js\";\n\nconst spinner = createSpinner();\n\nexport async function pullAction(options: {\n destination: string;\n envPath: string;\n}) {\n spinner.start(\"Loading environment variables...\");\n const env = await loadEnv(options.envPath);\n spinner.succeed(\"Loaded environment variables.\");\n\n spinner.start(\"Loading project config...\");\n const definitionReference = await fetchCurrentDefinition({\n baseUrl: env.ORIZM_BASE_URL,\n apiKey: env.ORIZM_API_KEY,\n projectName: env.ORIZM_PROJECT,\n });\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Generating code...\");\n await generate({\n output: options.destination,\n config: definitionReference.parsed,\n });\n spinner.succeed(`Generated code to '${options.destination}'`);\n}\n","import { Command } from \"commander\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { generateAction } from \"./action.js\";\n\nexport const consumerGenerateCommand = new Command(\"generate\")\n .description(\"generate orizm client and types.\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n await generateAction(options.config, options.output);\n } catch (error) {\n handleError(error);\n }\n });\n","import { mkdir, writeFile } from \"fs/promises\";\nimport path from \"path\";\nimport { CommonOrizmConfig, ServerOrizmConfig } from \"../../types.js\";\nimport { formatTsWithPrettier } from \"../../lib/format-ts-with-prettier\";\nimport {\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderPreamble,\n renderSection,\n renderWebhookTypesSection,\n} from \"../../lib/render-helpers\";\n\nexport type GenerateOption = {\n definition: CommonOrizmConfig | ServerOrizmConfig;\n output: string;\n};\n\nexport async function generate(options: GenerateOption) {\n await mkdir(options.output, { recursive: true });\n const renderedTypes = await renderTypes(options.definition);\n const targetTypesPath = path.join(options.output, \"types.ts\");\n await writeFile(targetTypesPath, renderedTypes, \"utf-8\");\n const renderedClient = await renderClient(options.definition);\n const targetClientPath = path.join(options.output, \"client.ts\");\n await writeFile(targetClientPath, renderedClient, \"utf-8\");\n}\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n};\n\nexport async function renderTypes(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const tables: RenderTable[] = config.tables;\n const modules = config.tableModules ?? [];\n\n const source = [\n renderPreamble(\"@orizm/consumer-sdk/common\"),\n renderSection(\"Tables\", tables.map(renderTableRowType)),\n modules.map(renderModuleRowTypeBlock).join(\"\\n\\n\"),\n renderSection(\"Descriptor types\", [\n ...tables.map(renderTableDescriptor),\n ...modules.map(renderModuleDescriptorBlock),\n ]),\n renderWebhookTypesSection(tables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n return await formatTsWithPrettier(source);\n}\n\nfunction renderTableRowType(table: RenderTable): string {\n return renderTypeBlock(toCodeTypeName(table.name), [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n ...table.columns.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ]);\n}\n\nexport async function renderClient(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.getTableClient<Models.${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n const source = `// This file was automatically generated and should not be edited.\n\nimport { ConsumerClientOptions, OrizmConsumerClientBase } from \"@orizm/consumer-sdk\";\nimport * as Models from \"./types\";\n\nexport class OrizmClient extends OrizmConsumerClientBase {\n constructor(options: ConsumerClientOptions) {\n super(options);\n }\n\n readonly tables = {\n ${tableEntries}\n };\n}\n`;\n\n return await formatTsWithPrettier(source);\n}\n","import { generate } from \"../pull/generate.js\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { createSpinner } from \"../../lib/cli-spinner.js\";\n\nconst spinner = createSpinner();\n\nexport async function generateAction(\n orizmConfigTs: string,\n destination: string,\n) {\n spinner.start(\"Loading project config...\");\n const definition = await loadConfig(orizmConfigTs);\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Generating code...\");\n await generate({\n definition,\n output: destination,\n });\n spinner.succeed(`Generated code to '${destination}'`);\n}\n","import { Command } from \"commander\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { pullAction } from \"./action.js\";\n\nexport const consumerPullCommand = new Command(\"pull\")\n .description(\"pull orizm schema and generate client and types.\")\n .option(\"-e, --env [path]\", \"env file path.\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n await pullAction({\n destination: options.output,\n envPath: options.env,\n });\n } catch (error) {\n handleError(error);\n }\n });\n","import { fetchCurrentDefinition } from \"../../lib/fetch-current-definition.js\";\nimport { loadEnv } from \"../../lib/load-env.js\";\nimport { createSpinner } from \"../../lib/cli-spinner.js\";\nimport { generate } from \"./generate.js\";\n\nconst spinner = createSpinner();\n\nexport async function pullAction(options: {\n destination: string;\n envPath: string;\n}) {\n spinner.start(\"Loading environment variables...\");\n const config = await loadEnv(options.envPath);\n spinner.succeed(\"Loaded environment variables.\");\n\n spinner.start(\"Loading project config...\");\n const definition = await fetchCurrentDefinition({\n baseUrl: config.ORIZM_BASE_URL,\n apiKey: config.ORIZM_API_KEY,\n projectName: config.ORIZM_PROJECT,\n });\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Generating code...\");\n await generate({\n definition: definition.parsed,\n output: options.destination,\n });\n spinner.succeed(`Generated code to '${options.destination}'`);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { createSpinner } from \"../lib/cli-spinner.js\";\nimport { applyDefinition, getChangeEvents } from \"../lib/developer-api.js\";\nimport { displayChangeEvents } from \"../lib/display-change-events.js\";\nimport { handleError } from \"../lib/handle-error.js\";\nimport { input } from \"../lib/cli-input.js\";\nimport { loadConfig } from \"../lib/load-config.js\";\nimport { loadEnv } from \"../lib/load-env.js\";\n\nconst spinner = createSpinner();\n\nexport const pushCommand = new Command(\"push\")\n .description(\"apply schema to project.\")\n .option(\"-e, --env <path>\", \"env file path.\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .option(\"--dry-run\", \"display change-events without applying schema.\", false)\n .option(\"-y, --yes\", \"apply schema without confirmation.\", false)\n .action(\n async (options: {\n env?: string;\n config: string;\n dryRun: boolean;\n yes: boolean;\n }) => {\n try {\n spinner.start(\"Loading environment variables...\");\n const env = await loadEnv(options.env);\n spinner.succeed(\"Loaded environment variables.\");\n\n spinner.start(\"Loading project config...\");\n const projectDef = await loadConfig(options.config);\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Fetch schema change events...\");\n const changeEvents = await getChangeEvents(env, projectDef);\n spinner.succeed(\"Fetch schema change events.\");\n\n await displayChangeEvents(changeEvents);\n\n if (\n changeEvents.tableChangeEvents.length === 0 &&\n changeEvents.bucketChangeEvents.length === 0 &&\n changeEvents.authorityChangeEvents.length === 0\n ) {\n return;\n }\n\n if (options.dryRun) {\n return;\n }\n\n if (!options.yes) {\n const confirm = await input(\"Do you want to apply schema? (y/N): \");\n if (confirm !== \"y\") {\n console.log(chalk.red(\"Canceled.\"));\n return;\n }\n }\n\n spinner.start(\"Applying schema...\");\n await applyDefinition(env, projectDef);\n spinner.succeed(\"Schema applied.\");\n } catch (error) {\n handleError(error);\n }\n },\n );\n","import {\n createDeveloperAPIv2Client,\n components,\n} from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport chalk from \"chalk\";\nimport { DevAPIEnv } from \"./load-env.js\";\n\ntype ProjectDefinitionChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"];\n\nexport async function applyDefinition(\n env: DevAPIEnv,\n projectDef: components[\"schemas\"][\"OrizmConfig\"],\n): Promise<void> {\n const client = createDeveloperAPIv2Client({\n serverOrigin: env.ORIZM_BASE_URL,\n headers: {\n \"x-api-key\": env.ORIZM_API_KEY,\n },\n });\n\n const response = await client.POST(\"/projects/{projectName}/definitions\", {\n params: { path: { projectName: env.ORIZM_PROJECT } },\n body: { definition: projectDef },\n });\n\n if (!response.data) {\n const status = response.response.status;\n\n if (status === 401) {\n throw new Error(\n \"401 Unauthorized. Please check your Developer API key and try again.\",\n );\n }\n\n if (response.error.type === \"bad-request\") {\n console.log(chalk.red(response.error.detail));\n process.exit(1);\n }\n\n throw new Error(\n `${status} ${response.response.statusText}: Unexpected error occurred while applying schema.`,\n );\n }\n}\n\nexport const getChangeEvents = async (\n env: DevAPIEnv,\n projectDef: components[\"schemas\"][\"OrizmConfig\"],\n): Promise<ProjectDefinitionChangeEvent> => {\n const client = createDeveloperAPIv2Client({\n serverOrigin: env.ORIZM_BASE_URL,\n headers: {\n \"x-api-key\": env.ORIZM_API_KEY,\n },\n });\n\n const response = await client.POST(\n \"/projects/{projectName}/definitions/dry-run\",\n {\n params: { path: { projectName: env.ORIZM_PROJECT } },\n body: { definition: projectDef },\n },\n );\n if (!response.data) {\n const status = response.response.status;\n if (status === 401) {\n throw new Error(\n \"401 Unauthorized. Please check your Developer API key and try again.\",\n );\n }\n throw new Error(\n `${status} ${response.response.statusText}: Unexpected error occurred while fetching schema change events.\n ${JSON.stringify(response.error, null, 2)}`,\n );\n }\n return response.data;\n};\n","import chalk from \"chalk\";\nimport { components } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport { CliTable } from \"./cli-table.js\";\n\ntype ProjectDefinitionChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"];\ntype TableChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"][\"tableChangeEvents\"][number];\ntype BucketChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"][\"bucketChangeEvents\"][number];\n\nexport function displayChangeEvents(\n changeEvents: ProjectDefinitionChangeEvent,\n): void {\n const {\n tableChangeEvents = [],\n bucketChangeEvents = [],\n authorityChangeEvents = [],\n } = changeEvents;\n\n if (\n tableChangeEvents.length === 0 &&\n bucketChangeEvents.length === 0 &&\n authorityChangeEvents.length === 0\n ) {\n console.log();\n console.log(chalk.green(\"No changes.\"));\n return;\n }\n\n displayTableChangeEvents(tableChangeEvents);\n displayBucketChangeEvents(bucketChangeEvents);\n displayAuthorityChangeEvents(authorityChangeEvents);\n console.log();\n}\n\nfunction displayTableChangeEvents(tableChangeEvents: TableChangeEvent[]): void {\n if (tableChangeEvents.length === 0) {\n return;\n }\n\n const eventsByTable = new Map<string, TableChangeEvent[]>();\n\n for (const event of tableChangeEvents) {\n const tableName = event.tableDef.name;\n const tableEvents = eventsByTable.get(tableName) ?? [];\n tableEvents.push(event);\n eventsByTable.set(tableName, tableEvents);\n }\n\n for (const [tableName, events] of eventsByTable.entries()) {\n console.log();\n console.log(`⚫︎Table: ${tableName}`);\n\n const table = new CliTable([\"Type\", \"Name\", \"Event\", \"Detail\"]);\n\n for (const event of events) {\n const eventName = event.event;\n\n switch (eventName) {\n case \"table:create\":\n case \"table:update\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"table:delete\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"column:create\":\n case \"column:update\": {\n table.addRow(\n [\n \"column\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n { color: \"green\" },\n );\n break;\n }\n case \"column:delete\": {\n table.addRow(\n [\n \"column\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n {\n color: \"red\",\n },\n );\n break;\n }\n case \"index:create\":\n case \"index:update\": {\n table.addRow(\n [\n \"index\",\n event.indexDef.columns.join(\", \"),\n eventName,\n JSON.stringify(event.indexDef),\n ],\n { color: \"green\" },\n );\n break;\n }\n case \"index:delete\": {\n table.addRow(\n [\n \"index\",\n event.indexDef.columns.join(\", \"),\n eventName,\n JSON.stringify(event.indexDef),\n ],\n { color: \"red\" },\n );\n break;\n }\n case \"module:create\":\n case \"module:update\": {\n table.addRow(\n [\n \"module\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n {\n color: \"green\",\n },\n );\n break;\n }\n case \"module:delete\": {\n table.addRow(\n [\n \"module\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n {\n color: \"red\",\n },\n );\n break;\n }\n case \"search:enable\":\n case \"search:update\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"search:disable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"history:enable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"history:disable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"draft:enable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"draft:disable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"formSubmissions:create\":\n case \"formSubmissions:update\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"formSubmissions:delete\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n }\n }\n\n table.print();\n }\n}\n\nfunction displayBucketChangeEvents(\n bucketChangeEvents: ProjectDefinitionChangeEvent[\"bucketChangeEvents\"],\n): void {\n if (bucketChangeEvents.length === 0) {\n return;\n }\n\n const eventsByBucket = new Map<string, BucketChangeEvent[]>();\n\n for (const event of bucketChangeEvents) {\n const bucketName = event.bucketDef.name;\n const bucketEvents = eventsByBucket.get(bucketName) ?? [];\n bucketEvents.push(event);\n eventsByBucket.set(bucketName, bucketEvents);\n }\n\n const table = new CliTable([\"Type\", \"Name\", \"Event\", \"Detail\"]);\n\n console.log();\n console.log(\"⚫︎Buckets\");\n\n for (const [_, events] of eventsByBucket.entries()) {\n for (const event of events) {\n const eventName = event.event;\n\n switch (eventName) {\n case \"bucket:create\":\n case \"bucket:update\": {\n table.addRow(\n [\n \"bucket\",\n event.bucketDef.name,\n eventName,\n JSON.stringify(event.bucketDef),\n ],\n {\n color: \"green\",\n },\n );\n break;\n }\n case \"bucket:delete\": {\n table.addRow(\n [\n \"bucket\",\n event.bucketDef.name,\n eventName,\n JSON.stringify(event.bucketDef),\n ],\n {\n color: \"red\",\n },\n );\n break;\n }\n }\n }\n }\n\n table.print();\n}\n\nfunction displayAuthorityChangeEvents(\n authorityChangeEvents: ProjectDefinitionChangeEvent[\"authorityChangeEvents\"],\n): void {\n if (authorityChangeEvents.length === 0) {\n return;\n }\n\n const table = new CliTable([\"Type\", \"Event\", \"Detail\"]);\n\n console.log();\n console.log(\"⚫︎Authorities\");\n\n for (const event of authorityChangeEvents) {\n const eventName = event.event;\n\n switch (eventName) {\n case \"authority:update\": {\n table.addRow(\n [\"authority\", eventName, JSON.stringify(event.authorityDef)],\n { color: \"green\" },\n );\n break;\n }\n }\n }\n\n table.print();\n}\n","// generated by vscode copilot gpt-4o\n\n// ANSIカラーコード\nconst COLORS: { [key: string]: string } = {\n reset: \"\\x1b[0m\",\n green: \"\\x1b[32m\",\n red: \"\\x1b[31m\",\n};\n\nexport class CliTable {\n private headers: string[] = [];\n private rows: string[][] = [];\n private columnWidths: number[] = [];\n private rowColors: (string | null)[] = []; // 各行の色を保持する配列\n\n constructor(headers: string[]) {\n this.headers = headers;\n this.updateColumnWidths(headers);\n }\n\n // データ行を追加\n public addRow(row: string[], options?: { color?: \"green\" | \"red\" }): void {\n if (row.length !== this.headers.length) {\n throw new Error(\n `The length of the row (${row.length}) does not match the length of the header (${this.headers.length})`,\n );\n }\n this.rows.push(row);\n\n // オプションで色が指定されている場合は設定\n if (options?.color) {\n this.rowColors.push(COLORS[options.color]);\n } else {\n this.rowColors.push(null); // 色指定なし\n }\n\n this.updateColumnWidths(row);\n }\n\n // 列幅を更新\n private updateColumnWidths(row: string[]): void {\n for (let i = 0; i < row.length; i++) {\n const cellLength = row[i].length;\n if (this.columnWidths[i] == null || cellLength > this.columnWidths[i]) {\n this.columnWidths[i] = cellLength;\n }\n }\n }\n\n // 水平線を生成\n private createHorizontalLine(position: \"top\" | \"middle\" | \"bottom\"): string {\n let line = \"\";\n\n // 左端の文字を決定\n if (position === \"top\") line += \"┌\";\n else if (position === \"middle\") line += \"├\";\n else if (position === \"bottom\") line += \"└\";\n\n // 各列の横線\n for (let i = 0; i < this.columnWidths.length; i++) {\n line += \"─\".repeat(this.columnWidths[i] + 2);\n\n // 右端または列の交差点の文字を決定\n if (i < this.columnWidths.length - 1) {\n if (position === \"top\") line += \"┬\";\n else if (position === \"middle\") line += \"┼\";\n else if (position === \"bottom\") line += \"┴\";\n } else {\n if (position === \"top\") line += \"┐\";\n else if (position === \"middle\") line += \"┤\";\n else if (position === \"bottom\") line += \"┘\";\n }\n }\n\n return line;\n }\n\n // 行を整形\n private formatRow(row: string[], color: string | null): string {\n let formattedRow = \"│\";\n for (let i = 0; i < row.length; i++) {\n const cell = row[i];\n const padding = \" \".repeat(this.columnWidths[i] - cell.length);\n if (color) {\n formattedRow += ` ${color}${cell}${COLORS.reset}${padding} │`;\n } else {\n formattedRow += ` ${cell}${padding} │`;\n }\n }\n return formattedRow;\n }\n\n // テーブルを文字列として取得\n public toString(): string {\n if (this.headers.length === 0) {\n return \"\";\n }\n\n const topLine = this.createHorizontalLine(\"top\");\n const middleLine = this.createHorizontalLine(\"middle\");\n const bottomLine = this.createHorizontalLine(\"bottom\");\n\n let table = topLine + \"\\n\";\n\n // ヘッダー行\n table += this.formatRow(this.headers, null) + \"\\n\";\n table += middleLine + \"\\n\";\n\n // データ行\n for (let i = 0; i < this.rows.length; i++) {\n const color = this.rowColors[i] || null;\n table += this.formatRow(this.rows[i], color) + \"\\n\";\n }\n\n table += bottomLine;\n return table;\n }\n\n // テーブルを出力\n public print(): void {\n console.log(this.toString());\n }\n}\n","import { createInterface } from \"node:readline/promises\";\n\nexport async function input(prompt: string): Promise<string> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const input = await rl.question(prompt).finally(() => {\n rl.close();\n });\n\n return input.trim();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport * as v from \"valibot\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { displayValibotError } from \"../../lib/display-valibot-error.js\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { watchConfigFile } from \"./watcher.js\";\n\nexport const validateConfigCommand = new Command(\"validate\")\n .description(\"validate orizm.config.ts for validation errors\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"./orizm.config.ts\")\n .option(\"-w, --watch\", \"Watch for file changes and re-validate\")\n .action(async (options: { config: string; watch?: boolean }) => {\n try {\n const validateConfig = async () => {\n try {\n if (options.watch) {\n console.clear();\n\n console.log(\n `👀 Watching ${options.config} for changes... (Press Ctrl+C to stop)`,\n );\n console.log();\n }\n\n await loadConfig(options.config);\n console.log(chalk.green(\"✅ Config is valid.\"));\n } catch (error) {\n if (v.isValiError(error)) {\n console.error(chalk.red(\"❌ Config validation failed:\"));\n displayValibotError(error);\n return;\n }\n throw error;\n }\n };\n\n await validateConfig();\n\n if (options.watch) {\n watchConfigFile(options.config, validateConfig);\n }\n } catch (error) {\n handleError(error);\n }\n });\n","import chokidar from \"chokidar\";\nimport { handleError } from \"../../lib/handle-error\";\n\nexport function watchConfigFile(\n configPath: string,\n onFileChange: () => Promise<void>,\n) {\n const watcher = chokidar.watch(configPath, {\n persistent: true,\n ignoreInitial: true,\n });\n\n let isProcessing = false;\n let timeoutId: NodeJS.Timeout | null = null;\n\n const debouncedOnChange = () => {\n if (isProcessing) return;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(async () => {\n isProcessing = true;\n\n try {\n await onFileChange();\n } catch (error) {\n handleError(error);\n } finally {\n isProcessing = false;\n }\n }, 300); // 300ms debounce\n };\n watcher.on(\"change\", debouncedOnChange);\n watcher.on(\"add\", debouncedOnChange);\n watcher.on(\"unlink\", debouncedOnChange);\n\n const terminate = () => {\n watcher.close();\n process.exit(0);\n };\n process.on(\"SIGINT\", terminate);\n process.on(\"SIGTERM\", terminate);\n\n watcher.on(\"error\", (error) => {\n handleError(error);\n });\n\n return watcher;\n}\n","import { Command } from \"commander\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { generate } from \"./generate.js\";\nimport { convertToInput } from \"./convert-to-input.js\";\n\nexport const generateErdCommand = new Command(\"generate-erd\")\n .description(\"generate er diagram in mermaid format from orizm.config.ts\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .action(async (options) => {\n try {\n const config = await loadConfig(options.config);\n const input = convertToInput(config);\n const mermaidText = generate(input);\n\n console.log(mermaidText);\n } catch (error) {\n handleError(error);\n }\n });\n","import { TemplateInput } from \"./convert-to-input.js\";\n\nexport function generate(input: TemplateInput): string {\n const tables = input.tables\n .map((table) => {\n const columns = [\n \" id string PK\",\n ...table.columns.map(\n (col) =>\n ` ${col.name} ${col.type}${col.isForeignKey ? \" FK\" : \"\"}`,\n ),\n ].join(\"\\n\");\n return ` ${table.name} {\\n${columns}\\n }`;\n })\n .join(\"\\n\");\n\n const relations = input.relations\n .map((rel) => ` ${rel.from} ${rel.type} ${rel.to} : ${rel.comment}`)\n .join(\"\\n\");\n\n return `generated by @orizm/cli\n\n\\`\\`\\`mermaid\nerDiagram\n${tables}\n\n${relations}\n\\`\\`\\``;\n}\n","import { ServerOrizmConfig } from \"../../types\";\n\nexport type TemplateInput = {\n tables: TableInput[];\n relations: RelationInput[];\n};\n\ntype TableInput = {\n name: string;\n columns: ColumnInput[];\n};\n\ntype ColumnInput = {\n name: string;\n type: string;\n isForeignKey: boolean;\n};\n\ntype RelationInput = {\n from: string;\n to: string;\n type: string;\n comment: string;\n};\n\nexport function convertToInput(config: ServerOrizmConfig): TemplateInput {\n const tables: TableInput[] = [];\n const relations: RelationInput[] = [];\n\n for (const table of config.tables) {\n const modules: TableInput[] = [];\n\n const erdTable: TableInput = {\n name: table.name,\n columns: [],\n };\n\n for (const column of table.columns) {\n erdTable.columns.push({\n name: column.name,\n type: column.type,\n isForeignKey: column.type === \"reference\",\n });\n\n if (column.type === \"reference\") {\n relations.push({\n from: column.tableName,\n to: table.name,\n type: RELATION.ONE_TO_MANY,\n comment: \"reference\",\n });\n }\n\n if (column.type === \"module\" || column.type === \"module-array\") {\n const module = config.tableModules?.find(\n (m) => m.name === column.moduleName,\n );\n\n if (!module) {\n continue;\n }\n\n const moduleTableName = `${table.name}_${column.name}_${column.moduleName}`;\n\n modules.push({\n name: moduleTableName,\n columns: module.columns.map((c) => ({\n name: c.name,\n type: c.type,\n isForeignKey: c.type === \"reference\",\n })),\n });\n\n relations.push({\n from: table.name,\n to: moduleTableName,\n type:\n column.type === \"module\"\n ? RELATION.ONE_TO_ONE\n : RELATION.ONE_TO_MANY,\n comment: column.type === \"module\" ? \"module\" : \"module-array\",\n });\n\n for (const moduleColumn of module.columns) {\n if (moduleColumn.type === \"reference\" && moduleColumn.tableName) {\n relations.push({\n from: moduleTableName,\n to: moduleColumn.tableName,\n type: RELATION.ONE_TO_MANY,\n comment: \"reference\",\n });\n }\n }\n }\n }\n\n tables.push(erdTable);\n tables.push(...modules);\n }\n\n return {\n tables,\n relations,\n };\n}\n\nconst RELATION = {\n ONE_TO_MANY: \"||--o{\",\n ONE_TO_ONE: \"||--||\",\n} as const;\n"],"mappings":"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","names":["import_commander","esbuild","chalk","readline","v","import_chalk","v","import_chalk","error","path","chalk","error","chalk","prettierPluginEstree","prettierPluginTypeScript","optional","path","error","import_commander","error","final","joiner","v","v2","error","import_promises","v","fs","dotenv","spinner","error","import_commander","import_promises","import_path","generate","renderTypes","path","renderClient","renderTableDescriptor","spinner","generate","error","import_commander","spinner","pullAction","generate","pullAction","error","import_commander","import_chalk","import_chalk","chalk","import_chalk","chalk","import_promises","input","spinner","chalk","error","import_commander","import_chalk","v","chokidar","error","chalk","error","import_commander","generate","input","module","input","generate","error"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/cms/generate/command.ts","../src/lib/load-config.ts","../src/lib/cli-spinner.ts","../src/lib/cli-symbol.ts","../src/lib/cli-cursor.ts","../src/lib/handle-error.ts","../src/lib/display-valibot-error.ts","../src/cms/generate/generator.ts","../src/lib/format-ts-with-prettier.ts","../src/lib/render-helpers.ts","../src/cms/pull/command.ts","../../../node_modules/.pnpm/openapi-fetch@0.17.0/node_modules/openapi-fetch/src/index.js","../../internal-shared/src/api-clients/assert-valid-url-origin.ts","../../internal-shared/src/api-clients/dev-v2-api-client.ts","../src/lib/fetch-current-definition.ts","../src/lib/load-env.ts","../src/cms/pull/action.ts","../src/consumer/generate/command.ts","../src/consumer/pull/generate.ts","../src/consumer/generate/action.ts","../src/consumer/pull/command.ts","../src/consumer/pull/action.ts","../src/push/command.ts","../src/lib/developer-api.ts","../src/lib/display-change-events.ts","../src/lib/cli-table.ts","../src/lib/cli-input.ts","../src/config/validate/command.ts","../src/config/validate/watcher.ts","../src/config/generate-erd/command.ts","../src/config/generate-erd/generate.ts","../src/config/generate-erd/convert-to-input.ts"],"sourcesContent":["import { Command, program } from \"commander\";\nimport { cmsGenerateCommand } from \"./cms/generate/command.js\";\nimport { cmsPullCommand } from \"./cms/pull/command.js\";\nimport { consumerGenerateCommand } from \"./consumer/generate/command.js\";\nimport { consumerPullCommand } from \"./consumer/pull/command.js\";\nimport { pushCommand } from \"./push/command.js\";\nimport { validateConfigCommand } from \"./config/validate/command.js\";\nimport { generateErdCommand } from \"./config/generate-erd/command.js\";\n\nprogram.name(\"orizm CLI\");\n\nprogram.addCommand(pushCommand);\n\nconst cmsCommands = new Command(\"cms\").description(\"cms commands.\");\n\ncmsCommands.addCommand(cmsGenerateCommand);\ncmsCommands.addCommand(cmsPullCommand);\nprogram.addCommand(cmsCommands);\n\nconst consumerCommands = new Command(\"consumer\").description(\n \"consumer commands.\",\n);\n\nconsumerCommands.addCommand(consumerGenerateCommand);\nconsumerCommands.addCommand(consumerPullCommand);\nprogram.addCommand(consumerCommands);\n\nconst configCommands = new Command(\"config\").description(\"config commands.\");\n\nconfigCommands.addCommand(validateConfigCommand);\nconfigCommands.addCommand(generateErdCommand);\nprogram.addCommand(configCommands);\n\nprogram.parse();\n","import { Command } from \"commander\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { createSpinner } from \"../../lib/cli-spinner.js\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { generate as generateCode } from \"./generator.js\";\n\nconst spinner = createSpinner();\n\nexport const cmsGenerateCommand = new Command(\"generate\")\n .description(\"generate orizm client and types.\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n spinner.start(\"Loading project schema...\");\n const config = await loadConfig(options.config);\n spinner.succeed(\"Loaded project schema.\");\n\n spinner.start(\"Generating code...\");\n await generateCode({\n config,\n output: options.output,\n });\n spinner.succeed(`Generated code to '${options.output}'`);\n } catch (error) {\n handleError(error);\n }\n });\n","import esbuild from \"esbuild\";\nimport { OrizmConfigDef } from \"@orizm/common/config-validator\";\nimport * as v from \"valibot\";\nimport { CommonOrizmConfig } from \"../types.js\";\n\nexport async function loadConfig(\n configFile: string,\n): Promise<CommonOrizmConfig> {\n const buildResult = await esbuild.build({\n entryPoints: [configFile],\n bundle: true,\n write: false,\n format: \"esm\",\n target: \"node22\",\n platform: \"node\",\n });\n\n const moduleURL = `data:text/javascript,${encodeURIComponent(\n buildResult.outputFiles[0].text,\n )}`;\n\n const { default: orizmConfigRaw } = await import(moduleURL);\n\n return v.parse(OrizmConfigDef, orizmConfigRaw);\n}\n","import readline from \"readline\";\nimport * as symbol from \"./cli-symbol.js\";\nimport * as cursor from \"./cli-cursor.js\";\n\nconst FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nconst FRAME_INTERVAL = 80;\n\nclass Spinner {\n private text: string = \"\";\n private currentFrame: number = 0;\n private timer: NodeJS.Timeout | null = null;\n private isSpinning: boolean = false;\n\n start(text?: string): Spinner {\n if (text) {\n this.text = text;\n }\n\n if (this.isSpinning) {\n return this;\n }\n\n this.isSpinning = true;\n this.currentFrame = 0;\n\n cursor.hide();\n\n this.render();\n this.timer = setInterval(() => {\n this.render();\n }, FRAME_INTERVAL);\n\n return this;\n }\n\n stop(): Spinner {\n if (!this.isSpinning) {\n return this;\n }\n\n this.isSpinning = false;\n\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n readline.clearLine(process.stdout, 0);\n readline.cursorTo(process.stdout, 0);\n\n cursor.show();\n\n return this;\n }\n\n succeed(text?: string): void {\n this.stop();\n const finalText = text || this.text;\n console.log(`${symbol.success} ${finalText}`);\n }\n\n private render(): void {\n const frame = FRAMES[this.currentFrame];\n this.currentFrame = (this.currentFrame + 1) % FRAMES.length;\n\n readline.clearLine(process.stdout, 0);\n readline.cursorTo(process.stdout, 0);\n\n process.stdout.write(`${frame} ${this.text}`);\n }\n}\n\nexport function createSpinner(): Spinner {\n return new Spinner();\n}\n","import chalk from \"chalk\";\n\nexport const success = chalk.green(\"✓\");\nexport const error = chalk.red(\"✗\");\n","export function hide(): void {\n process.stdout.write(\"\\u001B[?25l\");\n}\n\nexport function show(): void {\n process.stdout.write(\"\\u001B[?25h\");\n}\n","import * as v from \"valibot\";\nimport chalk from \"chalk\";\nimport * as cursor from \"./cli-cursor.js\";\nimport { displayValibotError } from \"./display-valibot-error.js\";\n\nexport function handleError(error: unknown): void {\n cursor.show();\n\n if (v.isValiError(error)) {\n console.error();\n displayValibotError(error);\n console.error();\n\n process.exit(1);\n }\n\n console.error();\n console.error(\n chalk.red(\n \"Something went wrong. Please check the error below for more details.\",\n ),\n );\n console.error();\n console.error(error);\n console.error();\n\n process.exit(1);\n}\n","import * as v from \"valibot\";\nimport chalk from \"chalk\";\n\nexport function displayValibotError(error: unknown): void {\n if (!v.isValiError(error)) {\n return;\n }\n\n console.error(`Error: ${error.issues.length} problem(s) found.`);\n console.error(buildValiErrorMessage(error));\n}\n\nexport function buildValiErrorMessage(\n e: v.ValiError<v.GenericSchema | v.GenericSchemaAsync>,\n options?: { color?: boolean },\n): string {\n const { color = true } = options ?? {};\n\n return e.issues\n .map((issue) => {\n const path = getPath(issue);\n return ` ${getIssueMessage(issue.message, color)} (at ${getLocationPath(path, color)})`;\n })\n .join(\"\\n\");\n}\n\nfunction getIssueMessage(message: string, color: boolean): string {\n return color ? chalk.red(message) : message;\n}\n\nfunction getLocationPath(path: string, color: boolean): string {\n return color ? chalk.yellow(path) : path;\n}\n\nfunction getPath(issue: v.BaseIssue<unknown>): string {\n const issueDotPath = v.getDotPath(issue);\n const pathInfo = issue.path;\n if (!issueDotPath || !pathInfo) {\n return \"\";\n }\n\n const pathParts = issueDotPath.split(\".\");\n\n // pathInfoの要素を順番に処理して、pathの位置に対応するname値を探す\n let pathInfoIndex = 0;\n\n for (let i = 0; i < pathParts.length; i++) {\n const part = pathParts[i];\n\n if (!isNumberIndex(part)) {\n continue;\n }\n\n const index = parseInt(part);\n\n // pathInfo から該当するインデックスの情報を取得\n // pathInfoIndex以降で、type=arrayかつkey=indexの要素を探す\n for (let j = pathInfoIndex; j < pathInfo.length; j++) {\n const pathItem = pathInfo[j];\n if (pathItem.type === \"array\" && pathItem.key === index) {\n if (\n pathItem.value != null &&\n typeof pathItem.value === \"object\" &&\n \"name\" in pathItem.value\n ) {\n pathParts[i] = String(pathItem.value.name);\n pathInfoIndex = j + 1;\n break;\n }\n }\n }\n }\n\n return pathParts.join(\".\");\n}\n\nfunction isNumberIndex(part: string): boolean {\n return /^\\d+$/.test(part);\n}\n","import { mkdir, writeFile } from \"fs/promises\";\nimport path from \"path\";\nimport { CommonOrizmConfig, ServerOrizmConfig } from \"../../types.js\";\nimport { formatTsWithPrettier } from \"../../lib/format-ts-with-prettier\";\nimport {\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderPreamble,\n renderSection,\n renderWebhookTypesSection,\n} from \"../../lib/render-helpers\";\n\ntype GenerateOptions = {\n config: CommonOrizmConfig | ServerOrizmConfig;\n output: string;\n};\n\nexport async function generate(options: GenerateOptions) {\n const config = options.config;\n\n await mkdir(options.output, { recursive: true });\n const renderedTypes = await renderTypes(config);\n await writeFile(\n path.join(options.output, \"types.ts\"),\n renderedTypes,\n \"utf-8\",\n );\n const renderedClient = await renderClient(config);\n await writeFile(\n path.join(options.output, \"client.ts\"),\n renderedClient,\n \"utf-8\",\n );\n}\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n isSubmissions?: boolean;\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n formOptions?: { submissionColumns?: RenderColumn[] };\n};\n\nexport async function renderTypes(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const submissionTables: RenderTable[] = config.tables\n .filter((t) => t.enableForm)\n .map((t) => ({\n name: t.name + \"__submission\",\n columns: t.formOptions?.submissionColumns ?? [],\n isSubmissions: true,\n }));\n const allTables: RenderTable[] = [...config.tables, ...submissionTables];\n const modules = config.tableModules ?? [];\n\n const source = [\n renderPreamble(\"@orizm/cms-sdk/common\"),\n renderSection(\"Tables\", allTables.map(renderTableTypes)),\n renderSection(\"Module types\", modules.map(renderModuleTypes)),\n // CMS: モジュール descriptor 間は空行なし(スナップショット互換)\n \"// Descriptor types\\n\" +\n [\n ...allTables.map(renderTableDescriptor),\n modules.map(renderModuleDescriptorBlock).join(\"\\n\"),\n ].join(\"\\n\\n\"),\n renderWebhookTypesSection(allTables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n return await formatTsWithPrettier(source);\n}\n\nfunction renderTableTypes(table: RenderTable): string {\n const cols = table.columns;\n const name = toCodeTypeName(table.name);\n\n const rowType = renderTypeBlock(name, [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n ...(!table.isSubmissions\n ? [\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n \"scheduledPublishAt: string | null;\",\n \"scheduledUnpublishAt: string | null;\",\n ]\n : [\n \"_formId: string;\",\n \"_content: unknown;\",\n \"_formSchema: unknown;\",\n \"_attachments: StorageItemType[];\",\n ]),\n ...cols.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...(!table.isSubmissions\n ? [\n \"group?: string | null;\",\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n ...cols\n .filter((col) => !col.readOnly)\n .map((col) =>\n renderColumnField(col, { optional: true, suffix: \"UpdateInput\" }),\n ),\n ...(!table.isSubmissions\n ? [\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderModuleTypes(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n const cols = mod.columns;\n\n const rowType = renderModuleRowTypeBlock(mod);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n \"id?: string;\",\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"UpdateInput\",\n }),\n ),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n `create: ${name}CreateInput;`,\n `update: ${name}UpdateInput;`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ...(table.enableForm\n ? [`submissionDescriptor: ${name}_Submission__Descriptor;`]\n : [\"submissionDescriptor: never;\"]),\n ]);\n}\n\nexport async function renderClient(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.client.getTableClient<Models.${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n const bucketEntries = (config.buckets ?? [])\n .map((b) => `${b.name}: this.client.getBucketClient(\"${b.name}\"),`)\n .join(\"\\n\");\n\n const source = `// This file was automatically generated and should not be edited.\n\nimport { OrizmCMSClient } from \"@orizm/cms-sdk\";\n\nimport * as Models from \"./types\";\n\nexport class CMSClient {\n constructor(protected client: OrizmCMSClient) {\n this.tables = {\n ${tableEntries}\n };\n\n this.buckets = {\n ${bucketEntries}\n };\n\n this.userManagement = this.client.userManagement;\n\n this.userinfo = this.client.userinfo;\n\n this.auth = this.client.auth;\n }\n\n readonly tables;\n readonly buckets;\n readonly userManagement;\n readonly userinfo;\n readonly auth;\n}\n`;\n\n return await formatTsWithPrettier(source);\n}\n","import * as prettier from \"prettier/standalone\";\nimport prettierPluginEstree from \"prettier/plugins/estree.js\";\nimport prettierPluginTypeScript from \"prettier/plugins/typescript.js\";\n\nexport function formatTsWithPrettier(code: string) {\n return prettier.format(code, {\n parser: \"typescript\",\n plugins: [prettierPluginEstree, prettierPluginTypeScript],\n });\n}\n","/**\n * レンダリング用のカラム型。\n * CommonOrizmConfig と ServerOrizmConfig の両方のカラム型を受け付けるために、\n * 必要なプロパティだけを定義している。\n */\nexport type RenderColumn = {\n name: string;\n type: string;\n required?: boolean;\n readOnly?: boolean;\n moduleName?: string;\n tableName?: string;\n includeName?: string;\n};\n\nexport type RenderIndex = {\n columns: string[];\n unique?: boolean;\n nullsNotDistinct?: boolean;\n};\n\n// --- 名前変換 ---\n\nexport function toCodeTypeName(str: string): string {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n return str.replace(/_([a-z])/g, (g) => g[1].toUpperCase());\n}\n\nexport function typeName(column: RenderColumn, moduleSuffix = \"\"): string {\n switch (column.type) {\n case \"reference\":\n return \"string\";\n case \"module\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix;\n case \"module-array\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix + \"[]\";\n case \"json\":\n return \"unknown\";\n case \"storage\":\n return \"StorageItemType\";\n default:\n return column.type;\n }\n}\n\nexport function nullableSuffix(column: RenderColumn): string {\n return !column.required && column.type !== \"module-array\" ? \" | null\" : \"\";\n}\n\n// --- 参照カラム ---\n\nexport function filterRefColumns(columns: RenderColumn[]): RenderColumn[] {\n return columns.filter(\n (c) =>\n (c.type === \"reference\" &&\n c.tableName !== undefined &&\n c.includeName !== undefined &&\n c.includeName !== \"\") ||\n (c.type === \"module\" && c.moduleName !== undefined) ||\n (c.type === \"module-array\" && c.moduleName !== undefined),\n );\n}\n\nexport function getIncludeName(column: RenderColumn): string {\n return column.type === \"reference\"\n ? column.includeName || column.name\n : column.name;\n}\n\nexport function getIncludeType(column: RenderColumn): string {\n if (column.type === \"reference\" && column.tableName) {\n return toCodeTypeName(column.tableName) + \"__Descriptor\";\n }\n if (column.type === \"module\" && column.moduleName) {\n return `_ModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n if (column.type === \"module-array\" && column.moduleName) {\n return `_ArrayModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n return \"\";\n}\n\n// --- フィールド・型ブロック ---\n\nexport function renderColumnField(\n col: RenderColumn,\n options?: { optional?: boolean; suffix?: string },\n): string {\n const optional = options?.optional === true ? \"?\" : \"\";\n const suffix = options?.suffix ?? \"\";\n return `${col.name}${optional}: ${typeName(col, suffix)}${nullableSuffix(col)};`;\n}\n\nexport function renderTypeBlock(name: string, fields: string[]): string {\n return `export type ${name} = {\\n${fields.join(\"\\n\")}\\n};`;\n}\n\nexport function renderRefsFieldLines(columns: RenderColumn[]): string[] {\n const refCols = filterRefColumns(columns);\n if (refCols.length === 0) return [\"refs: object;\"];\n return [\n \"refs: {\",\n ...refCols.map((c) => `${getIncludeName(c)}: ${getIncludeType(c)};`),\n \"}\",\n ];\n}\n\nexport function renderUniqueFieldLines(table: {\n columns: RenderColumn[];\n indexes?: RenderIndex[];\n}): string[] {\n const uniqueIndexes = (table.indexes ?? []).filter((i) => i.unique);\n if (uniqueIndexes.length === 0) return [\"unique: [];\"];\n const entries = uniqueIndexes.map((index) => {\n const cols = index.columns.map((colName) => {\n const col = table.columns.find((c) => c.name === colName);\n if (!col) throw new Error(`column ${colName} not found`);\n const nullable = !col.required && index.nullsNotDistinct ? \" | null\" : \"\";\n return `${col.name}:${typeName(col)}${nullable},`;\n });\n return `{ ${cols.join(\"\")} },`;\n });\n return [\"unique: [\", ...entries, \"]\"];\n}\n\n// --- 共通ブロック ---\n\nexport function renderModuleRowTypeBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n return renderTypeBlock(toCodeTypeName(mod.name), [\n \"id: string;\",\n ...mod.columns.map((col) => renderColumnField(col)),\n ]);\n}\n\nexport function renderModuleDescriptorBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(mod.columns),\n \"unique: [];\",\n ]);\n}\n\n// --- セクション ---\n\nexport function renderPreamble(importFrom: string): string {\n return `// This file was automatically generated and should not be edited.\n\nimport { FormValidationRules, StorageItemType } from \"${importFrom}\";\n\n// Utilities\ntype _ModuleRef<T> = T & _ModuleDescriptor;\ntype _ModuleDescriptor = {\n isModule: true;\n};\ntype _ArrayModuleRef<T> = T & _ArrayModuleDescriptor;\ntype _ArrayModuleDescriptor = {\n isModuleArray: true;\n};`;\n}\n\nexport function renderSection(title: string, blocks: string[]): string {\n if (blocks.length === 0) return \"\";\n return `// ${title}\\n${blocks.join(\"\\n\\n\")}`;\n}\n\nexport function renderWebhookTypesSection(tables: { name: string }[]): string {\n const lines: string[] = [\n \"// Webhook types\",\n 'export type WebhookEvent = \"content.create\" | \"content.update\" | \"content.delete\";',\n \"\",\n \"type WebhookPayloadBase = {\",\n \" event: WebhookEvent;\",\n \" timestamp: string;\",\n \" project: string;\",\n \"};\",\n \"\",\n ];\n if (tables.length > 0) {\n const unionMembers = tables\n .map((t) => {\n const name = toCodeTypeName(t.name);\n return `| {\\n table: \"${t.name}\";\\n content: ${name};\\n old?: ${name};\\n}`;\n })\n .join(\"\\n\");\n lines.push(\n `export type WebhookPayload = WebhookPayloadBase & (\\n${unionMembers}\\n);`,\n );\n } else {\n lines.push(\"export type WebhookPayload = WebhookPayloadBase;\");\n }\n return lines.join(\"\\n\");\n}\n","import { Command } from \"commander\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { pullAction } from \"./action.js\";\n\nexport const cmsPullCommand = new Command(\"pull\")\n .description(\"pull orizm schema and generate client and types.\")\n .option(\"-e, --env [path]\", \"env file path.\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n await pullAction({\n destination: options.output,\n envPath: options.env,\n });\n } catch (error) {\n handleError(error);\n }\n });\n","// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType =\n headers.get instanceof Function\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","export function assertValidUrlOrigin(origin: string) {\n const url = new URL(origin);\n if (url.origin !== origin) {\n throw new Error(`${origin} is not a valid URL origin`);\n }\n}\n","import createClient, {\n HeadersOptions,\n createPathBasedClient,\n} from \"openapi-fetch\";\nimport type { paths, components } from \"./generated/dev-v2-api-types\";\nimport { assertValidUrlOrigin } from \"./assert-valid-url-origin\";\n\nexport type { paths, components };\n\ntype DeveloperAPIv2ClientParams = {\n serverOrigin?: string;\n fetch?: typeof fetch;\n headers?: HeadersOptions;\n};\nexport function createDeveloperAPIv2Client({\n serverOrigin = \"\",\n fetch,\n headers,\n}: DeveloperAPIv2ClientParams) {\n if (serverOrigin) assertValidUrlOrigin(serverOrigin);\n\n return createClient<paths>({\n baseUrl: `${serverOrigin}/api/dev/v2`,\n fetch,\n headers,\n });\n}\n\nexport function createPathBasedDeveloperAPIv2Client({\n serverOrigin = \"\",\n fetch,\n headers,\n}: DeveloperAPIv2ClientParams) {\n if (serverOrigin) assertValidUrlOrigin(serverOrigin);\n\n return createPathBasedClient<paths>({\n baseUrl: `${serverOrigin}/api/dev/v2`,\n fetch,\n headers,\n });\n}\n","import { createDeveloperAPIv2Client } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport { ServerProjectDefinition } from \"../types\";\n\nexport async function fetchCurrentDefinition(options: {\n baseUrl: string;\n apiKey: string;\n projectName: string;\n}): Promise<ServerProjectDefinition> {\n const client = createDeveloperAPIv2Client({\n serverOrigin: options.baseUrl,\n headers: {\n \"x-api-key\": options.apiKey,\n },\n });\n\n const abortController = new AbortController();\n const timeout = setTimeout(() => {\n abortController.abort();\n }, 10000);\n\n try {\n const response = await client.GET(\n \"/projects/{projectName}/definitions/current\",\n {\n params: { path: { projectName: options.projectName } },\n signal: abortController.signal,\n },\n );\n if (response.data) {\n return response.data;\n }\n\n if (response.response.status === 404) {\n throw new Error(`Project ${options.projectName} not found.`);\n }\n\n if (response.response.status === 401) {\n throw new Error(`API Key is invalid.`);\n }\n\n throw new Error(\n `Unknown error occurred when fetching definitions for project ${options.projectName}.`,\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(\"Request timed out.\");\n }\n throw error;\n } finally {\n clearTimeout(timeout);\n }\n}\n","import fs from \"fs/promises\";\nimport * as v from \"valibot\";\nimport dotenv from \"dotenv\";\n\nconst DEFAULT_ENV_FILE_PATH = \".env\";\n\nconst EnvSchema = v.object({\n ORIZM_PROJECT: v.pipe(\n v.string(),\n v.minLength(1, \"ORIZM_PROJECT is required\"),\n v.brand(\"ORIZM_PROJECT\"),\n ),\n ORIZM_BASE_URL: v.pipe(\n v.optional(v.string(), \"https://app.orizm.com\"), // if null, use default value\n v.transform((v) => v.replace(/\\/$/, \"\")), // remove trailing slash\n v.brand(\"ORIZM_BASE_URL\"),\n ),\n ORIZM_API_KEY: v.pipe(\n v.string(),\n v.minLength(1, \"ORIZM_API_KEY is required\"),\n v.brand(\"ORIZM_API_KEY\"),\n ),\n});\n\nexport type DevAPIEnv = v.InferOutput<typeof EnvSchema>;\n\nexport async function loadEnv(envPath?: string): Promise<DevAPIEnv> {\n let envFileContent: string | null;\n\n if (envPath) {\n envFileContent = await fs.readFile(envPath, \"utf-8\").catch(() => null);\n\n // envPathが指定されているにもかかわらず、存在しない場合エラーとする\n if (!envFileContent) {\n throw new Error(`Environment variables file: '${envPath}' is not found.`);\n }\n } else {\n envFileContent = await fs\n .readFile(DEFAULT_ENV_FILE_PATH, \"utf-8\")\n .catch(() => null);\n }\n\n if (envFileContent !== null) {\n const dotenvParsed = dotenv.parse(envFileContent);\n const envParseResult = v.safeParse(EnvSchema, dotenvParsed);\n if (!envParseResult.success) {\n throw new Error(\n `Environment variables are not valid.\\n` +\n envParseResult.issues.map((issue) => issue.message).join(\"\\n\"),\n );\n }\n return envParseResult.output;\n }\n\n // デフォルトの.envファイルも存在しない場合は、process.envからの読み込みを試みる\n const processEnvParseResult = v.safeParse(EnvSchema, process.env);\n if (!processEnvParseResult.success) {\n throw new Error(\n \"Environment variables are not valid. Put .env file or set environment variables in process.env.\\n\" +\n processEnvParseResult.issues.map((issue) => issue.message).join(\"\\n\"),\n );\n }\n\n return processEnvParseResult.output;\n}\n","import { createSpinner } from \"../../lib/cli-spinner.js\";\nimport { fetchCurrentDefinition } from \"../../lib/fetch-current-definition.js\";\nimport { loadEnv } from \"../../lib/load-env.js\";\nimport { generate } from \"../generate/generator.js\";\n\nconst spinner = createSpinner();\n\nexport async function pullAction(options: {\n destination: string;\n envPath: string;\n}) {\n spinner.start(\"Loading environment variables...\");\n const env = await loadEnv(options.envPath);\n spinner.succeed(\"Loaded environment variables.\");\n\n spinner.start(\"Loading project config...\");\n const definitionReference = await fetchCurrentDefinition({\n baseUrl: env.ORIZM_BASE_URL,\n apiKey: env.ORIZM_API_KEY,\n projectName: env.ORIZM_PROJECT,\n });\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Generating code...\");\n await generate({\n output: options.destination,\n config: definitionReference.parsed,\n });\n spinner.succeed(`Generated code to '${options.destination}'`);\n}\n","import { Command } from \"commander\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { generateAction } from \"./action.js\";\n\nexport const consumerGenerateCommand = new Command(\"generate\")\n .description(\"generate orizm client and types.\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n await generateAction(options.config, options.output);\n } catch (error) {\n handleError(error);\n }\n });\n","import { mkdir, writeFile } from \"fs/promises\";\nimport path from \"path\";\nimport { CommonOrizmConfig, ServerOrizmConfig } from \"../../types.js\";\nimport { formatTsWithPrettier } from \"../../lib/format-ts-with-prettier\";\nimport {\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderPreamble,\n renderSection,\n renderWebhookTypesSection,\n} from \"../../lib/render-helpers\";\n\nexport type GenerateOption = {\n definition: CommonOrizmConfig | ServerOrizmConfig;\n output: string;\n};\n\nexport async function generate(options: GenerateOption) {\n await mkdir(options.output, { recursive: true });\n const renderedTypes = await renderTypes(options.definition);\n const targetTypesPath = path.join(options.output, \"types.ts\");\n await writeFile(targetTypesPath, renderedTypes, \"utf-8\");\n const renderedClient = await renderClient(options.definition);\n const targetClientPath = path.join(options.output, \"client.ts\");\n await writeFile(targetClientPath, renderedClient, \"utf-8\");\n}\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n};\n\nexport async function renderTypes(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const tables: RenderTable[] = config.tables;\n const modules = config.tableModules ?? [];\n\n const source = [\n renderPreamble(\"@orizm/consumer-sdk/common\"),\n renderSection(\"Tables\", tables.map(renderTableRowType)),\n modules.map(renderModuleRowTypeBlock).join(\"\\n\\n\"),\n renderSection(\"Descriptor types\", [\n ...tables.map(renderTableDescriptor),\n ...modules.map(renderModuleDescriptorBlock),\n ]),\n renderWebhookTypesSection(tables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n return await formatTsWithPrettier(source);\n}\n\nfunction renderTableRowType(table: RenderTable): string {\n return renderTypeBlock(toCodeTypeName(table.name), [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n ...table.columns.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ]);\n}\n\nexport async function renderClient(\n config: CommonOrizmConfig | ServerOrizmConfig,\n) {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.getTableClient<Models.${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n const source = `// This file was automatically generated and should not be edited.\n\nimport { ConsumerClientOptions, OrizmConsumerClientBase } from \"@orizm/consumer-sdk\";\nimport * as Models from \"./types\";\n\nexport class OrizmClient extends OrizmConsumerClientBase {\n constructor(options: ConsumerClientOptions) {\n super(options);\n }\n\n readonly tables = {\n ${tableEntries}\n };\n}\n`;\n\n return await formatTsWithPrettier(source);\n}\n","import { generate } from \"../pull/generate.js\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { createSpinner } from \"../../lib/cli-spinner.js\";\n\nconst spinner = createSpinner();\n\nexport async function generateAction(\n orizmConfigTs: string,\n destination: string,\n) {\n spinner.start(\"Loading project config...\");\n const definition = await loadConfig(orizmConfigTs);\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Generating code...\");\n await generate({\n definition,\n output: destination,\n });\n spinner.succeed(`Generated code to '${destination}'`);\n}\n","import { Command } from \"commander\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { pullAction } from \"./action.js\";\n\nexport const consumerPullCommand = new Command(\"pull\")\n .description(\"pull orizm schema and generate client and types.\")\n .option(\"-e, --env [path]\", \"env file path.\")\n .option(\"-o, --output <path>\", \"output directory.\", \"./src/orizm\")\n .action(async (options) => {\n try {\n await pullAction({\n destination: options.output,\n envPath: options.env,\n });\n } catch (error) {\n handleError(error);\n }\n });\n","import { fetchCurrentDefinition } from \"../../lib/fetch-current-definition.js\";\nimport { loadEnv } from \"../../lib/load-env.js\";\nimport { createSpinner } from \"../../lib/cli-spinner.js\";\nimport { generate } from \"./generate.js\";\n\nconst spinner = createSpinner();\n\nexport async function pullAction(options: {\n destination: string;\n envPath: string;\n}) {\n spinner.start(\"Loading environment variables...\");\n const config = await loadEnv(options.envPath);\n spinner.succeed(\"Loaded environment variables.\");\n\n spinner.start(\"Loading project config...\");\n const definition = await fetchCurrentDefinition({\n baseUrl: config.ORIZM_BASE_URL,\n apiKey: config.ORIZM_API_KEY,\n projectName: config.ORIZM_PROJECT,\n });\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Generating code...\");\n await generate({\n definition: definition.parsed,\n output: options.destination,\n });\n spinner.succeed(`Generated code to '${options.destination}'`);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { createSpinner } from \"../lib/cli-spinner.js\";\nimport { applyDefinition, getChangeEvents } from \"../lib/developer-api.js\";\nimport { displayChangeEvents } from \"../lib/display-change-events.js\";\nimport { handleError } from \"../lib/handle-error.js\";\nimport { input } from \"../lib/cli-input.js\";\nimport { loadConfig } from \"../lib/load-config.js\";\nimport { loadEnv } from \"../lib/load-env.js\";\n\nconst spinner = createSpinner();\n\nexport const pushCommand = new Command(\"push\")\n .description(\"apply schema to project.\")\n .option(\"-e, --env <path>\", \"env file path.\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .option(\"--dry-run\", \"display change-events without applying schema.\", false)\n .option(\"-y, --yes\", \"apply schema without confirmation.\", false)\n .action(\n async (options: {\n env?: string;\n config: string;\n dryRun: boolean;\n yes: boolean;\n }) => {\n try {\n spinner.start(\"Loading environment variables...\");\n const env = await loadEnv(options.env);\n spinner.succeed(\"Loaded environment variables.\");\n\n spinner.start(\"Loading project config...\");\n const projectDef = await loadConfig(options.config);\n spinner.succeed(\"Loaded project config.\");\n\n spinner.start(\"Fetch schema change events...\");\n const changeEvents = await getChangeEvents(env, projectDef);\n spinner.succeed(\"Fetch schema change events.\");\n\n await displayChangeEvents(changeEvents);\n\n if (\n changeEvents.tableChangeEvents.length === 0 &&\n changeEvents.bucketChangeEvents.length === 0 &&\n changeEvents.authorityChangeEvents.length === 0\n ) {\n return;\n }\n\n if (options.dryRun) {\n return;\n }\n\n if (!options.yes) {\n const confirm = await input(\"Do you want to apply schema? (y/N): \");\n if (confirm !== \"y\") {\n console.log(chalk.red(\"Canceled.\"));\n return;\n }\n }\n\n spinner.start(\"Applying schema...\");\n await applyDefinition(env, projectDef);\n spinner.succeed(\"Schema applied.\");\n } catch (error) {\n handleError(error);\n }\n },\n );\n","import {\n createDeveloperAPIv2Client,\n components,\n} from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport chalk from \"chalk\";\nimport { DevAPIEnv } from \"./load-env.js\";\n\ntype ProjectDefinitionChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"];\n\nexport async function applyDefinition(\n env: DevAPIEnv,\n projectDef: components[\"schemas\"][\"OrizmConfig\"],\n): Promise<void> {\n const client = createDeveloperAPIv2Client({\n serverOrigin: env.ORIZM_BASE_URL,\n headers: {\n \"x-api-key\": env.ORIZM_API_KEY,\n },\n });\n\n const response = await client.POST(\"/projects/{projectName}/definitions\", {\n params: { path: { projectName: env.ORIZM_PROJECT } },\n body: { definition: projectDef },\n });\n\n if (!response.data) {\n const status = response.response.status;\n\n if (status === 401) {\n throw new Error(\n \"401 Unauthorized. Please check your Developer API key and try again.\",\n );\n }\n\n if (response.error.type === \"bad-request\") {\n console.log(chalk.red(response.error.detail));\n process.exit(1);\n }\n\n throw new Error(\n `${status} ${response.response.statusText}: Unexpected error occurred while applying schema.`,\n );\n }\n}\n\nexport const getChangeEvents = async (\n env: DevAPIEnv,\n projectDef: components[\"schemas\"][\"OrizmConfig\"],\n): Promise<ProjectDefinitionChangeEvent> => {\n const client = createDeveloperAPIv2Client({\n serverOrigin: env.ORIZM_BASE_URL,\n headers: {\n \"x-api-key\": env.ORIZM_API_KEY,\n },\n });\n\n const response = await client.POST(\n \"/projects/{projectName}/definitions/dry-run\",\n {\n params: { path: { projectName: env.ORIZM_PROJECT } },\n body: { definition: projectDef },\n },\n );\n if (!response.data) {\n const status = response.response.status;\n if (status === 401) {\n throw new Error(\n \"401 Unauthorized. Please check your Developer API key and try again.\",\n );\n }\n throw new Error(\n `${status} ${response.response.statusText}: Unexpected error occurred while fetching schema change events.\n ${JSON.stringify(response.error, null, 2)}`,\n );\n }\n return response.data;\n};\n","import chalk from \"chalk\";\nimport { components } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport { CliTable } from \"./cli-table.js\";\n\ntype ProjectDefinitionChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"];\ntype TableChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"][\"tableChangeEvents\"][number];\ntype BucketChangeEvent =\n components[\"schemas\"][\"OrizmConfigChangeEvents\"][\"bucketChangeEvents\"][number];\n\nexport function displayChangeEvents(\n changeEvents: ProjectDefinitionChangeEvent,\n): void {\n const {\n tableChangeEvents = [],\n bucketChangeEvents = [],\n authorityChangeEvents = [],\n } = changeEvents;\n\n if (\n tableChangeEvents.length === 0 &&\n bucketChangeEvents.length === 0 &&\n authorityChangeEvents.length === 0\n ) {\n console.log();\n console.log(chalk.green(\"No changes.\"));\n return;\n }\n\n displayTableChangeEvents(tableChangeEvents);\n displayBucketChangeEvents(bucketChangeEvents);\n displayAuthorityChangeEvents(authorityChangeEvents);\n console.log();\n}\n\nfunction displayTableChangeEvents(tableChangeEvents: TableChangeEvent[]): void {\n if (tableChangeEvents.length === 0) {\n return;\n }\n\n const eventsByTable = new Map<string, TableChangeEvent[]>();\n\n for (const event of tableChangeEvents) {\n const tableName = event.tableDef.name;\n const tableEvents = eventsByTable.get(tableName) ?? [];\n tableEvents.push(event);\n eventsByTable.set(tableName, tableEvents);\n }\n\n for (const [tableName, events] of eventsByTable.entries()) {\n console.log();\n console.log(`⚫︎Table: ${tableName}`);\n\n const table = new CliTable([\"Type\", \"Name\", \"Event\", \"Detail\"]);\n\n for (const event of events) {\n const eventName = event.event;\n\n switch (eventName) {\n case \"table:create\":\n case \"table:update\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"table:delete\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"column:create\":\n case \"column:update\": {\n table.addRow(\n [\n \"column\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n { color: \"green\" },\n );\n break;\n }\n case \"column:delete\": {\n table.addRow(\n [\n \"column\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n {\n color: \"red\",\n },\n );\n break;\n }\n case \"index:create\":\n case \"index:update\": {\n table.addRow(\n [\n \"index\",\n event.indexDef.columns.join(\", \"),\n eventName,\n JSON.stringify(event.indexDef),\n ],\n { color: \"green\" },\n );\n break;\n }\n case \"index:delete\": {\n table.addRow(\n [\n \"index\",\n event.indexDef.columns.join(\", \"),\n eventName,\n JSON.stringify(event.indexDef),\n ],\n { color: \"red\" },\n );\n break;\n }\n case \"module:create\":\n case \"module:update\": {\n table.addRow(\n [\n \"module\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n {\n color: \"green\",\n },\n );\n break;\n }\n case \"module:delete\": {\n table.addRow(\n [\n \"module\",\n event.columnDef.name,\n eventName,\n JSON.stringify(event.columnDef),\n ],\n {\n color: \"red\",\n },\n );\n break;\n }\n case \"search:enable\":\n case \"search:update\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"search:disable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"history:enable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"history:disable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"draft:enable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"draft:disable\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n case \"formSubmissions:create\":\n case \"formSubmissions:update\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"green\",\n });\n break;\n }\n case \"formSubmissions:delete\": {\n table.addRow([\"table\", event.tableDef.name, eventName, \"\"], {\n color: \"red\",\n });\n break;\n }\n }\n }\n\n table.print();\n }\n}\n\nfunction displayBucketChangeEvents(\n bucketChangeEvents: ProjectDefinitionChangeEvent[\"bucketChangeEvents\"],\n): void {\n if (bucketChangeEvents.length === 0) {\n return;\n }\n\n const eventsByBucket = new Map<string, BucketChangeEvent[]>();\n\n for (const event of bucketChangeEvents) {\n const bucketName = event.bucketDef.name;\n const bucketEvents = eventsByBucket.get(bucketName) ?? [];\n bucketEvents.push(event);\n eventsByBucket.set(bucketName, bucketEvents);\n }\n\n const table = new CliTable([\"Type\", \"Name\", \"Event\", \"Detail\"]);\n\n console.log();\n console.log(\"⚫︎Buckets\");\n\n for (const [_, events] of eventsByBucket.entries()) {\n for (const event of events) {\n const eventName = event.event;\n\n switch (eventName) {\n case \"bucket:create\":\n case \"bucket:update\": {\n table.addRow(\n [\n \"bucket\",\n event.bucketDef.name,\n eventName,\n JSON.stringify(event.bucketDef),\n ],\n {\n color: \"green\",\n },\n );\n break;\n }\n case \"bucket:delete\": {\n table.addRow(\n [\n \"bucket\",\n event.bucketDef.name,\n eventName,\n JSON.stringify(event.bucketDef),\n ],\n {\n color: \"red\",\n },\n );\n break;\n }\n }\n }\n }\n\n table.print();\n}\n\nfunction displayAuthorityChangeEvents(\n authorityChangeEvents: ProjectDefinitionChangeEvent[\"authorityChangeEvents\"],\n): void {\n if (authorityChangeEvents.length === 0) {\n return;\n }\n\n const table = new CliTable([\"Type\", \"Event\", \"Detail\"]);\n\n console.log();\n console.log(\"⚫︎Authorities\");\n\n for (const event of authorityChangeEvents) {\n const eventName = event.event;\n\n switch (eventName) {\n case \"authority:update\": {\n table.addRow(\n [\"authority\", eventName, JSON.stringify(event.authorityDef)],\n { color: \"green\" },\n );\n break;\n }\n }\n }\n\n table.print();\n}\n","// generated by vscode copilot gpt-4o\n\n// ANSIカラーコード\nconst COLORS: { [key: string]: string } = {\n reset: \"\\x1b[0m\",\n green: \"\\x1b[32m\",\n red: \"\\x1b[31m\",\n};\n\nexport class CliTable {\n private headers: string[] = [];\n private rows: string[][] = [];\n private columnWidths: number[] = [];\n private rowColors: (string | null)[] = []; // 各行の色を保持する配列\n\n constructor(headers: string[]) {\n this.headers = headers;\n this.updateColumnWidths(headers);\n }\n\n // データ行を追加\n public addRow(row: string[], options?: { color?: \"green\" | \"red\" }): void {\n if (row.length !== this.headers.length) {\n throw new Error(\n `The length of the row (${row.length}) does not match the length of the header (${this.headers.length})`,\n );\n }\n this.rows.push(row);\n\n // オプションで色が指定されている場合は設定\n if (options?.color) {\n this.rowColors.push(COLORS[options.color]);\n } else {\n this.rowColors.push(null); // 色指定なし\n }\n\n this.updateColumnWidths(row);\n }\n\n // 列幅を更新\n private updateColumnWidths(row: string[]): void {\n for (let i = 0; i < row.length; i++) {\n const cellLength = row[i].length;\n if (this.columnWidths[i] == null || cellLength > this.columnWidths[i]) {\n this.columnWidths[i] = cellLength;\n }\n }\n }\n\n // 水平線を生成\n private createHorizontalLine(position: \"top\" | \"middle\" | \"bottom\"): string {\n let line = \"\";\n\n // 左端の文字を決定\n if (position === \"top\") line += \"┌\";\n else if (position === \"middle\") line += \"├\";\n else if (position === \"bottom\") line += \"└\";\n\n // 各列の横線\n for (let i = 0; i < this.columnWidths.length; i++) {\n line += \"─\".repeat(this.columnWidths[i] + 2);\n\n // 右端または列の交差点の文字を決定\n if (i < this.columnWidths.length - 1) {\n if (position === \"top\") line += \"┬\";\n else if (position === \"middle\") line += \"┼\";\n else if (position === \"bottom\") line += \"┴\";\n } else {\n if (position === \"top\") line += \"┐\";\n else if (position === \"middle\") line += \"┤\";\n else if (position === \"bottom\") line += \"┘\";\n }\n }\n\n return line;\n }\n\n // 行を整形\n private formatRow(row: string[], color: string | null): string {\n let formattedRow = \"│\";\n for (let i = 0; i < row.length; i++) {\n const cell = row[i];\n const padding = \" \".repeat(this.columnWidths[i] - cell.length);\n if (color) {\n formattedRow += ` ${color}${cell}${COLORS.reset}${padding} │`;\n } else {\n formattedRow += ` ${cell}${padding} │`;\n }\n }\n return formattedRow;\n }\n\n // テーブルを文字列として取得\n public toString(): string {\n if (this.headers.length === 0) {\n return \"\";\n }\n\n const topLine = this.createHorizontalLine(\"top\");\n const middleLine = this.createHorizontalLine(\"middle\");\n const bottomLine = this.createHorizontalLine(\"bottom\");\n\n let table = topLine + \"\\n\";\n\n // ヘッダー行\n table += this.formatRow(this.headers, null) + \"\\n\";\n table += middleLine + \"\\n\";\n\n // データ行\n for (let i = 0; i < this.rows.length; i++) {\n const color = this.rowColors[i] || null;\n table += this.formatRow(this.rows[i], color) + \"\\n\";\n }\n\n table += bottomLine;\n return table;\n }\n\n // テーブルを出力\n public print(): void {\n console.log(this.toString());\n }\n}\n","import { createInterface } from \"node:readline/promises\";\n\nexport async function input(prompt: string): Promise<string> {\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const input = await rl.question(prompt).finally(() => {\n rl.close();\n });\n\n return input.trim();\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport * as v from \"valibot\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { displayValibotError } from \"../../lib/display-valibot-error.js\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { watchConfigFile } from \"./watcher.js\";\n\nexport const validateConfigCommand = new Command(\"validate\")\n .description(\"validate orizm.config.ts for validation errors\")\n .option(\"-c, --config <path>\", \"Path to config file\", \"./orizm.config.ts\")\n .option(\"-w, --watch\", \"Watch for file changes and re-validate\")\n .action(async (options: { config: string; watch?: boolean }) => {\n try {\n const validateConfig = async () => {\n try {\n if (options.watch) {\n console.clear();\n\n console.log(\n `👀 Watching ${options.config} for changes... (Press Ctrl+C to stop)`,\n );\n console.log();\n }\n\n await loadConfig(options.config);\n console.log(chalk.green(\"✅ Config is valid.\"));\n } catch (error) {\n if (v.isValiError(error)) {\n console.error(chalk.red(\"❌ Config validation failed:\"));\n displayValibotError(error);\n return;\n }\n throw error;\n }\n };\n\n await validateConfig();\n\n if (options.watch) {\n watchConfigFile(options.config, validateConfig);\n }\n } catch (error) {\n handleError(error);\n }\n });\n","import chokidar from \"chokidar\";\nimport { handleError } from \"../../lib/handle-error\";\n\nexport function watchConfigFile(\n configPath: string,\n onFileChange: () => Promise<void>,\n) {\n const watcher = chokidar.watch(configPath, {\n persistent: true,\n ignoreInitial: true,\n });\n\n let isProcessing = false;\n let timeoutId: NodeJS.Timeout | null = null;\n\n const debouncedOnChange = () => {\n if (isProcessing) return;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(async () => {\n isProcessing = true;\n\n try {\n await onFileChange();\n } catch (error) {\n handleError(error);\n } finally {\n isProcessing = false;\n }\n }, 300); // 300ms debounce\n };\n watcher.on(\"change\", debouncedOnChange);\n watcher.on(\"add\", debouncedOnChange);\n watcher.on(\"unlink\", debouncedOnChange);\n\n const terminate = () => {\n watcher.close();\n process.exit(0);\n };\n process.on(\"SIGINT\", terminate);\n process.on(\"SIGTERM\", terminate);\n\n watcher.on(\"error\", (error) => {\n handleError(error);\n });\n\n return watcher;\n}\n","import { Command } from \"commander\";\nimport { loadConfig } from \"../../lib/load-config.js\";\nimport { handleError } from \"../../lib/handle-error.js\";\nimport { generate } from \"./generate.js\";\nimport { convertToInput } from \"./convert-to-input.js\";\n\nexport const generateErdCommand = new Command(\"generate-erd\")\n .description(\"generate er diagram in mermaid format from orizm.config.ts\")\n .option(\"-c, --config <path>\", \"orizm config file path.\", \"orizm.config.ts\")\n .action(async (options) => {\n try {\n const config = await loadConfig(options.config);\n const input = convertToInput(config);\n const mermaidText = generate(input);\n\n console.log(mermaidText);\n } catch (error) {\n handleError(error);\n }\n });\n","import { TemplateInput } from \"./convert-to-input.js\";\n\nexport function generate(input: TemplateInput): string {\n const tables = input.tables\n .map((table) => {\n const columns = [\n \" id string PK\",\n ...table.columns.map(\n (col) =>\n ` ${col.name} ${col.type}${col.isForeignKey ? \" FK\" : \"\"}`,\n ),\n ].join(\"\\n\");\n return ` ${table.name} {\\n${columns}\\n }`;\n })\n .join(\"\\n\");\n\n const relations = input.relations\n .map((rel) => ` ${rel.from} ${rel.type} ${rel.to} : ${rel.comment}`)\n .join(\"\\n\");\n\n return `generated by @orizm/cli\n\n\\`\\`\\`mermaid\nerDiagram\n${tables}\n\n${relations}\n\\`\\`\\``;\n}\n","import { ServerOrizmConfig } from \"../../types\";\n\nexport type TemplateInput = {\n tables: TableInput[];\n relations: RelationInput[];\n};\n\ntype TableInput = {\n name: string;\n columns: ColumnInput[];\n};\n\ntype ColumnInput = {\n name: string;\n type: string;\n isForeignKey: boolean;\n};\n\ntype RelationInput = {\n from: string;\n to: string;\n type: string;\n comment: string;\n};\n\nexport function convertToInput(config: ServerOrizmConfig): TemplateInput {\n const tables: TableInput[] = [];\n const relations: RelationInput[] = [];\n\n for (const table of config.tables) {\n const modules: TableInput[] = [];\n\n const erdTable: TableInput = {\n name: table.name,\n columns: [],\n };\n\n for (const column of table.columns) {\n erdTable.columns.push({\n name: column.name,\n type: column.type,\n isForeignKey: column.type === \"reference\",\n });\n\n if (column.type === \"reference\") {\n relations.push({\n from: column.tableName,\n to: table.name,\n type: RELATION.ONE_TO_MANY,\n comment: \"reference\",\n });\n }\n\n if (column.type === \"module\" || column.type === \"module-array\") {\n const module = config.tableModules?.find(\n (m) => m.name === column.moduleName,\n );\n\n if (!module) {\n continue;\n }\n\n const moduleTableName = `${table.name}_${column.name}_${column.moduleName}`;\n\n modules.push({\n name: moduleTableName,\n columns: module.columns.map((c) => ({\n name: c.name,\n type: c.type,\n isForeignKey: c.type === \"reference\",\n })),\n });\n\n relations.push({\n from: table.name,\n to: moduleTableName,\n type:\n column.type === \"module\"\n ? RELATION.ONE_TO_ONE\n : RELATION.ONE_TO_MANY,\n comment: column.type === \"module\" ? \"module\" : \"module-array\",\n });\n\n for (const moduleColumn of module.columns) {\n if (moduleColumn.type === \"reference\" && moduleColumn.tableName) {\n relations.push({\n from: moduleTableName,\n to: moduleColumn.tableName,\n type: RELATION.ONE_TO_MANY,\n comment: \"reference\",\n });\n }\n }\n }\n }\n\n tables.push(erdTable);\n tables.push(...modules);\n }\n\n return {\n tables,\n relations,\n };\n}\n\nconst RELATION = {\n ONE_TO_MANY: \"||--o{\",\n ONE_TO_ONE: \"||--||\",\n} as const;\n"],"mappings":"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","names":["import_commander","esbuild","chalk","readline","v","import_chalk","v","import_chalk","error","path","chalk","error","chalk","prettierPluginEstree","prettierPluginTypeScript","optional","path","error","import_commander","error","final","joiner","v","v2","error","import_promises","v","fs","dotenv","spinner","error","import_commander","import_promises","import_path","generate","renderTypes","path","renderClient","renderTableDescriptor","spinner","generate","error","import_commander","spinner","pullAction","generate","pullAction","error","import_commander","import_chalk","import_chalk","chalk","import_chalk","chalk","import_promises","input","spinner","chalk","error","import_commander","import_chalk","v","chokidar","error","chalk","error","import_commander","generate","input","module","input","generate","error"]}
|