appwrite-cli 18.0.1 → 18.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/bundle-win-arm64.mjs +1808 -985
- package/dist/cli.cjs +1808 -985
- package/dist/index.cjs +331 -33
- package/dist/index.js +331 -33
- package/dist/lib/commands/init.d.ts.map +1 -1
- package/dist/lib/commands/push.d.ts.map +1 -1
- package/dist/lib/commands/run.d.ts.map +1 -1
- package/dist/lib/commands/update.d.ts.map +1 -1
- package/dist/lib/constants.d.ts +2 -2
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/emulation/docker.d.ts +1 -0
- package/dist/lib/emulation/docker.d.ts.map +1 -1
- package/dist/lib/emulation/utils.d.ts +1 -1
- package/dist/lib/questions.d.ts.map +1 -1
- package/dist/lib/sdks.d.ts +1 -1
- package/dist/lib/sdks.d.ts.map +1 -1
- package/dist/lib/utils.d.ts +8 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/package.json +9 -5
package/dist/index.js
CHANGED
|
@@ -35490,7 +35490,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
35490
35490
|
}
|
|
35491
35491
|
return positiveOption || option2;
|
|
35492
35492
|
};
|
|
35493
|
-
const
|
|
35493
|
+
const getErrorMessage2 = (option2) => {
|
|
35494
35494
|
const bestOption = findBestOptionFromValue(option2);
|
|
35495
35495
|
const optionKey = bestOption.attributeName();
|
|
35496
35496
|
const source = this.getOptionValueSource(optionKey);
|
|
@@ -35499,7 +35499,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
35499
35499
|
}
|
|
35500
35500
|
return `option '${bestOption.flags}'`;
|
|
35501
35501
|
};
|
|
35502
|
-
const message = `error: ${
|
|
35502
|
+
const message = `error: ${getErrorMessage2(option)} cannot be used with ${getErrorMessage2(conflictingOption)}`;
|
|
35503
35503
|
this.error(message, { code: "commander.conflictingOption" });
|
|
35504
35504
|
}
|
|
35505
35505
|
/**
|
|
@@ -64940,6 +64940,7 @@ var import_inquirer3 = __toESM(require_inquirer(), 1);
|
|
|
64940
64940
|
import fs4 from "fs";
|
|
64941
64941
|
import path2 from "path";
|
|
64942
64942
|
import readline from "node:readline";
|
|
64943
|
+
import { stripVTControlCharacters } from "node:util";
|
|
64943
64944
|
|
|
64944
64945
|
// node_modules/commander/esm.mjs
|
|
64945
64946
|
var import_index = __toESM(require_commander(), 1);
|
|
@@ -64987,7 +64988,7 @@ var id_default = ID;
|
|
|
64987
64988
|
// lib/constants.ts
|
|
64988
64989
|
var SDK_TITLE = "Appwrite";
|
|
64989
64990
|
var SDK_TITLE_LOWER = "appwrite";
|
|
64990
|
-
var SDK_VERSION = "18.
|
|
64991
|
+
var SDK_VERSION = "18.2.0";
|
|
64991
64992
|
var SDK_LOGO = "\n _ _ _ ___ __ _____\n /_\\ _ __ _ ____ ___ __(_) |_ ___ / __\\ / / \\_ \\\n //_\\\\| '_ \\| '_ \\ \\ /\\ / / '__| | __/ _ \\ / / / / / /\\/\n / _ \\ |_) | |_) \\ V V /| | | | || __/ / /___/ /___/\\/ /_\n \\_/ \\_/ .__/| .__/ \\_/\\_/ |_| |_|\\__\\___| \\____/\\____/\\____/\n |_| |_|\n\n";
|
|
64992
64993
|
var EXECUTABLE_NAME = "appwrite";
|
|
64993
64994
|
var UPDATE_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
|
|
@@ -65006,6 +65007,7 @@ var CONFIG_RESOURCE_KEYS = [
|
|
|
65006
65007
|
"tablesDB",
|
|
65007
65008
|
"tables",
|
|
65008
65009
|
"teams",
|
|
65010
|
+
"webhooks",
|
|
65009
65011
|
"collections"
|
|
65010
65012
|
];
|
|
65011
65013
|
var TOP_LEVEL_RESOURCE_ARRAY_KEYS = new Set(
|
|
@@ -79263,6 +79265,8 @@ var getSafeDirectoryName = (value, fallback) => {
|
|
|
79263
79265
|
var siteRequiresBuildCommand = (site) => {
|
|
79264
79266
|
return !(site.framework === "other" && site.adapter === "static");
|
|
79265
79267
|
};
|
|
79268
|
+
var WINDOWS_EXECUTABLE_NAME = `${EXECUTABLE_NAME.toLowerCase()}.exe`;
|
|
79269
|
+
var HOMEBREW_FORMULA_NAME = EXECUTABLE_NAME.toLowerCase();
|
|
79266
79270
|
var isCloudHostname = (hostname3) => hostname3 === "cloud.appwrite.io" || hostname3.endsWith(".cloud.appwrite.io");
|
|
79267
79271
|
var getConsoleBaseUrl = (endpoint) => {
|
|
79268
79272
|
try {
|
|
@@ -103646,7 +103650,7 @@ var package_default = {
|
|
|
103646
103650
|
type: "module",
|
|
103647
103651
|
homepage: "https://appwrite.io/support",
|
|
103648
103652
|
description: "Appwrite is an open-source self-hosted backend server that abstracts and simplifies complex and repetitive development tasks behind a very simple REST API",
|
|
103649
|
-
version: "18.0
|
|
103653
|
+
version: "18.2.0",
|
|
103650
103654
|
license: "BSD-3-Clause",
|
|
103651
103655
|
main: "dist/index.cjs",
|
|
103652
103656
|
module: "dist/index.js",
|
|
@@ -103678,9 +103682,9 @@ var package_default = {
|
|
|
103678
103682
|
"build:types": "tsc -p tsconfig.json --emitDeclarationOnly",
|
|
103679
103683
|
"build:runtime": "npm run build:lib:runtime && npm run build:cli",
|
|
103680
103684
|
"build:lib:runtime": "npm run build:lib:esm && npm run build:lib:cjs",
|
|
103681
|
-
"build:lib:esm": "esbuild index.ts --bundle --platform=node --target=node18 --format=esm --loader:.hbs=text --outfile=dist/index.js",
|
|
103682
|
-
"build:lib:cjs": "esbuild index.ts --bundle --platform=node --target=node18 --format=cjs --loader:.hbs=text --outfile=dist/index.cjs",
|
|
103683
|
-
"build:cli": "esbuild cli.ts --bundle --platform=node --target=node18 --format=cjs --loader:.hbs=text --external:fsevents --outfile=dist/cli.cjs",
|
|
103685
|
+
"build:lib:esm": "esbuild index.ts --bundle --platform=node --target=node18 --format=esm --loader:.hbs=text --external:terminal-image --outfile=dist/index.js",
|
|
103686
|
+
"build:lib:cjs": "esbuild index.ts --bundle --platform=node --target=node18 --format=cjs --loader:.hbs=text --external:terminal-image --outfile=dist/index.cjs",
|
|
103687
|
+
"build:cli": "esbuild cli.ts --bundle --platform=node --target=node18 --format=cjs --loader:.hbs=text --external:fsevents --external:terminal-image --outfile=dist/cli.cjs",
|
|
103684
103688
|
lint: "eslint .",
|
|
103685
103689
|
format: 'prettier --write "**/*.{js,ts,json,md}"',
|
|
103686
103690
|
generate: "tsx scripts/generate-commands.ts",
|
|
@@ -103691,7 +103695,7 @@ var package_default = {
|
|
|
103691
103695
|
"mac-x64": "bun build cli.ts --compile --sourcemap=inline --target=bun-darwin-x64 --outfile build/appwrite-cli-darwin-x64",
|
|
103692
103696
|
"mac-arm64": "bun build cli.ts --compile --sourcemap=inline --target=bun-darwin-arm64 --outfile build/appwrite-cli-darwin-arm64",
|
|
103693
103697
|
"windows-x64": "bun build cli.ts --compile --sourcemap=inline --target=bun-windows-x64 --outfile build/appwrite-cli-win-x64.exe",
|
|
103694
|
-
"windows-arm64": "esbuild cli.ts --bundle --loader:.hbs=text --platform=node --target=node18 --format=esm --external:fsevents --outfile=dist/bundle-win-arm64.mjs && pkg dist/bundle-win-arm64.mjs -t node18-win-arm64 -o build/appwrite-cli-win-arm64.exe"
|
|
103698
|
+
"windows-arm64": "esbuild cli.ts --bundle --loader:.hbs=text --platform=node --target=node18 --format=esm --external:fsevents --external:terminal-image --outfile=dist/bundle-win-arm64.mjs && pkg dist/bundle-win-arm64.mjs -t node18-win-arm64 -o build/appwrite-cli-win-arm64.exe"
|
|
103695
103699
|
},
|
|
103696
103700
|
dependencies: {
|
|
103697
103701
|
"@appwrite.io/console": "~9.1.0",
|
|
@@ -103710,9 +103714,13 @@ var package_default = {
|
|
|
103710
103714
|
"string-width": "^7.2.0",
|
|
103711
103715
|
tail: "^2.2.6",
|
|
103712
103716
|
tar: "^7.4.3",
|
|
103717
|
+
"terminal-image": "^3.1.1",
|
|
103713
103718
|
undici: "^6.24.0",
|
|
103714
103719
|
zod: "^4.3.5"
|
|
103715
103720
|
},
|
|
103721
|
+
overrides: {
|
|
103722
|
+
phin: "3.7.1"
|
|
103723
|
+
},
|
|
103716
103724
|
devDependencies: {
|
|
103717
103725
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
103718
103726
|
"@typescript-eslint/parser": "^8.0.0",
|
|
@@ -105022,9 +105030,9 @@ var import_chalk5 = __toESM(require_source(), 1);
|
|
|
105022
105030
|
|
|
105023
105031
|
// lib/sdks.ts
|
|
105024
105032
|
import os5 from "os";
|
|
105025
|
-
var sdkForConsole = async (requiresAuth = true) => {
|
|
105033
|
+
var sdkForConsole = async (requiresAuth = true, endpointOverride) => {
|
|
105026
105034
|
const client = new Client();
|
|
105027
|
-
const endpoint = globalConfig2.getEndpoint() || DEFAULT_ENDPOINT;
|
|
105035
|
+
const endpoint = endpointOverride || globalConfig2.getEndpoint() || DEFAULT_ENDPOINT;
|
|
105028
105036
|
const cookie = globalConfig2.getCookie();
|
|
105029
105037
|
const selfSigned = globalConfig2.getSelfSigned();
|
|
105030
105038
|
if (requiresAuth && cookie === "") {
|
|
@@ -105145,11 +105153,23 @@ var getWebhooksService = async (sdk) => {
|
|
|
105145
105153
|
|
|
105146
105154
|
// lib/questions.ts
|
|
105147
105155
|
var whenOverride = (answers) => answers.override === void 0 ? true : answers.override;
|
|
105156
|
+
var buildSelectionLabel = (name, id) => `${name} (${id})`;
|
|
105157
|
+
var extractSelectionId = (value) => {
|
|
105158
|
+
const match = value.match(/\(([^()]+)\)$/);
|
|
105159
|
+
return match ? match[1] : value;
|
|
105160
|
+
};
|
|
105161
|
+
var getInitProjectOverrideMessage = () => {
|
|
105162
|
+
const projectName = localConfig.getProject().projectName;
|
|
105163
|
+
if (projectName) {
|
|
105164
|
+
return `A project is already linked to this directory (${projectName}). Override?`;
|
|
105165
|
+
}
|
|
105166
|
+
return "A project is already linked to this directory. Override?";
|
|
105167
|
+
};
|
|
105148
105168
|
var questionsInitProject = [
|
|
105149
105169
|
{
|
|
105150
105170
|
type: "confirm",
|
|
105151
105171
|
name: "override",
|
|
105152
|
-
message:
|
|
105172
|
+
message: getInitProjectOverrideMessage(),
|
|
105153
105173
|
when() {
|
|
105154
105174
|
return Object.keys(localConfig.getProject()).length !== 0;
|
|
105155
105175
|
}
|
|
@@ -105158,14 +105178,14 @@ var questionsInitProject = [
|
|
|
105158
105178
|
type: "list",
|
|
105159
105179
|
name: "start",
|
|
105160
105180
|
when: whenOverride,
|
|
105161
|
-
message: "
|
|
105181
|
+
message: "Select a setup method:",
|
|
105162
105182
|
choices: [
|
|
105163
105183
|
{
|
|
105164
|
-
name: "Create new project",
|
|
105184
|
+
name: "Create a new project",
|
|
105165
105185
|
value: "new"
|
|
105166
105186
|
},
|
|
105167
105187
|
{
|
|
105168
|
-
name: "Link directory to an existing project",
|
|
105188
|
+
name: "Link this directory to an existing project",
|
|
105169
105189
|
value: "existing"
|
|
105170
105190
|
}
|
|
105171
105191
|
]
|
|
@@ -105173,7 +105193,7 @@ var questionsInitProject = [
|
|
|
105173
105193
|
{
|
|
105174
105194
|
type: "search-list",
|
|
105175
105195
|
name: "organization",
|
|
105176
|
-
message: "Choose your organization",
|
|
105196
|
+
message: "Choose your organization:",
|
|
105177
105197
|
choices: async () => {
|
|
105178
105198
|
const client = await sdkForConsole(true);
|
|
105179
105199
|
const { teams } = isCloud() ? await paginate(
|
|
@@ -105192,9 +105212,10 @@ var questionsInitProject = [
|
|
|
105192
105212
|
"teams"
|
|
105193
105213
|
);
|
|
105194
105214
|
const choices = teams.map((team, _idx) => {
|
|
105215
|
+
const label = buildSelectionLabel(team.name, team["$id"]);
|
|
105195
105216
|
return {
|
|
105196
|
-
name:
|
|
105197
|
-
value:
|
|
105217
|
+
name: label,
|
|
105218
|
+
value: label
|
|
105198
105219
|
};
|
|
105199
105220
|
});
|
|
105200
105221
|
if (choices.length == 0) {
|
|
@@ -105223,13 +105244,13 @@ var questionsInitProject = [
|
|
|
105223
105244
|
{
|
|
105224
105245
|
type: "search-list",
|
|
105225
105246
|
name: "project",
|
|
105226
|
-
message:
|
|
105247
|
+
message: "Choose your project:",
|
|
105227
105248
|
choices: async (answers) => {
|
|
105228
105249
|
const queries = [
|
|
105229
105250
|
JSON.stringify({
|
|
105230
105251
|
method: "equal",
|
|
105231
105252
|
attribute: "teamId",
|
|
105232
|
-
values: [answers.organization]
|
|
105253
|
+
values: [extractSelectionId(answers.organization)]
|
|
105233
105254
|
}),
|
|
105234
105255
|
JSON.stringify({ method: "orderDesc", attribute: "$id" })
|
|
105235
105256
|
];
|
|
@@ -105241,14 +105262,10 @@ var questionsInitProject = [
|
|
|
105241
105262
|
queries
|
|
105242
105263
|
);
|
|
105243
105264
|
const choices = projects.map((project) => {
|
|
105244
|
-
const label =
|
|
105265
|
+
const label = buildSelectionLabel(project.name, project["$id"]);
|
|
105245
105266
|
return {
|
|
105246
105267
|
name: label,
|
|
105247
|
-
|
|
105248
|
-
value: {
|
|
105249
|
-
$id: project["$id"],
|
|
105250
|
-
region: project.region || ""
|
|
105251
|
-
}
|
|
105268
|
+
value: label
|
|
105252
105269
|
};
|
|
105253
105270
|
});
|
|
105254
105271
|
if (choices.length === 0) {
|
|
@@ -106817,8 +106834,18 @@ var DEPLOYMENT_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
|
106817
106834
|
var DEPLOYMENT_TIMEOUT_MINUTES = Math.round(
|
|
106818
106835
|
DEPLOYMENT_TIMEOUT_MS / (60 * 1e3)
|
|
106819
106836
|
);
|
|
106837
|
+
var SITE_SCREENSHOT_FINALIZATION_TIMEOUT_MS = 30 * 1e3;
|
|
106838
|
+
var SITE_SCREENSHOT_BUCKET_ID = "screenshots";
|
|
106839
|
+
var SITE_SCREENSHOT_PREVIEW_WIDTH = 480;
|
|
106840
|
+
var SITE_SCREENSHOT_PREVIEW_HEIGHT = 270;
|
|
106841
|
+
var SITE_TERMINAL_PREVIEW_TARGET_WIDTH = 72;
|
|
106842
|
+
var SITE_TERMINAL_PREVIEW_MAX_WIDTH = 80;
|
|
106843
|
+
var SITE_TERMINAL_PREVIEW_MAX_HEIGHT = 22;
|
|
106844
|
+
var SITE_TERMINAL_PREVIEW_MIN_HEIGHT = 8;
|
|
106820
106845
|
var WAITING_JOKE_THRESHOLD_MS = 30 * 1e3;
|
|
106821
106846
|
var WAITING_JOKE_URL = "https://xkcd.com/303/";
|
|
106847
|
+
var ANSI_RESET = "\x1B[0m";
|
|
106848
|
+
var terminalImageModulePromise;
|
|
106822
106849
|
function getDeploymentProgressText(status, waitingSince) {
|
|
106823
106850
|
if (status === "waiting" && waitingSince !== null && Date.now() - waitingSince >= WAITING_JOKE_THRESHOLD_MS) {
|
|
106824
106851
|
return `Still waiting... ${WAITING_JOKE_URL}`;
|
|
@@ -106828,6 +106855,184 @@ function getDeploymentProgressText(status, waitingSince) {
|
|
|
106828
106855
|
function getDeploymentTimeoutErrorMessage() {
|
|
106829
106856
|
return `Deployment got stuck for more than ${DEPLOYMENT_TIMEOUT_MINUTES} minutes`;
|
|
106830
106857
|
}
|
|
106858
|
+
async function getTerminalImage() {
|
|
106859
|
+
terminalImageModulePromise ??= import("terminal-image").then(
|
|
106860
|
+
(module) => module.default
|
|
106861
|
+
);
|
|
106862
|
+
return terminalImageModulePromise;
|
|
106863
|
+
}
|
|
106864
|
+
function getErrorMessage(error49) {
|
|
106865
|
+
if (error49 instanceof Error && error49.message.trim().length > 0) {
|
|
106866
|
+
return error49.message.trim();
|
|
106867
|
+
}
|
|
106868
|
+
if (Array.isArray(error49)) {
|
|
106869
|
+
const messages = error49.map((entry) => getErrorMessage(entry)).filter((entry) => entry !== "Unknown error");
|
|
106870
|
+
if (messages.length > 0) {
|
|
106871
|
+
return messages.join("; ");
|
|
106872
|
+
}
|
|
106873
|
+
}
|
|
106874
|
+
if (typeof error49 === "string" && error49.trim().length > 0) {
|
|
106875
|
+
return error49.trim();
|
|
106876
|
+
}
|
|
106877
|
+
if (error49 && typeof error49 === "object") {
|
|
106878
|
+
const objectMessage = Reflect.get(error49, "message");
|
|
106879
|
+
if (typeof objectMessage === "string" && objectMessage.trim().length > 0) {
|
|
106880
|
+
return objectMessage.trim();
|
|
106881
|
+
}
|
|
106882
|
+
try {
|
|
106883
|
+
return JSON.stringify(error49);
|
|
106884
|
+
} catch (_serializationError) {
|
|
106885
|
+
}
|
|
106886
|
+
}
|
|
106887
|
+
return "Unknown error";
|
|
106888
|
+
}
|
|
106889
|
+
function getSiteDeploymentScreenshots(deployment) {
|
|
106890
|
+
const screenshotLight = typeof deployment["screenshotLight"] === "string" && deployment["screenshotLight"].trim().length > 0 ? deployment["screenshotLight"] : void 0;
|
|
106891
|
+
const screenshotDark = typeof deployment["screenshotDark"] === "string" && deployment["screenshotDark"].trim().length > 0 ? deployment["screenshotDark"] : void 0;
|
|
106892
|
+
return {
|
|
106893
|
+
screenshotLight,
|
|
106894
|
+
screenshotDark
|
|
106895
|
+
};
|
|
106896
|
+
}
|
|
106897
|
+
function hasSiteDeploymentScreenshots(deployment) {
|
|
106898
|
+
const { screenshotLight, screenshotDark } = getSiteDeploymentScreenshots(deployment);
|
|
106899
|
+
return Boolean(screenshotLight || screenshotDark);
|
|
106900
|
+
}
|
|
106901
|
+
function shouldRenderSiteTerminalPreview() {
|
|
106902
|
+
return Boolean(process.stdout.isTTY) && !cliConfig.json && !cliConfig.raw;
|
|
106903
|
+
}
|
|
106904
|
+
function getSiteTerminalPreviewWidth() {
|
|
106905
|
+
const columns = process.stdout.columns ?? 80;
|
|
106906
|
+
return Math.max(
|
|
106907
|
+
16,
|
|
106908
|
+
Math.min(
|
|
106909
|
+
columns - 4,
|
|
106910
|
+
SITE_TERMINAL_PREVIEW_TARGET_WIDTH,
|
|
106911
|
+
SITE_TERMINAL_PREVIEW_MAX_WIDTH
|
|
106912
|
+
)
|
|
106913
|
+
);
|
|
106914
|
+
}
|
|
106915
|
+
function getSiteTerminalPreviewHeight() {
|
|
106916
|
+
const rows = process.stdout.rows ?? 24;
|
|
106917
|
+
return Math.max(
|
|
106918
|
+
SITE_TERMINAL_PREVIEW_MIN_HEIGHT,
|
|
106919
|
+
Math.min(rows - 10, SITE_TERMINAL_PREVIEW_MAX_HEIGHT)
|
|
106920
|
+
);
|
|
106921
|
+
}
|
|
106922
|
+
async function renderImageBufferToTerminalPreview(buffer) {
|
|
106923
|
+
const terminalImage = await getTerminalImage();
|
|
106924
|
+
const originalTermProgram = process.env.TERM_PROGRAM;
|
|
106925
|
+
const originalTermProgramVersion = process.env.TERM_PROGRAM_VERSION;
|
|
106926
|
+
const originalKonsoleVersion = process.env.KONSOLE_VERSION;
|
|
106927
|
+
const originalKittyWindowId = process.env.KITTY_WINDOW_ID;
|
|
106928
|
+
delete process.env.TERM_PROGRAM;
|
|
106929
|
+
delete process.env.TERM_PROGRAM_VERSION;
|
|
106930
|
+
delete process.env.KONSOLE_VERSION;
|
|
106931
|
+
delete process.env.KITTY_WINDOW_ID;
|
|
106932
|
+
try {
|
|
106933
|
+
return await terminalImage.buffer(buffer, {
|
|
106934
|
+
width: getSiteTerminalPreviewWidth(),
|
|
106935
|
+
height: getSiteTerminalPreviewHeight(),
|
|
106936
|
+
preserveAspectRatio: true
|
|
106937
|
+
});
|
|
106938
|
+
} finally {
|
|
106939
|
+
if (originalTermProgram === void 0) {
|
|
106940
|
+
delete process.env.TERM_PROGRAM;
|
|
106941
|
+
} else {
|
|
106942
|
+
process.env.TERM_PROGRAM = originalTermProgram;
|
|
106943
|
+
}
|
|
106944
|
+
if (originalTermProgramVersion === void 0) {
|
|
106945
|
+
delete process.env.TERM_PROGRAM_VERSION;
|
|
106946
|
+
} else {
|
|
106947
|
+
process.env.TERM_PROGRAM_VERSION = originalTermProgramVersion;
|
|
106948
|
+
}
|
|
106949
|
+
if (originalKonsoleVersion === void 0) {
|
|
106950
|
+
delete process.env.KONSOLE_VERSION;
|
|
106951
|
+
} else {
|
|
106952
|
+
process.env.KONSOLE_VERSION = originalKonsoleVersion;
|
|
106953
|
+
}
|
|
106954
|
+
if (originalKittyWindowId === void 0) {
|
|
106955
|
+
delete process.env.KITTY_WINDOW_ID;
|
|
106956
|
+
} else {
|
|
106957
|
+
process.env.KITTY_WINDOW_ID = originalKittyWindowId;
|
|
106958
|
+
}
|
|
106959
|
+
}
|
|
106960
|
+
}
|
|
106961
|
+
async function fetchSiteScreenshotPreview(params) {
|
|
106962
|
+
const previewUrl = params.renderer.storageService.getFilePreview({
|
|
106963
|
+
bucketId: SITE_SCREENSHOT_BUCKET_ID,
|
|
106964
|
+
fileId: params.fileId,
|
|
106965
|
+
width: SITE_SCREENSHOT_PREVIEW_WIDTH,
|
|
106966
|
+
height: SITE_SCREENSHOT_PREVIEW_HEIGHT,
|
|
106967
|
+
output: ImageFormat.Png
|
|
106968
|
+
});
|
|
106969
|
+
const imageData = await params.renderer.consoleClient.call(
|
|
106970
|
+
"get",
|
|
106971
|
+
new URL(previewUrl),
|
|
106972
|
+
{},
|
|
106973
|
+
{},
|
|
106974
|
+
"arrayBuffer"
|
|
106975
|
+
);
|
|
106976
|
+
if (!(imageData instanceof ArrayBuffer)) {
|
|
106977
|
+
throw new Error("Failed to download the site screenshot preview.");
|
|
106978
|
+
}
|
|
106979
|
+
return renderImageBufferToTerminalPreview(Buffer.from(imageData));
|
|
106980
|
+
}
|
|
106981
|
+
function frameTerminalPreview(preview) {
|
|
106982
|
+
const lines = preview.split("\n").map((line) => line.replace(/\s+$/, ""));
|
|
106983
|
+
while (lines.length > 0 && stripVTControlCharacters(lines[0]).trim().length === 0) {
|
|
106984
|
+
lines.shift();
|
|
106985
|
+
}
|
|
106986
|
+
while (lines.length > 0 && stripVTControlCharacters(lines[lines.length - 1]).trim().length === 0) {
|
|
106987
|
+
lines.pop();
|
|
106988
|
+
}
|
|
106989
|
+
if (lines.length === 0) {
|
|
106990
|
+
return "";
|
|
106991
|
+
}
|
|
106992
|
+
const contentWidth = Math.max(
|
|
106993
|
+
...lines.map((line) => stripVTControlCharacters(line).length)
|
|
106994
|
+
);
|
|
106995
|
+
const border = `+-${"-".repeat(contentWidth)}-+`;
|
|
106996
|
+
return [
|
|
106997
|
+
border,
|
|
106998
|
+
...lines.map((line) => {
|
|
106999
|
+
const visibleWidth = stripVTControlCharacters(line).length;
|
|
107000
|
+
return `| ${line}${ANSI_RESET}${" ".repeat(contentWidth - visibleWidth)} |`;
|
|
107001
|
+
}),
|
|
107002
|
+
border
|
|
107003
|
+
].join("\n");
|
|
107004
|
+
}
|
|
107005
|
+
async function renderSiteTerminalPreview(params) {
|
|
107006
|
+
const warnings = /* @__PURE__ */ new Set();
|
|
107007
|
+
const candidates = [
|
|
107008
|
+
{ fileId: params.screenshotDark, label: "dark" },
|
|
107009
|
+
{ fileId: params.screenshotLight, label: "light" }
|
|
107010
|
+
];
|
|
107011
|
+
for (const candidate of candidates) {
|
|
107012
|
+
const { fileId, label } = candidate;
|
|
107013
|
+
if (!fileId) {
|
|
107014
|
+
continue;
|
|
107015
|
+
}
|
|
107016
|
+
try {
|
|
107017
|
+
const preview = await fetchSiteScreenshotPreview({
|
|
107018
|
+
renderer: params.renderer,
|
|
107019
|
+
fileId
|
|
107020
|
+
});
|
|
107021
|
+
return {
|
|
107022
|
+
preview: frameTerminalPreview(preview),
|
|
107023
|
+
warnings: []
|
|
107024
|
+
};
|
|
107025
|
+
} catch (previewError) {
|
|
107026
|
+
warnings.add(
|
|
107027
|
+
`${label === "dark" ? "Dark mode" : "Light mode"} screenshot: ${getErrorMessage(previewError)}`
|
|
107028
|
+
);
|
|
107029
|
+
}
|
|
107030
|
+
}
|
|
107031
|
+
return {
|
|
107032
|
+
preview: void 0,
|
|
107033
|
+
warnings: [...warnings]
|
|
107034
|
+
};
|
|
107035
|
+
}
|
|
106831
107036
|
function withDeploymentLogsHint(message, deploymentLogsController) {
|
|
106832
107037
|
const hint2 = deploymentLogsController.getToggleHint();
|
|
106833
107038
|
return hint2.length > 0 ? `${message} \u2022 ${hint2}` : message;
|
|
@@ -107704,7 +107909,7 @@ var Push = class {
|
|
|
107704
107909
|
deploymentLogsController
|
|
107705
107910
|
)
|
|
107706
107911
|
});
|
|
107707
|
-
|
|
107912
|
+
let timeoutDeadline = Date.now() + DEPLOYMENT_TIMEOUT_MS;
|
|
107708
107913
|
while (true) {
|
|
107709
107914
|
if (Date.now() > timeoutDeadline) {
|
|
107710
107915
|
deploymentLogPrinter.complete();
|
|
@@ -108091,6 +108296,8 @@ var Push = class {
|
|
|
108091
108296
|
deploymentId
|
|
108092
108297
|
);
|
|
108093
108298
|
let waitingSince = null;
|
|
108299
|
+
let readyWithoutScreenshotsSince = null;
|
|
108300
|
+
let activationApplied = false;
|
|
108094
108301
|
const deploymentLogPrinter = createDeploymentLogPrinter({
|
|
108095
108302
|
label: `site:${site.name}`,
|
|
108096
108303
|
showPrefix: sites.length > 1,
|
|
@@ -108130,7 +108337,7 @@ var Push = class {
|
|
|
108130
108337
|
deploymentLogsController
|
|
108131
108338
|
)
|
|
108132
108339
|
});
|
|
108133
|
-
|
|
108340
|
+
let timeoutDeadline = Date.now() + DEPLOYMENT_TIMEOUT_MS;
|
|
108134
108341
|
while (true) {
|
|
108135
108342
|
if (Date.now() > timeoutDeadline) {
|
|
108136
108343
|
deploymentLogPrinter.complete();
|
|
@@ -108164,7 +108371,9 @@ var Push = class {
|
|
|
108164
108371
|
waitingSince = null;
|
|
108165
108372
|
}
|
|
108166
108373
|
if (status === "ready") {
|
|
108167
|
-
|
|
108374
|
+
const { screenshotLight, screenshotDark } = getSiteDeploymentScreenshots(response);
|
|
108375
|
+
const screenshotsReady = hasSiteDeploymentScreenshots(response);
|
|
108376
|
+
if (activate && !activationApplied) {
|
|
108168
108377
|
currentDeploymentEnd = "Setting active deployment...";
|
|
108169
108378
|
updaterRow.update({
|
|
108170
108379
|
status: "Activating",
|
|
@@ -108180,6 +108389,28 @@ var Push = class {
|
|
|
108180
108389
|
siteId: site["$id"],
|
|
108181
108390
|
deploymentId
|
|
108182
108391
|
});
|
|
108392
|
+
activationApplied = true;
|
|
108393
|
+
}
|
|
108394
|
+
if (!screenshotsReady) {
|
|
108395
|
+
readyWithoutScreenshotsSince ??= Date.now();
|
|
108396
|
+
timeoutDeadline = Math.max(
|
|
108397
|
+
timeoutDeadline,
|
|
108398
|
+
readyWithoutScreenshotsSince + SITE_SCREENSHOT_FINALIZATION_TIMEOUT_MS
|
|
108399
|
+
);
|
|
108400
|
+
if (Date.now() - readyWithoutScreenshotsSince < SITE_SCREENSHOT_FINALIZATION_TIMEOUT_MS) {
|
|
108401
|
+
currentDeploymentEnd = "Finalizing deployment preview...";
|
|
108402
|
+
updaterRow.update({
|
|
108403
|
+
status: "Finalizing",
|
|
108404
|
+
end: withDeploymentLogsHint(
|
|
108405
|
+
currentDeploymentEnd,
|
|
108406
|
+
deploymentLogsController
|
|
108407
|
+
)
|
|
108408
|
+
});
|
|
108409
|
+
await new Promise(
|
|
108410
|
+
(resolve3) => setTimeout(resolve3, POLL_DEBOUNCE2)
|
|
108411
|
+
);
|
|
108412
|
+
continue;
|
|
108413
|
+
}
|
|
108183
108414
|
}
|
|
108184
108415
|
successfullyDeployed++;
|
|
108185
108416
|
let url2 = "";
|
|
@@ -108206,7 +108437,14 @@ var Push = class {
|
|
|
108206
108437
|
status: activate ? "Deployed" : "Built",
|
|
108207
108438
|
end: ""
|
|
108208
108439
|
});
|
|
108209
|
-
deploymentLogs.push({
|
|
108440
|
+
deploymentLogs.push({
|
|
108441
|
+
name: site.name,
|
|
108442
|
+
url: url2,
|
|
108443
|
+
consoleUrl,
|
|
108444
|
+
screenshotLight,
|
|
108445
|
+
screenshotDark,
|
|
108446
|
+
screenshotsPending: !screenshotsReady
|
|
108447
|
+
});
|
|
108210
108448
|
break;
|
|
108211
108449
|
} else if (status === "failed") {
|
|
108212
108450
|
deploymentLogPrinter.complete();
|
|
@@ -108261,16 +108499,76 @@ var Push = class {
|
|
|
108261
108499
|
Spinner.stop();
|
|
108262
108500
|
}
|
|
108263
108501
|
if (deploymentLogs.length > 0) {
|
|
108502
|
+
let sitePreviewRenderer = null;
|
|
108503
|
+
let sitePreviewSetupWarning = null;
|
|
108504
|
+
const emittedPreviewWarnings = /* @__PURE__ */ new Set();
|
|
108505
|
+
if (shouldRenderSiteTerminalPreview() && deploymentLogs.some(
|
|
108506
|
+
(deploymentLog) => deploymentLog.screenshotLight || deploymentLog.screenshotDark
|
|
108507
|
+
)) {
|
|
108508
|
+
try {
|
|
108509
|
+
const consoleClient = await sdkForConsole(
|
|
108510
|
+
true,
|
|
108511
|
+
localConfig.getEndpoint() || globalConfig2.getEndpoint()
|
|
108512
|
+
);
|
|
108513
|
+
sitePreviewRenderer = {
|
|
108514
|
+
consoleClient,
|
|
108515
|
+
storageService: await getStorageService(consoleClient)
|
|
108516
|
+
};
|
|
108517
|
+
} catch (previewSetupError) {
|
|
108518
|
+
sitePreviewSetupWarning = getErrorMessage(previewSetupError);
|
|
108519
|
+
}
|
|
108520
|
+
}
|
|
108264
108521
|
process.stdout.write("\n");
|
|
108265
|
-
deploymentLogs.
|
|
108522
|
+
for (const [index, dl] of deploymentLogs.entries()) {
|
|
108266
108523
|
if (index > 0) {
|
|
108267
108524
|
process.stdout.write("\n");
|
|
108268
108525
|
}
|
|
108526
|
+
if (deploymentLogs.length > 1) {
|
|
108527
|
+
process.stdout.write(`${import_chalk9.default.cyan.bold(`Site: ${dl.name}`)}
|
|
108528
|
+
`);
|
|
108529
|
+
}
|
|
108530
|
+
if (dl.screenshotsPending) {
|
|
108531
|
+
hint(
|
|
108532
|
+
"Deployment is ready, but screenshot generation is still finalizing. Open the deployment page to view it once it is available."
|
|
108533
|
+
);
|
|
108534
|
+
}
|
|
108535
|
+
if (sitePreviewRenderer && (dl.screenshotLight || dl.screenshotDark)) {
|
|
108536
|
+
const preview = await renderSiteTerminalPreview({
|
|
108537
|
+
renderer: sitePreviewRenderer,
|
|
108538
|
+
screenshotLight: dl.screenshotLight,
|
|
108539
|
+
screenshotDark: dl.screenshotDark
|
|
108540
|
+
});
|
|
108541
|
+
if (preview.preview) {
|
|
108542
|
+
process.stdout.write(
|
|
108543
|
+
`
|
|
108544
|
+
${import_chalk9.default.cyan.bold("Screenshot preview")}
|
|
108545
|
+
|
|
108546
|
+
`
|
|
108547
|
+
);
|
|
108548
|
+
process.stdout.write(`${preview.preview}
|
|
108549
|
+
|
|
108550
|
+
`);
|
|
108551
|
+
}
|
|
108552
|
+
for (const previewWarning of preview.warnings) {
|
|
108553
|
+
const warningMessage = `Screenshot preview unavailable: ${previewWarning}`;
|
|
108554
|
+
if (emittedPreviewWarnings.has(warningMessage)) {
|
|
108555
|
+
continue;
|
|
108556
|
+
}
|
|
108557
|
+
emittedPreviewWarnings.add(warningMessage);
|
|
108558
|
+
hint(warningMessage);
|
|
108559
|
+
}
|
|
108560
|
+
} else if (sitePreviewSetupWarning && (dl.screenshotLight || dl.screenshotDark)) {
|
|
108561
|
+
const warningMessage = `Screenshot preview unavailable: ${sitePreviewSetupWarning}`;
|
|
108562
|
+
if (!emittedPreviewWarnings.has(warningMessage)) {
|
|
108563
|
+
emittedPreviewWarnings.add(warningMessage);
|
|
108564
|
+
hint(warningMessage);
|
|
108565
|
+
}
|
|
108566
|
+
}
|
|
108269
108567
|
if (dl.url) {
|
|
108270
108568
|
this.log(`Preview link: ${import_chalk9.default.cyan(dl.url)}`);
|
|
108271
108569
|
}
|
|
108272
108570
|
this.log(`Deployment page: ${import_chalk9.default.cyan(dl.consoleUrl)}`);
|
|
108273
|
-
}
|
|
108571
|
+
}
|
|
108274
108572
|
process.stdout.write("\n");
|
|
108275
108573
|
}
|
|
108276
108574
|
return {
|
|
@@ -110521,7 +110819,7 @@ var BaseDatabasesGenerator = class {
|
|
|
110521
110819
|
};
|
|
110522
110820
|
|
|
110523
110821
|
// lib/commands/generators/typescript/templates/types.ts.hbs
|
|
110524
|
-
var types_ts_default = "import { type Models } from '{{appwriteDep}}';\n\n{{{ENUMS}}}{{{TYPES}}}\ndeclare const __roleStringBrand: unique symbol;\nexport type RoleString = string & { readonly [__roleStringBrand]: never };\n\nexport type RoleBuilder = {\n any: () => RoleString;\n user: (userId: string, status?: string) => RoleString;\n users: (status?: string) => RoleString;\n guests: () => RoleString;\n team: (teamId: string, role?: string) => RoleString;\n member: (memberId: string) => RoleString;\n label: (label: string) => RoleString;\n}\n\nexport type PermissionBuilder = {\n read: (role: RoleString) => string;\n write: (role: RoleString) => string;\n create: (role: RoleString) => string;\n update: (role: RoleString) => string;\n delete: (role: RoleString) => string;\n}\n\nexport type PermissionCallback = (permission: PermissionBuilder, role: RoleBuilder) => string[];\n\nexport type QueryValue = string | number | boolean;\n\nexport type ExtractQueryValue<T> = T extends (infer U)[]\n ? U extends QueryValue ? U : never\n : T extends QueryValue | null ? NonNullable<T> : never;\n\nexport type QueryableKeys<T> = {\n [K in keyof T]: ExtractQueryValue<T[K]> extends never ? never : K;\n}[keyof T];\n\nexport type QueryBuilder<T> = {\n equal: <K extends QueryableKeys<T>>(field: K, value:
|
|
110822
|
+
var types_ts_default = "import { type Models } from '{{appwriteDep}}';\n\n{{{ENUMS}}}{{{TYPES}}}\ndeclare const __roleStringBrand: unique symbol;\nexport type RoleString = string & { readonly [__roleStringBrand]: never };\n\nexport type RoleBuilder = {\n any: () => RoleString;\n user: (userId: string, status?: string) => RoleString;\n users: (status?: string) => RoleString;\n guests: () => RoleString;\n team: (teamId: string, role?: string) => RoleString;\n member: (memberId: string) => RoleString;\n label: (label: string) => RoleString;\n}\n\nexport type PermissionBuilder = {\n read: (role: RoleString) => string;\n write: (role: RoleString) => string;\n create: (role: RoleString) => string;\n update: (role: RoleString) => string;\n delete: (role: RoleString) => string;\n}\n\nexport type PermissionCallback = (permission: PermissionBuilder, role: RoleBuilder) => string[];\n\nexport type QueryValue = string | number | boolean;\n\nexport type ExtractQueryValue<T> = T extends (infer U)[]\n ? U extends QueryValue ? U : never\n : T extends QueryValue | null ? NonNullable<T> : never;\n\nexport type QueryableKeys<T> = {\n [K in keyof T]: ExtractQueryValue<T[K]> extends never ? never : K;\n}[keyof T];\n\nexport type QueryableFieldValue<T, K> = K extends keyof T\n ? ExtractQueryValue<T[K]>\n : never;\n\nexport type QueryBuilder<T> = {\n equal: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n notEqual: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n lessThan: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n lessThanEqual: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n greaterThan: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n greaterThanEqual: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n contains: <K extends QueryableKeys<T>>(field: K, value: QueryableFieldValue<T, K>) => string;\n search: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n isNull: <K extends QueryableKeys<T>>(field: K) => string;\n isNotNull: <K extends QueryableKeys<T>>(field: K) => string;\n startsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n endsWith: <K extends QueryableKeys<T>>(field: K, value: string) => string;\n between: <K extends QueryableKeys<T>>(field: K, start: QueryableFieldValue<T, K>, end: QueryableFieldValue<T, K>) => string;\n select: <K extends keyof T>(fields: K[]) => string;\n orderAsc: <K extends keyof T>(field: K) => string;\n orderDesc: <K extends keyof T>(field: K) => string;\n limit: (value: number) => string;\n offset: (value: number) => string;\n cursorAfter: (documentId: string) => string;\n cursorBefore: (documentId: string) => string;\n or: (...queries: string[]) => string;\n and: (...queries: string[]) => string;\n}\n\nexport type DatabaseId = {{{databaseIdType}}};\n\n{{{DATABASE_TABLES_TYPE}}}\n";
|
|
110525
110823
|
|
|
110526
110824
|
// lib/commands/generators/typescript/templates/databases.ts.hbs
|
|
110527
110825
|
var databases_ts_default = 'import { Client, TablesDB, ID, Query, type Models, Permission, Role } from \'{{appwriteDep}}\';\nimport type { DatabaseHandle, DatabaseId, DatabaseTableMap, DatabaseTables, QueryBuilder, QueryValue, PermissionBuilder, RoleBuilder, RoleString } from \'./types{{importExt}}\';\n{{#if supportsServerSide}}\nimport { PROJECT_ID, ENDPOINT, API_KEY } from \'./constants{{importExt}}\';\n{{else}}\nimport { PROJECT_ID, ENDPOINT } from \'./constants{{importExt}}\';\n{{/if}}\n\nconst createQueryBuilder = <T>(): QueryBuilder<T> => ({\n equal: (field, value) => Query.equal(String(field), value as QueryValue),\n notEqual: (field, value) => Query.notEqual(String(field), value as QueryValue),\n lessThan: (field, value) => Query.lessThan(String(field), value as QueryValue),\n lessThanEqual: (field, value) => Query.lessThanEqual(String(field), value as QueryValue),\n greaterThan: (field, value) => Query.greaterThan(String(field), value as QueryValue),\n greaterThanEqual: (field, value) => Query.greaterThanEqual(String(field), value as QueryValue),\n contains: (field, value) => Query.contains(String(field), value as string | QueryValue[]),\n search: (field, value) => Query.search(String(field), value),\n isNull: (field) => Query.isNull(String(field)),\n isNotNull: (field) => Query.isNotNull(String(field)),\n startsWith: (field, value) => Query.startsWith(String(field), value),\n endsWith: (field, value) => Query.endsWith(String(field), value),\n between: (field, start, end) => Query.between(String(field), start as string | number, end as string | number),\n select: (fields) => Query.select(fields.map(String)),\n orderAsc: (field) => Query.orderAsc(String(field)),\n orderDesc: (field) => Query.orderDesc(String(field)),\n limit: (value) => Query.limit(value),\n offset: (value) => Query.offset(value),\n cursorAfter: (documentId) => Query.cursorAfter(documentId),\n cursorBefore: (documentId) => Query.cursorBefore(documentId),\n or: (...queries) => Query.or(queries),\n and: (...queries) => Query.and(queries),\n});\n\n{{{TABLE_ID_MAP}}}\n\n{{{TABLES_WITH_RELATIONSHIPS}}}\n\nconst roleBuilder: RoleBuilder = {\n any: () => Role.any() as RoleString,\n user: (userId, status?) => Role.user(userId, status) as RoleString,\n users: (status?) => Role.users(status) as RoleString,\n guests: () => Role.guests() as RoleString,\n team: (teamId, role?) => Role.team(teamId, role) as RoleString,\n member: (memberId) => Role.member(memberId) as RoleString,\n label: (label) => Role.label(label) as RoleString,\n};\n\nconst permissionBuilder: PermissionBuilder = {\n read: (role) => Permission.read(role),\n write: (role) => Permission.write(role),\n create: (role) => Permission.create(role),\n update: (role) => Permission.update(role),\n delete: (role) => Permission.delete(role),\n};\n\nconst resolvePermissions = (callback?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]): string[] | undefined =>\n callback?.(permissionBuilder, roleBuilder);\n\nfunction createTableApi<T extends Models.Row>(\n tablesDB: TablesDB,\n databaseId: string,\n tableId: string,\n) {\n return {\n create: (data: Omit<T, keyof Models.Row>, options?: { rowId?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.createRow<T>({\n databaseId,\n tableId,\n rowId: options?.rowId ?? ID.unique(),\n data: data as T extends Models.DefaultRow ? Partial<Models.Row> & Record<string, unknown> : Partial<Models.Row> & Omit<T, keyof Models.Row>,\n permissions: resolvePermissions(options?.permissions),\n transactionId: options?.transactionId,\n }),\n get: (id: string) =>\n tablesDB.getRow<T>({\n databaseId,\n tableId,\n rowId: id,\n }),\n update: (id: string, data: Partial<Omit<T, keyof Models.Row>>, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; transactionId?: string }) =>\n tablesDB.updateRow<T>({\n databaseId,\n tableId,\n rowId: id,\n data: data as T extends Models.DefaultRow ? Partial<Models.Row> & Record<string, unknown> : Partial<Models.Row> & Partial<Omit<T, keyof Models.Row>>,\n ...(options?.permissions ? { permissions: resolvePermissions(options.permissions) } : {}),\n transactionId: options?.transactionId,\n }),\n delete: async (id: string, options?: { transactionId?: string }) => {\n await tablesDB.deleteRow({\n databaseId,\n tableId,\n rowId: id,\n transactionId: options?.transactionId,\n });\n },\n list: (options?: { queries?: (q: QueryBuilder<T>) => string[] }) =>\n tablesDB.listRows<T>({\n databaseId,\n tableId,\n queries: options?.queries?.(createQueryBuilder<T>()),\n }),{{{BULK_METHODS}}}\n };\n}\n\n{{{BULK_CHECK}}}\nconst hasOwn = (obj: unknown, key: string): boolean =>\n obj != null && Object.prototype.hasOwnProperty.call(obj, key);\n\nfunction createDatabaseHandle<D extends DatabaseId>(\n tablesDB: TablesDB,\n databaseId: D,\n): DatabaseHandle<D> {\n const tableApiCache = new Map<string, unknown>();\n const dbMap = tableIdMap[databaseId];\n\n return {\n use: <T extends keyof DatabaseTableMap[D] & string>(tableId: T): DatabaseTableMap[D][T] => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n\n if (!tableApiCache.has(tableId)) {\n const resolvedTableId = dbMap[tableId];\n const api = createTableApi(tablesDB, databaseId, resolvedTableId);\n {{{BULK_REMOVAL}}}\n tableApiCache.set(tableId, api);\n }\n return tableApiCache.get(tableId) as DatabaseTableMap[D][T];\n },\n{{#if supportsServerSide}}\n create: (tableId: string, name: string, options?: { permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean; columns?: object[]; indexes?: object[] }) =>\n tablesDB.createTable({\n databaseId,\n tableId,\n name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n columns: options?.columns,\n indexes: options?.indexes,\n }),\n update: (tableId: string, options?: { name?: string; permissions?: (permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]; rowSecurity?: boolean; enabled?: boolean }) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n return tablesDB.updateTable({\n databaseId,\n tableId: resolvedTableId,\n name: options?.name,\n permissions: resolvePermissions(options?.permissions),\n rowSecurity: options?.rowSecurity,\n enabled: options?.enabled,\n });\n },\n delete: async (tableId: string) => {\n if (!hasOwn(dbMap, tableId)) {\n throw new Error(`Unknown table "${tableId}" in database "${databaseId}"`);\n }\n const resolvedTableId = dbMap[tableId];\n await tablesDB.deleteTable({\n databaseId,\n tableId: resolvedTableId,\n });\n },\n{{/if}}\n };\n}\n\nfunction createDatabasesApi(tablesDB: TablesDB): DatabaseTables {\n const dbCache = new Map<DatabaseId, ReturnType<typeof createDatabaseHandle>>();\n\n return {\n use: (databaseId: DatabaseId) => {\n if (!hasOwn(tableIdMap, databaseId)) {\n throw new Error(`Unknown database "${databaseId}"`);\n }\n\n if (!dbCache.has(databaseId)) {\n dbCache.set(databaseId, createDatabaseHandle(tablesDB, databaseId));\n }\n return dbCache.get(databaseId);\n },\n{{#if supportsServerSide}}\n create: (databaseId: string, name: string, options?: { enabled?: boolean }) =>\n tablesDB.create({\n databaseId,\n name,\n enabled: options?.enabled,\n }),\n update: (databaseId: DatabaseId, options?: { name?: string; enabled?: boolean }) => {\n return tablesDB.update({\n databaseId,\n name: options?.name ?? databaseId,\n enabled: options?.enabled,\n });\n },\n delete: async (databaseId: DatabaseId) => {\n await tablesDB.delete({\n databaseId,\n });\n },\n{{/if}}\n } as DatabaseTables;\n}\n\n// Initialize client\nconst client = new Client()\n .setEndpoint(ENDPOINT)\n .setProject(PROJECT_ID){{#if supportsServerSide}}\n .setKey(API_KEY){{/if}};\n\nconst tablesDB = new TablesDB(client);\n\nexport const databases: DatabaseTables = createDatabasesApi(tablesDB);\n';
|
|
@@ -110538,7 +110836,7 @@ var databasesTemplate = import_handlebars.default.compile(String(databases_ts_de
|
|
|
110538
110836
|
var indexTemplate = import_handlebars.default.compile(String(index_ts_default));
|
|
110539
110837
|
var constantsTemplate = import_handlebars.default.compile(String(constants_ts_default));
|
|
110540
110838
|
var PERMISSION_CALLBACK_INLINE = `(permission: { read: (role: RoleString) => string; write: (role: RoleString) => string; create: (role: RoleString) => string; update: (role: RoleString) => string; delete: (role: RoleString) => string }, role: { any: () => RoleString; user: (userId: string, status?: string) => RoleString; users: (status?: string) => RoleString; guests: () => RoleString; team: (teamId: string, role?: string) => RoleString; member: (memberId: string) => RoleString; label: (label: string) => RoleString }) => string[]`;
|
|
110541
|
-
var getQueryCallbackInline = (typeName) => `(q: { equal: <K extends QueryableKeys<${typeName}>>(field: K, value:
|
|
110839
|
+
var getQueryCallbackInline = (typeName) => `(q: { equal: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; notEqual: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; lessThan: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; lessThanEqual: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; greaterThan: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; greaterThanEqual: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; contains: <K extends QueryableKeys<${typeName}>>(field: K, value: QueryableFieldValue<${typeName}, K>) => string; search: <K extends QueryableKeys<${typeName}>>(field: K, value: string) => string; isNull: <K extends QueryableKeys<${typeName}>>(field: K) => string; isNotNull: <K extends QueryableKeys<${typeName}>>(field: K) => string; startsWith: <K extends QueryableKeys<${typeName}>>(field: K, value: string) => string; endsWith: <K extends QueryableKeys<${typeName}>>(field: K, value: string) => string; between: <K extends QueryableKeys<${typeName}>>(field: K, start: QueryableFieldValue<${typeName}, K>, end: QueryableFieldValue<${typeName}, K>) => string; select: <K extends keyof ${typeName}>(fields: K[]) => string; orderAsc: <K extends keyof ${typeName}>(field: K) => string; orderDesc: <K extends keyof ${typeName}>(field: K) => string; limit: (value: number) => string; offset: (value: number) => string; cursorAfter: (documentId: string) => string; cursorBefore: (documentId: string) => string; or: (...queries: string[]) => string; and: (...queries: string[]) => string }) => string[]`;
|
|
110542
110840
|
var TypeScriptDatabasesGenerator = class extends BaseDatabasesGenerator {
|
|
110543
110841
|
language = "typescript";
|
|
110544
110842
|
fileExtension = "ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../lib/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../lib/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAu9BpC,eAAO,MAAM,IAAI,SAEqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../lib/commands/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../lib/commands/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../lib/commands/run.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../lib/commands/run.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgZpC,eAAO,MAAM,GAAG,SASb,CAAC"}
|