JavaScript API
@vegasjs/vegas は、設定・browser code・サーバー側data helper・test adapter向けに、少数のpackage entrypointを公開しています。
src や dist 内の実装ファイルを直接importするのではなく、ここに記載するpackage entrypointを使用してください。
| Entrypoint | 公開surface |
|---|---|
@vegasjs/vegas | defineConfig() と公開config typeによるプロジェクト設定 |
@vegasjs/vegas/client | 型付き google.script.run client |
@vegasjs/vegas/server | 型付き Spreadsheet data API |
@vegasjs/vegas/vitest | Local Runtime Vitest adapterとテスト向けRuntime type |
@vegasjs/vegas/playwright | Browser test adapterと Playwright expect |
@vegasjs/vegas
defineConfig()
Vegas の設定ファイルを作成するときは defineConfig() を使用できます。
import { defineConfig } from "@vegasjs/vegas";
export default defineConfig({
appType: "spa",
appsScript: {
manifest: {},
},
});helperは指定された設定値を維持し、直接の UserConfig、Promise<UserConfig>、UserConfigFactory に対するoverloadを提供します。
root entrypointからは次のconfig typeも公開されています。
import type {
AppsScriptConfig,
AppsScriptManifest,
DevServerConfig,
UserConfig,
UserConfigExport,
UserConfigFactory,
} from "@vegasjs/vegas";設定modelについては Vegas の設定 を、個々のoptionについては 共有オプション を参照してください。
@vegasjs/vegas/client
server が export する rpc レジストリと createRpcClient<T>() を使用してください。
createRpcClient<T>()
function createRpcClient<T extends object>(): RpcClient<T>;RpcClient<T> は createRpcClient<T>() の公開戻り値型です。createServerFunctionClient() 関数と ServerFunctionClient<T> 型エイリアスは v0.3.0 で削除されました。
移行するには、server から rpc という名前でハンドラレジストリを export し、client の createServerFunctionClient<T>() を createRpcClient<T>() に置き換えてください。
登録型 RPC は各メソッドを名前付き export する代わりに、GAS の単一エントリポイント vegasRpcCall を利用します。公開契約は server 実装から独立させます。
// src/contracts/rpc.ts
export interface ServerRpc {
greet(name: string): string;
}// src/server/Code.ts
import { defineServerFunctions } from "@vegasjs/vegas/server";
import type { ServerRpc } from "../contracts/rpc";
export const rpc = defineServerFunctions<ServerRpc>({
greet(name) {
Logger.log(name);
return `Hello, ${name}`;
},
});// src/client/main.ts
import { createRpcClient, type RpcClient } from "@vegasjs/vegas/client";
import type { ServerRpc } from "../contracts/rpc";
const server: RpcClient<ServerRpc> = createRpcClient<ServerRpc>();
const result = await server.greet("Vegas");server エントリは rpc という名前でオブジェクトを export する必要があります。Vegas は Local Runtime と Google Apps Script の両方で、そのメソッドを単一ディスパッチャー経由で実行します。トップレベルの名前付き export は Apps Script 自体から引き続き利用できますが、Vegas のクライアントは登録型の rpc ディスパッチャーを使用します。この方式では rpc がハンドラ名、vegasRpcCall が GAS のディスパッチャー名として予約されるため、rpc と同時に vegasRpcCall 関数を export しないでください。
RPC レジストリには、関数を自身のプロパティとして持つプレーンオブジェクト、または null プロトタイプのオブジェクトを使用してください。クラスインスタンスや継承されたメソッドはサポートしません。
defineServerFunctions() は登録時のハンドラ名と関数参照を記録します。元のオブジェクトは凍結しませんが、メソッドを追加・差し替えしても再登録するまで RPC からは呼び出せません。ヘルパーを使わず rpc を直接 export した場合は、呼び出し時の検証のみが適用されます。
defineServerFunctions() と RpcClient<T> は、登録型 RPC の契約が google.script.run で受け渡し可能な値の保守的な部分集合(文字列、数値、真偽値、null、配列、通常のデータオブジェクト)に適合するか静的に検査します。非対応のシグネチャを持つメソッドは RpcClient<T> から除外されます。TypeScript は Date、コールバック、Promise の戻り値、省略可能な undefined プロパティ、広すぎる object / {} 型、再帰的なオブジェクト型を拒否します。void の戻り値は許可されます。ただし型検査だけでは、数値が有限であることやオブジェクトに循環参照がないことまでは証明できません。
Vegas は登録型 RPC の値も実行時に検証します。createRpcClient() は google.script.run の呼び出し前に引数を検証し、生成された vegasRpcCall ディスパッチャーは受信した引数とハンドラの戻り値を検証します。Date、関数、シンボル、アクセサー、循環参照、非有限数、欠損要素のある配列、列挙不能なデータプロパティ、独自プロトタイプを持つオブジェクトなどは拒否されます。void 相当のハンドラでは、戻り値のルートに限り undefined を許可します。これらの検証は値のシリアライズを行わず、許可されたすべての値を Google が受け付けることも保証しません。日時は文字列に変換して受け渡してください。
末尾が _ のハンドラ名と then、constructor、prototype、__proto__ は予約名です。登録処理・クライアント Proxy・GAS ディスパッチャーのいずれでも使用できません。
@vegasjs/vegas/server
server entrypointには Vegas の型付き Spreadsheet data layerが含まれています。使い方、storage semantics、query、repositoryの挙動については Spreadsheet Data を参照してください。
Row / Schema / Table API
Runtime export:
createSpreadsheetRowCodec
createSpreadsheetColumn
createSpreadsheetSchema
createSpreadsheetTableType:
SpreadsheetRowCodec
SpreadsheetColumn
SpreadsheetSchema
SpreadsheetSchemaColumnSource
SpreadsheetTable
SpreadsheetTableEntry
SpreadsheetTableOptionsQuery API
Runtime export:
createSpreadsheetQuery
createSpreadsheetQueryFields
createSpreadsheetQueryPlan
spreadsheetOrderBy
spreadsheetAnd
spreadsheetOr
spreadsheetEq
spreadsheetNe
spreadsheetGt
spreadsheetGte
spreadsheetLt
spreadsheetLteType:
SpreadsheetQuery
SpreadsheetQueryField
SpreadsheetComparableQueryField
SpreadsheetQueryFields
SpreadsheetQueryExpression
SpreadsheetComparisonExpression
SpreadsheetComparisonKind
SpreadsheetComparableValue
SpreadsheetAndExpression
SpreadsheetOrExpression
SpreadsheetEqualExpression
SpreadsheetNotEqualExpression
SpreadsheetGreaterThanExpression
SpreadsheetGreaterThanOrEqualExpression
SpreadsheetLessThanExpression
SpreadsheetLessThanOrEqualExpression
SpreadsheetOrderBy
SpreadsheetQueryPlan
SpreadsheetQueryPlanOptions
SpreadsheetQueryPlanSource
SpreadsheetSortDirectionStorage API
Runtime export:
createSpreadsheetStorageLayout
createSpreadsheetStorageCodecType:
SpreadsheetStorageLayout
SpreadsheetStorageLayoutOptions
SpreadsheetStorageLocation
SpreadsheetStorageMode
SpreadsheetStorageCodecRepository API
Runtime export:
createSpreadsheetRepository
createSpreadsheetRepositoryLockGuard
createSpreadsheetRepositoryScriptLockGuard
SpreadsheetRepositoryKeyConflictErrorType:
SpreadsheetRepository
SpreadsheetRepositoryMutationGuard
SpreadsheetRepositoryOptions
SpreadsheetRepositoryLock
SpreadsheetRepositoryLockGuardOptions
SpreadsheetRepositoryScriptLockGuardOptions@vegasjs/vegas/vitest
Vitest entrypointは createLocalRuntimeTest() と、fixtureやinline Runtime Dataを記述するために必要なtypeを公開します。
Runtime export:
createLocalRuntimeTestType:
LocalRuntimeTestOptions
LocalRuntimeHarness
LocalRuntimeProject
RuntimeDataFixture
LocalRuntime
Program
RuntimeExecutionRequest
RuntimeDataProperties
RuntimeDataSession
RuntimeDataSpreadsheet
RuntimeDataSpreadsheetCellValue
RuntimeDataSpreadsheetSheetライフサイクル、Runtime Data、分離、使用例については Vitest を参照してください。
@vegasjs/vegas/playwright
Playwright entrypointはbrowser test adapterを公開し、Playwright の expect をre-exportします。
Runtime export:
createBrowserTest
expectType:
BrowserTestFixture
BrowserTestOptions
RuntimeDataFixturebrowserのライフサイクル、vegas.app、Runtime Data、cross-originのローカル Web app modelについては Playwright を参照してください。
Public API の境界
package export mapが、このページに記載する対応import boundaryを定義します。内部実装moduleは、source fileがrepository内に存在するだけでpackage levelのAPIになるわけではなく、自由に変更される可能性があります。
専用guideを持つAPIについては、このreferenceでは公開symbolを一覧化し、ライフサイクルや挙動についてはguideをsource of truthとします。
