{"version":3,"file":"xxmachina-components-groups-query-form.mjs","sources":["../../../../../packages/@xxmachina/components/src/lib/groups/query-form/query-form.group.ts","../../../../../packages/@xxmachina/components/src/lib/groups/query-form/xxmachina-components-groups-query-form.ts"],"sourcesContent":["import { Component, inject, computed, input, ChangeDetectionStrategy } from '@angular/core';\nimport { Extension } from '@codemirror/state';\nimport { buildClientSchema } from 'graphql';\nimport { EditorComponent } from \"@ng-atomic/components/extras/editor\";\nimport { _computed, NgAtomicComponent } from '@ng-atomic/core';\nimport { TextInputSectionOrganism } from '@ng-atomic/components/organisms/text-input-section';\nimport { TabsFrame } from '@ng-atomic/components/frames/tabs';\nimport { json } from '@codemirror/lang-json';\nimport { javascript } from '@codemirror/lang-javascript';\nimport { Resource } from '@xxmachina/common/domain/models';\nimport { graphql } from 'cm6-graphql';\nimport { QueryFeature, QueryGraphqlSchemaFeature } from '@xxmachina/components/features/query';\nimport { injectAll } from '@ng-atomic/common/stores/entities';\nimport { HttpClient } from '@angular/common/http';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { derivedAsync } from 'ngxtension/derived-async';\nimport { getValue$ } from '@ng-atomic/common/utils';\n\n@Component({\n  selector: 'groups-query-form',\n  imports: [\n    EditorComponent,\n    TextInputSectionOrganism,\n    TabsFrame,\n  ],\n  template: `\n    <organisms-text-input-section\n      [label]=\"'GraphQL Endpoint'\"\n      [control]=\"form().get(['graphql', 'endpoint'])\"\n      [placeholder]=\"'http://localhost:4200/api/graphql'\"\n      [autoComplete]=\"endpointAutoCompleteOptions()\"\n      [hint]=\"'スキーマ取得完了'\"\n    />\n    <frames-tabs [labels]=\"['Query(GQL)', 'Variables(JSON)', 'Headers(JSON)', 'Transformer(TS)']\">\n      <ng-template #tab>\n        <extras-editor\n          [content]=\"form().get(['graphql', 'query']).value\"\n          (contentChange)=\"form().get(['graphql', 'query']).setValue($event)\"\n          [extensions]=\"queryExtensions()\"\n          [keyActions]=\"keyActions()\"\n          (action)=\"dispatch($event)\"\n        />\n      </ng-template>\n      <ng-template #tab>\n        <extras-editor\n          [content]=\"form().get(['graphql', 'variablesJson']).value\"\n          (contentChange)=\"form().get(['graphql', 'variablesJson']).setValue($event)\"\n          [extensions]=\"variablesExtensions()\"\n          [keyActions]=\"keyActions()\"\n          (action)=\"dispatch($event)\"\n        />\n      </ng-template>\n      <ng-template #tab>\n        <extras-editor\n          [content]=\"form().get(['graphql', 'headersJson']).value\"\n          (contentChange)=\"form().get(['graphql', 'headersJson']).setValue($event)\"\n          [extensions]=\"headersExtensions()\"\n          [keyActions]=\"keyActions()\"\n          (action)=\"dispatch($event)\"\n        />\n      </ng-template>\n      <ng-template #tab>\n        <extras-editor\n          [content]=\"form().get(['graphql', 'transformerTs']).value\"\n          (contentChange)=\"form().get(['graphql', 'transformerTs']).setValue($event)\"\n          [extensions]=\"transformerExtensions()\"\n          [keyActions]=\"keyActions()\"\n          (action)=\"dispatch($event)\"\n        />\n      </ng-template>\n    </frames-tabs>\n  `,\n  styles: `\n    :host {\n      display: flex;\n      flex-direction: column;\n      padding-top: 24px;\n      box-sizing: border-box;\n      height: 100%;\n\n      frames-tabs {\n        height: 100%;\n\n        extras-editor {\n          height: 100%;\n        }\n      }\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QueryFormGroup extends NgAtomicComponent {\n  readonly #feature = inject(QueryFeature);\n  readonly form = input(this.#feature.form);\n  readonly formValue = derivedAsync(() => getValue$(this.form()));\n  protected readonly graphqlSchemaFeature = inject(QueryGraphqlSchemaFeature);\n  protected readonly keyActions = input([\n    { key: 'Ctrl-Enter', actionId: QueryFeature.ActionId.クエリの実行 },\n    { key: 'Cmd-Enter', actionId: QueryFeature.ActionId.クエリの実行 },\n    { key: 'Cmd-s', actionId: QueryFeature.ActionId.クエリの更新 },\n  ]);\n  protected readonly resources = injectAll(Resource);\n\n  readonly endpointAutoCompleteOptions = computed(() => {\n    const query = this.formValue();\n    return this.resources()\n      .filter(resource => resource.type === 'graphql')\n      .map(resource => resource.graphql!.url)\n      .filter(url => url.startsWith(query!.graphql!.endpoint!));\n  });\n  readonly queryExtensions = computed<Extension[]>(() => {\n    const schema = this.graphqlSchemaFeature.graphqlSchema();\n    return schema ? [graphql(buildClientSchema(schema))] : [];\n  });\n  readonly variablesExtensions = computed<Extension[]>(() => [json()]);\n  readonly headersExtensions = computed<Extension[]>(() => [json()]);\n\n  readonly http = inject(HttpClient);\n  readonly libFile = toSignal(\n    this.http.get('https://unpkg.com/typescript@latest/lib/lib.es5.d.ts', { responseType: 'text' })\n  );\n  \n  // readonly tsLinter = () => {\n    // return linter(view => {\n    //   const diagnostics: Diagnostic[] = [];\n  \n    //   if (!this.libFile()) return diagnostics;\n  \n    //   const code = view.state.doc.toString();\n    //   const fileName = 'file.ts';\n    //   const libFileName = 'lib.es5.d.ts';\n  \n    //   const compilerOptions: ts.CompilerOptions = {\n    //     noEmit: true,\n    //     lib: ['lib.es5.d.ts'],\n    //     strict: true,\n    //   };\n  \n    //   const host: ts.CompilerHost = {\n    //     getSourceFile: (name) => {\n    //       console.debug('[QueryFormGroup] getSourceFile:', name);\n    //       if (name === fileName) {\n    //         return ts.createSourceFile(name, code, ts.ScriptTarget.Latest, true);\n    //       }\n    //       if (name === libFileName) {\n    //         console.debug('[QueryFormGroup] libSourceFile:', this.libFile());\n    //         return ts.createSourceFile(name, this.libFile(), ts.ScriptTarget.Latest, true);\n    //       }\n    //       return undefined;\n    //     },\n    //     writeFile: () => {},\n    //     getDefaultLibFileName: () => libFileName,\n    //     getCurrentDirectory: () => '',\n    //     getCanonicalFileName: filename => filename,\n    //     useCaseSensitiveFileNames: () => true,\n    //     fileExists: name => name === fileName || name === libFileName,\n    //     readFile: () => '',\n    //     getNewLine: () => '\\n',\n    //   };\n  \n    //   const program = ts.createProgram([fileName], compilerOptions, host);\n    //   const tsDiagnostics = ts.getPreEmitDiagnostics(program);\n  \n    //   tsDiagnostics.forEach(diag => {\n    //     if (\n    //       diag.file &&\n    //       diag.file.fileName === fileName &&  // ← これを追加\n    //       diag.start !== undefined &&\n    //       diag.length !== undefined\n    //     ) {\n    //       diagnostics.push({\n    //         from: diag.start,\n    //         to: diag.start + diag.length,\n    //         message: ts.flattenDiagnosticMessageText(diag.messageText, '\\n'),\n    //         severity: 'error',\n    //       });\n    //     }\n    //   });\n  \n    //   return diagnostics;\n    // });\n  // };\n\n  readonly transformerExtensions = computed<Extension[]>(() => [\n    // this.tsLinter(),\n    javascript({typescript: true})\n  ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}