@powerhousedao/shared 6.1.0-staging.0 → 6.1.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/dist/{actions-UH5nIJcP.d.ts → actions-BqyQ1_K7.d.ts} +4 -4
- package/dist/{actions-UH5nIJcP.d.ts.map → actions-BqyQ1_K7.d.ts.map} +1 -1
- package/dist/clis/args/common-DPYlcz-d.mjs.map +1 -1
- package/dist/clis/args/index.d.mts +1 -1
- package/dist/clis/args/init.d.mts +3 -0
- package/dist/clis/args/init.d.mts.map +1 -1
- package/dist/clis/args/init.mjs +5 -0
- package/dist/clis/args/init.mjs.map +1 -1
- package/dist/clis/args/{service-LXIFUZ_8.d.mts → service-qS4yFF2I.d.mts} +3 -3
- package/dist/clis/args/{service-LXIFUZ_8.d.mts.map → service-qS4yFF2I.d.mts.map} +1 -1
- package/dist/clis/args/service.d.mts +1 -1
- package/dist/clis/build-config.d.mts.map +1 -1
- package/dist/clis/build-config.mjs +2 -1
- package/dist/clis/build-config.mjs.map +1 -1
- package/dist/clis/constants.d.mts +9 -4
- package/dist/clis/constants.d.mts.map +1 -1
- package/dist/clis/constants.mjs +8 -3
- package/dist/clis/constants.mjs.map +1 -1
- package/dist/clis/index.d.mts +13 -5
- package/dist/clis/index.d.mts.map +1 -1
- package/dist/clis/index.mjs +13 -3
- package/dist/clis/index.mjs.map +1 -1
- package/dist/connect/index.d.ts +20 -0
- package/dist/connect/index.d.ts.map +1 -1
- package/dist/connect/index.js +10 -1
- package/dist/connect/index.js.map +1 -1
- package/dist/document-drive/index.d.ts +2 -2
- package/dist/document-drive/index.d.ts.map +1 -1
- package/dist/document-drive/index.js +6 -10
- package/dist/document-drive/index.js.map +1 -1
- package/dist/document-model/index.d.ts +3 -3
- package/dist/document-model/index.js +211 -63
- package/dist/document-model/index.js.map +1 -1
- package/dist/{index-DkRWfM_V.d.ts → index-C2dRwmuW.d.ts} +46 -3
- package/dist/{index-DkRWfM_V.d.ts.map → index-C2dRwmuW.d.ts.map} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/processors/index.d.ts +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/{types-WzwAClp2.d.ts → types-DA_0pilk.d.ts} +2 -2
- package/dist/{types-WzwAClp2.d.ts.map → types-DA_0pilk.d.ts.map} +1 -1
- package/package.json +2 -1
package/dist/connect/index.d.ts
CHANGED
|
@@ -140,6 +140,16 @@ declare const runtimeEnvSchema: z.ZodObject<{
|
|
|
140
140
|
true: "true";
|
|
141
141
|
false: "false";
|
|
142
142
|
}>]>, z.ZodTransform<boolean, boolean | "true" | "false">>>;
|
|
143
|
+
PH_CONNECT_OPENPANEL_CLIENT_ID: z.ZodOptional<z.ZodString>;
|
|
144
|
+
PH_CONNECT_OPENPANEL_API_URL: z.ZodOptional<z.ZodString>;
|
|
145
|
+
PH_CONNECT_OPENPANEL_TRACK_UI_EVENTS: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
|
|
146
|
+
true: "true";
|
|
147
|
+
false: "false";
|
|
148
|
+
}>]>, z.ZodTransform<boolean, boolean | "true" | "false">>>;
|
|
149
|
+
PH_CONNECT_OPENPANEL_TRACK_OPERATIONS: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
|
|
150
|
+
true: "true";
|
|
151
|
+
false: "false";
|
|
152
|
+
}>]>, z.ZodTransform<boolean, boolean | "true" | "false">>>;
|
|
143
153
|
PH_CONNECT_SENTRY_RELEASE: z.ZodOptional<z.ZodString>;
|
|
144
154
|
PH_CONNECT_SENTRY_DSN: z.ZodOptional<z.ZodString>;
|
|
145
155
|
PH_CONNECT_SENTRY_ENV: z.ZodDefault<z.ZodString>;
|
|
@@ -285,6 +295,16 @@ declare const connectEnvSchema: z.ZodObject<{
|
|
|
285
295
|
true: "true";
|
|
286
296
|
false: "false";
|
|
287
297
|
}>]>, z.ZodTransform<boolean, boolean | "true" | "false">>>;
|
|
298
|
+
PH_CONNECT_OPENPANEL_CLIENT_ID: z.ZodOptional<z.ZodString>;
|
|
299
|
+
PH_CONNECT_OPENPANEL_API_URL: z.ZodOptional<z.ZodString>;
|
|
300
|
+
PH_CONNECT_OPENPANEL_TRACK_UI_EVENTS: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
|
|
301
|
+
true: "true";
|
|
302
|
+
false: "false";
|
|
303
|
+
}>]>, z.ZodTransform<boolean, boolean | "true" | "false">>>;
|
|
304
|
+
PH_CONNECT_OPENPANEL_TRACK_OPERATIONS: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
|
|
305
|
+
true: "true";
|
|
306
|
+
false: "false";
|
|
307
|
+
}>]>, z.ZodTransform<boolean, boolean | "true" | "false">>>;
|
|
288
308
|
PH_CONNECT_SENTRY_RELEASE: z.ZodOptional<z.ZodString>;
|
|
289
309
|
PH_CONNECT_SENTRY_DSN: z.ZodOptional<z.ZodString>;
|
|
290
310
|
PH_CONNECT_SENTRY_ENV: z.ZodDefault<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../connect/env-config.ts"],"mappings":";;;;;AAAwB;cA4BlB,cAAA,EAAc,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../connect/env-config.ts"],"mappings":";;;;;AAAwB;cA4BlB,cAAA,EAAc,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;cA0aP,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAWhB,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAKjB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KACjC,iBAAA,GAAoB,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,KACnC,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,gBAAA;;;;UASvB,cAAA;;;;EAIf,UAAA,GAAa,MAAA;EA/Bc;;;EAmC3B,OAAA,GAAU,MAAA;AAAA;;;;;;;;;;;iBAmEI,cAAA,CAAe,OAAA,GAAS,cAAA,GAAsB,UAAA;;;;;;;iBAgB9C,cAAA,CACd,OAAA,GAAS,cAAA,GACR,iBAAA;;;;;;;iBAYa,YAAA,CAAa,OAAA,GAAS,cAAA,GAAsB,eAAA;;;;;;;;;;;;;;;;iBAqB5C,aAAA,CAAc,MAAA,EAAQ,OAAA,CAAQ,UAAA;;;;;;;;;;;;;;;;;iBA4C9B,iBAAA,CAAkB,QAAA"}
|
package/dist/connect/index.js
CHANGED
|
@@ -100,6 +100,15 @@ const processorsConfigSchema = z.object({
|
|
|
100
100
|
PH_CONNECT_EXTERNAL_PROCESSORS_ENABLED: booleanString.default(true)
|
|
101
101
|
}).extend(analyticsProcessorsConfigSchema.shape).extend(relationalProcessorsConfigSchema.shape);
|
|
102
102
|
/**
|
|
103
|
+
* OpenPanel analytics configuration schema
|
|
104
|
+
*/
|
|
105
|
+
const openPanelConfigSchema = z.object({
|
|
106
|
+
PH_CONNECT_OPENPANEL_CLIENT_ID: z.string().optional(),
|
|
107
|
+
PH_CONNECT_OPENPANEL_API_URL: z.string().optional(),
|
|
108
|
+
PH_CONNECT_OPENPANEL_TRACK_UI_EVENTS: booleanString.default(true),
|
|
109
|
+
PH_CONNECT_OPENPANEL_TRACK_OPERATIONS: booleanString.default(true)
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
103
112
|
* Sentry error tracking configuration schema
|
|
104
113
|
*/
|
|
105
114
|
const sentryConfigSchema = z.object({
|
|
@@ -119,7 +128,7 @@ const renownConfigSchema = z.object({
|
|
|
119
128
|
/**
|
|
120
129
|
* Complete runtime environment schema (all PH_CONNECT_* vars)
|
|
121
130
|
*/
|
|
122
|
-
const runtimeEnvSchema = appConfigSchema.extend(featureFlagsSchema.shape).extend(drivesConfigSchema.shape).extend(processorsConfigSchema.shape).extend(sentryConfigSchema.shape).extend(renownConfigSchema.shape);
|
|
131
|
+
const runtimeEnvSchema = appConfigSchema.extend(featureFlagsSchema.shape).extend(drivesConfigSchema.shape).extend(processorsConfigSchema.shape).extend(openPanelConfigSchema.shape).extend(sentryConfigSchema.shape).extend(renownConfigSchema.shape);
|
|
123
132
|
/**
|
|
124
133
|
* Complete environment schema (build + runtime)
|
|
125
134
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../connect/env-config.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/**\n * Coerces string values to boolean.\n * Accepts: \"true\", \"false\", true, false\n */\nconst booleanString = z\n .union([z.boolean(), z.enum([\"true\", \"false\"])])\n .transform((val) => {\n if (typeof val === \"boolean\") return val;\n return val === \"true\";\n });\n\n/**\n * Coerces string values to number.\n */\nconst numberString = z.union([z.number(), z.string()]).transform((val) => {\n if (typeof val === \"number\") return val;\n return parseInt(val, 10);\n});\n\n// ============================================================================\n// Build-time Environment Variables\n// ============================================================================\n\n/**\n * Build-time configuration schema\n */\nconst buildEnvSchema = z.object({\n /**\n * Path to powerhouse config file\n * @default \"powerhouse.config.json\"\n */\n PH_CONFIG_PATH: z.string().optional(),\n\n /**\n * Comma-separated list of package names to load\n * @example \"package1,package2\"\n */\n PH_PACKAGES: z.string().optional(),\n\n /**\n * Path to local package to load during development\n */\n PH_LOCAL_PACKAGE: z.string().optional(),\n\n /**\n * Disable loading of local package\n * @default false\n */\n PH_DISABLE_LOCAL_PACKAGE: booleanString.default(false),\n\n /**\n * Amount of time to wait before a file is considered changed\n * @default 300\n */\n PH_WATCH_TIMEOUT: numberString.default(300),\n\n /**\n * Sentry authentication token for uploading source maps\n */\n PH_SENTRY_AUTH_TOKEN: z.string().optional(),\n\n /**\n * Sentry organization slug\n */\n PH_SENTRY_ORG: z.string().optional(),\n\n /**\n * Sentry project slug\n */\n PH_SENTRY_PROJECT: z.string().optional(),\n});\n\n// ============================================================================\n// Application Configuration\n// ============================================================================\n\n/**\n * Application configuration schema\n */\nconst appConfigSchema = z.object({\n /**\n * Application version number\n * @default \"unknown\"\n */\n PH_CONNECT_VERSION: z.string().default(\"unknown\"),\n\n /**\n * Log level for the application\n * @default \"info\"\n */\n PH_CONNECT_LOG_LEVEL: z\n .enum([\"debug\", \"info\", \"warn\", \"error\"])\n .default(\"info\"),\n\n /**\n * Whether app requires hard refresh on updates\n * @default true\n */\n PH_CONNECT_REQUIRES_HARD_REFRESH: booleanString.default(true),\n\n /**\n * Show warning when app version is outdated\n * @default false\n */\n PH_CONNECT_WARN_OUTDATED_APP: booleanString.default(false),\n\n /**\n * Enable studio mode features\n * @default false\n */\n PH_CONNECT_STUDIO_MODE: booleanString.default(false),\n\n /**\n * Base path for the Connect router, defaults to import.meta.env.BASE_URL\n */\n PH_CONNECT_BASE_PATH: z.string().optional(),\n\n /**\n * Default drives URL to load on startup\n */\n PH_CONNECT_DEFAULT_DRIVES_URL: z.string().optional(),\n /*\n * Names of packages to load in connect\n */\n PH_CONNECT_PACKAGES: z.string().optional(),\n /**\n * URL(s) of the packages registry CDN endpoint.\n * Supports comma-separated URLs for multiple registries.\n * @example \"http://localhost:8080/-/cdn/\"\n * @example \"https://registry.powerhouse.io/-/cdn/,http://localhost:8080/-/cdn/\"\n */\n PH_CONNECT_PACKAGES_REGISTRY: z.string().optional(),\n\n /**\n * Strategy for preserving drives\n */\n PH_CONNECT_DRIVES_PRESERVE_STRATEGY: z.string().optional(),\n\n /**\n * Interval in milliseconds to check for version updates\n * @default 3600000 (1 hour)\n */\n PH_CONNECT_VERSION_CHECK_INTERVAL: numberString.default(60 * 60 * 1000),\n\n /**\n * CLI version number\n */\n PH_CONNECT_CLI_VERSION: z.string().optional(),\n\n /**\n * Chunk size for file upload operations\n * @default 50\n */\n PH_CONNECT_FILE_UPLOAD_OPERATIONS_CHUNK_SIZE: numberString.default(50),\n});\n\n// ============================================================================\n// Feature Flags & UI Configuration\n// ============================================================================\n\n/**\n * Feature flags and UI configuration schema\n */\nconst featureFlagsSchema = z.object({\n /**\n * Hide the \"Add Drive\" button completely\n * @default false\n */\n PH_CONNECT_DISABLE_ADD_DRIVE: booleanString.default(false),\n\n /**\n * Show search bar in the UI\n * @default false\n */\n PH_CONNECT_SEARCH_BAR_ENABLED: booleanString.default(false),\n\n /**\n * Hide document model selection in settings\n * @default true\n */\n PH_CONNECT_HIDE_DOCUMENT_MODEL_SELECTION_SETTINGS:\n booleanString.default(true),\n\n /**\n * Comma-separated list of enabled editor types\n * Use \"*\" to enable all editors\n * @example \"editor1,editor2\" or \"*\"\n */\n PH_CONNECT_ENABLED_EDITORS: z.string().optional(),\n\n /**\n * Comma-separated list of disabled editor types\n * @default \"powerhouse/document-drive\"\n */\n PH_CONNECT_DISABLED_EDITORS: z.string().default(\"powerhouse/document-drive\"),\n\n /**\n * Google Analytics tracking ID\n */\n PH_CONNECT_GA_TRACKING_ID: z.string().optional(),\n\n /**\n * Disable loading of external packages\n * @default false\n */\n PH_CONNECT_EXTERNAL_PACKAGES_DISABLED: booleanString.default(false),\n});\n\n// ============================================================================\n// Drives Configuration\n// ============================================================================\n\n/**\n * Drives configuration schema\n */\nconst drivesConfigSchema = z.object({\n /**\n * Enable public drives section\n * @default true\n */\n PH_CONNECT_PUBLIC_DRIVES_ENABLED: booleanString.default(true),\n\n /**\n * Allow adding public drives\n * @default true\n */\n PH_CONNECT_DISABLE_ADD_PUBLIC_DRIVES: booleanString.default(false),\n\n /**\n * Allow deleting public drives\n * @default true\n */\n PH_CONNECT_DISABLE_DELETE_PUBLIC_DRIVES: booleanString.default(false),\n\n /**\n * Enable cloud drives section\n * @default true\n */\n PH_CONNECT_CLOUD_DRIVES_ENABLED: booleanString.default(true),\n\n /**\n * Allow adding cloud drives\n * @default true\n */\n PH_CONNECT_DISABLE_ADD_CLOUD_DRIVES: booleanString.default(false),\n\n /**\n * Allow deleting cloud drives\n * @default true\n */\n PH_CONNECT_DISABLE_DELETE_CLOUD_DRIVES: booleanString.default(false),\n\n /**\n * Enable local drives section\n * @default true\n */\n PH_CONNECT_LOCAL_DRIVES_ENABLED: booleanString.default(true),\n\n /**\n * Allow adding local drives\n * @default true\n */\n PH_CONNECT_DISABLE_ADD_LOCAL_DRIVES: booleanString.default(false),\n\n /**\n * Allow deleting local drives\n * @default true\n */\n PH_CONNECT_DISABLE_DELETE_LOCAL_DRIVES: booleanString.default(false),\n});\n\n// ============================================================================\n// Analytics Processor Configuration\n// ============================================================================\n\n/**\n * Analytics processor configuration schema\n */\nconst analyticsProcessorsConfigSchema = z.object({\n /**\n * Enable analytics\n * @default true\n */\n PH_CONNECT_ANALYTICS_ENABLED: booleanString.default(true),\n\n /**\n * Name of the analytics database\n * Defaults to basename + \":analytics\"\n */\n PH_CONNECT_ANALYTICS_DATABASE_NAME: z.string().optional(),\n\n /**\n * Disable analytics database worker\n * @default false\n */\n PH_CONNECT_ANALYTICS_DATABASE_WORKER_DISABLED: booleanString.default(true),\n\n /**\n * Enable diff analytics tracking\n * @default false\n */\n PH_CONNECT_DIFF_ANALYTICS_ENABLED: booleanString.default(false),\n\n /**\n * Enable drive analytics tracking\n * @default true\n */\n PH_CONNECT_DRIVE_ANALYTICS_ENABLED: booleanString.default(true),\n\n /**\n * Enable external analytics processors\n * @default true\n */\n PH_CONNECT_EXTERNAL_ANALYTICS_PROCESSORS_ENABLED: booleanString.default(true),\n});\n\n/**\n * Relational DB processor configuration schema\n */\nconst relationalProcessorsConfigSchema = z.object({\n /**\n * Enable relational processors\n * @default true\n */\n PH_CONNECT_RELATIONAL_PROCESSORS_ENABLED: booleanString.default(true),\n\n /**\n * Enable external relational processors\n * @default true\n */\n PH_CONNECT_EXTERNAL_RELATIONAL_PROCESSORS_ENABLED:\n booleanString.default(true),\n});\n\n/**\n * External processors configuration schema\n */\nconst processorsBaseConfigSchema = z.object({\n /**\n * Enable processors\n * @default true\n */\n PH_CONNECT_PROCESSORS_ENABLED: booleanString.default(true),\n\n /**\n * Enable external processors\n * @default true\n */\n PH_CONNECT_EXTERNAL_PROCESSORS_ENABLED: booleanString.default(true),\n});\n\nconst processorsConfigSchema = processorsBaseConfigSchema\n .extend(analyticsProcessorsConfigSchema.shape)\n .extend(relationalProcessorsConfigSchema.shape);\n\n// ============================================================================\n// Sentry Configuration\n// ============================================================================\n\n/**\n * Sentry error tracking configuration schema\n */\nconst sentryConfigSchema = z.object({\n /**\n * Sentry release identifier\n * Defaults to app version\n */\n PH_CONNECT_SENTRY_RELEASE: z.string().optional(),\n\n /**\n * Sentry DSN for error reporting\n */\n PH_CONNECT_SENTRY_DSN: z.string().optional(),\n\n /**\n * Sentry environment name\n * @default \"prod\"\n */\n PH_CONNECT_SENTRY_ENV: z.string().default(\"dev\"),\n\n /**\n * Enable Sentry performance tracing\n * @default false\n */\n PH_CONNECT_SENTRY_TRACING_ENABLED: booleanString.default(false),\n});\n\n// ============================================================================\n// Renown Configuration\n// ============================================================================\n\n/**\n * Renown authentication configuration schema\n */\nconst renownConfigSchema = z.object({\n /**\n * Renown authentication service URL\n * @default \"https://www.renown.id\"\n */\n PH_CONNECT_RENOWN_URL: z.string().default(\"https://www.renown.id\"),\n\n /**\n * Renown network ID\n * @default \"eip155\"\n */\n PH_CONNECT_RENOWN_NETWORK_ID: z.string().default(\"eip155\"),\n\n /**\n * Renown chain ID\n * @default 1\n */\n PH_CONNECT_RENOWN_CHAIN_ID: numberString.default(1),\n});\n\n// ============================================================================\n// Combined Schemas\n// ============================================================================\n\n/**\n * Complete runtime environment schema (all PH_CONNECT_* vars)\n */\nexport const runtimeEnvSchema = appConfigSchema\n .extend(featureFlagsSchema.shape)\n .extend(drivesConfigSchema.shape)\n .extend(processorsConfigSchema.shape)\n .extend(sentryConfigSchema.shape)\n .extend(renownConfigSchema.shape);\n\n/**\n * Complete environment schema (build + runtime)\n */\nexport const connectEnvSchema = buildEnvSchema.extend(runtimeEnvSchema.shape);\n\n/**\n * Inferred TypeScript types from schemas\n */\nexport type ConnectBuildEnv = z.infer<typeof buildEnvSchema>;\nexport type ConnectRuntimeEnv = z.infer<typeof runtimeEnvSchema>;\nexport type ConnectEnv = z.infer<typeof connectEnvSchema>;\n\n// ============================================================================\n// Environment Loading Functions\n// ============================================================================\n\n/**\n * Options for loading environment variables\n */\nexport interface LoadEnvOptions {\n /**\n * Environment variables from process.env (highest priority)\n */\n processEnv?: Record<string, string | undefined>;\n /**\n * Environment variables from .env file (lowest priority)\n */\n fileEnv?: Record<string, string | undefined>;\n}\n\n/**\n * Internal helper to merge environment sources with priority.\n * Validates each value and falls back to next priority if invalid.\n */\nfunction mergeEnvSources(\n options: LoadEnvOptions,\n keys: Set<string>,\n schema: z.ZodObject<Record<string, z.ZodTypeAny>>,\n): Record<string, unknown> {\n const { processEnv = {}, fileEnv = {} } = options;\n const merged: Record<string, unknown> = {};\n\n // Apply priority: fileEnv < optionsEnv < processEnv\n for (const key of keys) {\n const sources = [\n { name: \"process.env\", value: processEnv[key] },\n { name: \"fileEnv\", value: fileEnv[key] },\n ];\n\n // Try each source in priority order\n for (const source of sources) {\n const value = source.value;\n if (value === undefined || value === \"\") continue;\n\n // Try to validate just this field\n try {\n const fieldSchema = schema.shape[key];\n if (fieldSchema) {\n fieldSchema.parse(value);\n merged[key] = value;\n break; // Successfully validated, use this value\n }\n // No schema for this key, accept it\n console.warn(`Unknown environment variable: '${key}'`);\n merged[key] = value;\n break;\n } catch {\n // Validation failed, log warning and try next source\n const valueStr =\n value === null\n ? \"null\"\n : typeof value === \"object\"\n ? JSON.stringify(value)\n : (value as string);\n console.warn(\n `Invalid value for ${key} from ${source.name}: ${valueStr}. Trying next source.`,\n );\n }\n }\n }\n\n return merged;\n}\n\n/**\n * Loads and validates environment variables with priority:\n * 1. process.env (highest)\n * 2. options\n * 3. fileEnv\n * 4. defaults from schema (lowest)\n *\n * @param options - Environment sources in priority order\n * @returns Validated and typed environment configuration\n */\nexport function loadConnectEnv(options: LoadEnvOptions = {}): ConnectEnv {\n const allKeys = new Set([\n ...Object.keys(buildEnvSchema.shape),\n ...Object.keys(runtimeEnvSchema.shape),\n ]);\n\n const merged = mergeEnvSources(options, allKeys, connectEnvSchema);\n return connectEnvSchema.parse(merged);\n}\n\n/**\n * Loads only runtime environment variables\n *\n * @param options - Environment sources in priority order\n * @returns Validated runtime environment configuration\n */\nexport function loadRuntimeEnv(\n options: LoadEnvOptions = {},\n): ConnectRuntimeEnv {\n const allKeys = new Set(Object.keys(runtimeEnvSchema.shape));\n const merged = mergeEnvSources(options, allKeys, runtimeEnvSchema);\n return runtimeEnvSchema.parse(merged);\n}\n\n/**\n * Loads only build-time environment variables\n *\n * @param options - Environment sources in priority order\n * @returns Validated build environment configuration\n */\nexport function loadBuildEnv(options: LoadEnvOptions = {}): ConnectBuildEnv {\n const allKeys = new Set(Object.keys(buildEnvSchema.shape));\n const merged = mergeEnvSources(options, allKeys, buildEnvSchema);\n return buildEnvSchema.parse(merged);\n}\n\n/**\n * Safely sets Connect environment variables with validation.\n * Invalid values will log a warning and be skipped.\n *\n * @param values - Type-safe object with key-value pairs to set\n *\n * @example\n * ```ts\n * setConnectEnv({\n * PH_CONNECT_LOG_LEVEL: \"debug\",\n * PH_CONNECT_VERSION: \"1.2.3\",\n * PH_CONNECT_STUDIO_MODE: true,\n * });\n * ```\n */\nexport function setConnectEnv(values: Partial<ConnectEnv>): void {\n for (const [key, value] of Object.entries(values)) {\n // Check if key exists in schema\n const fieldSchema =\n connectEnvSchema.shape[key as keyof typeof connectEnvSchema.shape];\n\n if (!fieldSchema) {\n console.warn(\n `Unknown environment variable: ${key}. Variable not set. Valid keys: ${Object.keys(connectEnvSchema.shape).join(\", \")}`,\n );\n continue;\n }\n\n try {\n // Validate the value\n fieldSchema.parse(value);\n\n // Set the value (convert to string for process.env compatibility)\n process.env[key] = String(value);\n } catch (error) {\n console.warn(\n `Invalid value for ${key}: ${String(value)}. Validation failed.`,\n error,\n );\n }\n }\n}\n\n/**\n * Normalizes a base path to ensure it:\n * - Starts with a forward slash (/)\n * - Ends with a forward slash (/)\n * - Has no relative path prefix (.)\n *\n * @param basePath - The base path to normalize\n * @returns The normalized base path\n *\n * @example\n * normalizeBasePath('/app') // '/app/'\n * normalizeBasePath('./app/') // '/app/'\n * normalizeBasePath('app') // '/app/'\n * normalizeBasePath('/') // '/'\n * normalizeBasePath('') // '/'\n */\nexport function normalizeBasePath(basePath: string): string {\n if (!basePath) {\n return \"/\";\n }\n\n let normalized = basePath;\n\n // Remove relative path prefix\n if (normalized.startsWith(\".\")) {\n normalized = normalized.slice(1);\n }\n\n // Ensure it starts with a forward slash\n if (!normalized.startsWith(\"/\")) {\n normalized = `/${normalized}`;\n }\n\n // Ensure it ends with a forward slash\n if (!normalized.endsWith(\"/\")) {\n normalized = `${normalized}/`;\n }\n\n return normalized;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../connect/env-config.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/**\n * Coerces string values to boolean.\n * Accepts: \"true\", \"false\", true, false\n */\nconst booleanString = z\n .union([z.boolean(), z.enum([\"true\", \"false\"])])\n .transform((val) => {\n if (typeof val === \"boolean\") return val;\n return val === \"true\";\n });\n\n/**\n * Coerces string values to number.\n */\nconst numberString = z.union([z.number(), z.string()]).transform((val) => {\n if (typeof val === \"number\") return val;\n return parseInt(val, 10);\n});\n\n// ============================================================================\n// Build-time Environment Variables\n// ============================================================================\n\n/**\n * Build-time configuration schema\n */\nconst buildEnvSchema = z.object({\n /**\n * Path to powerhouse config file\n * @default \"powerhouse.config.json\"\n */\n PH_CONFIG_PATH: z.string().optional(),\n\n /**\n * Comma-separated list of package names to load\n * @example \"package1,package2\"\n */\n PH_PACKAGES: z.string().optional(),\n\n /**\n * Path to local package to load during development\n */\n PH_LOCAL_PACKAGE: z.string().optional(),\n\n /**\n * Disable loading of local package\n * @default false\n */\n PH_DISABLE_LOCAL_PACKAGE: booleanString.default(false),\n\n /**\n * Amount of time to wait before a file is considered changed\n * @default 300\n */\n PH_WATCH_TIMEOUT: numberString.default(300),\n\n /**\n * Sentry authentication token for uploading source maps\n */\n PH_SENTRY_AUTH_TOKEN: z.string().optional(),\n\n /**\n * Sentry organization slug\n */\n PH_SENTRY_ORG: z.string().optional(),\n\n /**\n * Sentry project slug\n */\n PH_SENTRY_PROJECT: z.string().optional(),\n});\n\n// ============================================================================\n// Application Configuration\n// ============================================================================\n\n/**\n * Application configuration schema\n */\nconst appConfigSchema = z.object({\n /**\n * Application version number\n * @default \"unknown\"\n */\n PH_CONNECT_VERSION: z.string().default(\"unknown\"),\n\n /**\n * Log level for the application\n * @default \"info\"\n */\n PH_CONNECT_LOG_LEVEL: z\n .enum([\"debug\", \"info\", \"warn\", \"error\"])\n .default(\"info\"),\n\n /**\n * Whether app requires hard refresh on updates\n * @default true\n */\n PH_CONNECT_REQUIRES_HARD_REFRESH: booleanString.default(true),\n\n /**\n * Show warning when app version is outdated\n * @default false\n */\n PH_CONNECT_WARN_OUTDATED_APP: booleanString.default(false),\n\n /**\n * Enable studio mode features\n * @default false\n */\n PH_CONNECT_STUDIO_MODE: booleanString.default(false),\n\n /**\n * Base path for the Connect router, defaults to import.meta.env.BASE_URL\n */\n PH_CONNECT_BASE_PATH: z.string().optional(),\n\n /**\n * Default drives URL to load on startup\n */\n PH_CONNECT_DEFAULT_DRIVES_URL: z.string().optional(),\n /*\n * Names of packages to load in connect\n */\n PH_CONNECT_PACKAGES: z.string().optional(),\n /**\n * URL(s) of the packages registry CDN endpoint.\n * Supports comma-separated URLs for multiple registries.\n * @example \"http://localhost:8080/-/cdn/\"\n * @example \"https://registry.powerhouse.io/-/cdn/,http://localhost:8080/-/cdn/\"\n */\n PH_CONNECT_PACKAGES_REGISTRY: z.string().optional(),\n\n /**\n * Strategy for preserving drives\n */\n PH_CONNECT_DRIVES_PRESERVE_STRATEGY: z.string().optional(),\n\n /**\n * Interval in milliseconds to check for version updates\n * @default 3600000 (1 hour)\n */\n PH_CONNECT_VERSION_CHECK_INTERVAL: numberString.default(60 * 60 * 1000),\n\n /**\n * CLI version number\n */\n PH_CONNECT_CLI_VERSION: z.string().optional(),\n\n /**\n * Chunk size for file upload operations\n * @default 50\n */\n PH_CONNECT_FILE_UPLOAD_OPERATIONS_CHUNK_SIZE: numberString.default(50),\n});\n\n// ============================================================================\n// Feature Flags & UI Configuration\n// ============================================================================\n\n/**\n * Feature flags and UI configuration schema\n */\nconst featureFlagsSchema = z.object({\n /**\n * Hide the \"Add Drive\" button completely\n * @default false\n */\n PH_CONNECT_DISABLE_ADD_DRIVE: booleanString.default(false),\n\n /**\n * Show search bar in the UI\n * @default false\n */\n PH_CONNECT_SEARCH_BAR_ENABLED: booleanString.default(false),\n\n /**\n * Hide document model selection in settings\n * @default true\n */\n PH_CONNECT_HIDE_DOCUMENT_MODEL_SELECTION_SETTINGS:\n booleanString.default(true),\n\n /**\n * Comma-separated list of enabled editor types\n * Use \"*\" to enable all editors\n * @example \"editor1,editor2\" or \"*\"\n */\n PH_CONNECT_ENABLED_EDITORS: z.string().optional(),\n\n /**\n * Comma-separated list of disabled editor types\n * @default \"powerhouse/document-drive\"\n */\n PH_CONNECT_DISABLED_EDITORS: z.string().default(\"powerhouse/document-drive\"),\n\n /**\n * Google Analytics tracking ID\n */\n PH_CONNECT_GA_TRACKING_ID: z.string().optional(),\n\n /**\n * Disable loading of external packages\n * @default false\n */\n PH_CONNECT_EXTERNAL_PACKAGES_DISABLED: booleanString.default(false),\n});\n\n// ============================================================================\n// Drives Configuration\n// ============================================================================\n\n/**\n * Drives configuration schema\n */\nconst drivesConfigSchema = z.object({\n /**\n * Enable public drives section\n * @default true\n */\n PH_CONNECT_PUBLIC_DRIVES_ENABLED: booleanString.default(true),\n\n /**\n * Allow adding public drives\n * @default true\n */\n PH_CONNECT_DISABLE_ADD_PUBLIC_DRIVES: booleanString.default(false),\n\n /**\n * Allow deleting public drives\n * @default true\n */\n PH_CONNECT_DISABLE_DELETE_PUBLIC_DRIVES: booleanString.default(false),\n\n /**\n * Enable cloud drives section\n * @default true\n */\n PH_CONNECT_CLOUD_DRIVES_ENABLED: booleanString.default(true),\n\n /**\n * Allow adding cloud drives\n * @default true\n */\n PH_CONNECT_DISABLE_ADD_CLOUD_DRIVES: booleanString.default(false),\n\n /**\n * Allow deleting cloud drives\n * @default true\n */\n PH_CONNECT_DISABLE_DELETE_CLOUD_DRIVES: booleanString.default(false),\n\n /**\n * Enable local drives section\n * @default true\n */\n PH_CONNECT_LOCAL_DRIVES_ENABLED: booleanString.default(true),\n\n /**\n * Allow adding local drives\n * @default true\n */\n PH_CONNECT_DISABLE_ADD_LOCAL_DRIVES: booleanString.default(false),\n\n /**\n * Allow deleting local drives\n * @default true\n */\n PH_CONNECT_DISABLE_DELETE_LOCAL_DRIVES: booleanString.default(false),\n});\n\n// ============================================================================\n// Analytics Processor Configuration\n// ============================================================================\n\n/**\n * Analytics processor configuration schema\n */\nconst analyticsProcessorsConfigSchema = z.object({\n /**\n * Enable analytics\n * @default true\n */\n PH_CONNECT_ANALYTICS_ENABLED: booleanString.default(true),\n\n /**\n * Name of the analytics database\n * Defaults to basename + \":analytics\"\n */\n PH_CONNECT_ANALYTICS_DATABASE_NAME: z.string().optional(),\n\n /**\n * Disable analytics database worker\n * @default false\n */\n PH_CONNECT_ANALYTICS_DATABASE_WORKER_DISABLED: booleanString.default(true),\n\n /**\n * Enable diff analytics tracking\n * @default false\n */\n PH_CONNECT_DIFF_ANALYTICS_ENABLED: booleanString.default(false),\n\n /**\n * Enable drive analytics tracking\n * @default true\n */\n PH_CONNECT_DRIVE_ANALYTICS_ENABLED: booleanString.default(true),\n\n /**\n * Enable external analytics processors\n * @default true\n */\n PH_CONNECT_EXTERNAL_ANALYTICS_PROCESSORS_ENABLED: booleanString.default(true),\n});\n\n/**\n * Relational DB processor configuration schema\n */\nconst relationalProcessorsConfigSchema = z.object({\n /**\n * Enable relational processors\n * @default true\n */\n PH_CONNECT_RELATIONAL_PROCESSORS_ENABLED: booleanString.default(true),\n\n /**\n * Enable external relational processors\n * @default true\n */\n PH_CONNECT_EXTERNAL_RELATIONAL_PROCESSORS_ENABLED:\n booleanString.default(true),\n});\n\n/**\n * External processors configuration schema\n */\nconst processorsBaseConfigSchema = z.object({\n /**\n * Enable processors\n * @default true\n */\n PH_CONNECT_PROCESSORS_ENABLED: booleanString.default(true),\n\n /**\n * Enable external processors\n * @default true\n */\n PH_CONNECT_EXTERNAL_PROCESSORS_ENABLED: booleanString.default(true),\n});\n\nconst processorsConfigSchema = processorsBaseConfigSchema\n .extend(analyticsProcessorsConfigSchema.shape)\n .extend(relationalProcessorsConfigSchema.shape);\n\n// ============================================================================\n// OpenPanel Configuration\n// ============================================================================\n\n/**\n * OpenPanel analytics configuration schema\n */\nconst openPanelConfigSchema = z.object({\n /**\n * OpenPanel client ID. When unset, the OpenPanel subsystem is a no-op.\n */\n PH_CONNECT_OPENPANEL_CLIENT_ID: z.string().optional(),\n\n /**\n * OpenPanel API URL override. Defaults to the OpenPanel cloud when unset.\n */\n PH_CONNECT_OPENPANEL_API_URL: z.string().optional(),\n\n /**\n * Track UI events via the useOpenPanel() hook\n * @default true\n */\n PH_CONNECT_OPENPANEL_TRACK_UI_EVENTS: booleanString.default(true),\n\n /**\n * Track document operations via the OpenPanel processor\n * @default true\n */\n PH_CONNECT_OPENPANEL_TRACK_OPERATIONS: booleanString.default(true),\n});\n\n// ============================================================================\n// Sentry Configuration\n// ============================================================================\n\n/**\n * Sentry error tracking configuration schema\n */\nconst sentryConfigSchema = z.object({\n /**\n * Sentry release identifier\n * Defaults to app version\n */\n PH_CONNECT_SENTRY_RELEASE: z.string().optional(),\n\n /**\n * Sentry DSN for error reporting\n */\n PH_CONNECT_SENTRY_DSN: z.string().optional(),\n\n /**\n * Sentry environment name\n * @default \"prod\"\n */\n PH_CONNECT_SENTRY_ENV: z.string().default(\"dev\"),\n\n /**\n * Enable Sentry performance tracing\n * @default false\n */\n PH_CONNECT_SENTRY_TRACING_ENABLED: booleanString.default(false),\n});\n\n// ============================================================================\n// Renown Configuration\n// ============================================================================\n\n/**\n * Renown authentication configuration schema\n */\nconst renownConfigSchema = z.object({\n /**\n * Renown authentication service URL\n * @default \"https://www.renown.id\"\n */\n PH_CONNECT_RENOWN_URL: z.string().default(\"https://www.renown.id\"),\n\n /**\n * Renown network ID\n * @default \"eip155\"\n */\n PH_CONNECT_RENOWN_NETWORK_ID: z.string().default(\"eip155\"),\n\n /**\n * Renown chain ID\n * @default 1\n */\n PH_CONNECT_RENOWN_CHAIN_ID: numberString.default(1),\n});\n\n// ============================================================================\n// Combined Schemas\n// ============================================================================\n\n/**\n * Complete runtime environment schema (all PH_CONNECT_* vars)\n */\nexport const runtimeEnvSchema = appConfigSchema\n .extend(featureFlagsSchema.shape)\n .extend(drivesConfigSchema.shape)\n .extend(processorsConfigSchema.shape)\n .extend(openPanelConfigSchema.shape)\n .extend(sentryConfigSchema.shape)\n .extend(renownConfigSchema.shape);\n\n/**\n * Complete environment schema (build + runtime)\n */\nexport const connectEnvSchema = buildEnvSchema.extend(runtimeEnvSchema.shape);\n\n/**\n * Inferred TypeScript types from schemas\n */\nexport type ConnectBuildEnv = z.infer<typeof buildEnvSchema>;\nexport type ConnectRuntimeEnv = z.infer<typeof runtimeEnvSchema>;\nexport type ConnectEnv = z.infer<typeof connectEnvSchema>;\n\n// ============================================================================\n// Environment Loading Functions\n// ============================================================================\n\n/**\n * Options for loading environment variables\n */\nexport interface LoadEnvOptions {\n /**\n * Environment variables from process.env (highest priority)\n */\n processEnv?: Record<string, string | undefined>;\n /**\n * Environment variables from .env file (lowest priority)\n */\n fileEnv?: Record<string, string | undefined>;\n}\n\n/**\n * Internal helper to merge environment sources with priority.\n * Validates each value and falls back to next priority if invalid.\n */\nfunction mergeEnvSources(\n options: LoadEnvOptions,\n keys: Set<string>,\n schema: z.ZodObject<Record<string, z.ZodTypeAny>>,\n): Record<string, unknown> {\n const { processEnv = {}, fileEnv = {} } = options;\n const merged: Record<string, unknown> = {};\n\n // Apply priority: fileEnv < optionsEnv < processEnv\n for (const key of keys) {\n const sources = [\n { name: \"process.env\", value: processEnv[key] },\n { name: \"fileEnv\", value: fileEnv[key] },\n ];\n\n // Try each source in priority order\n for (const source of sources) {\n const value = source.value;\n if (value === undefined || value === \"\") continue;\n\n // Try to validate just this field\n try {\n const fieldSchema = schema.shape[key];\n if (fieldSchema) {\n fieldSchema.parse(value);\n merged[key] = value;\n break; // Successfully validated, use this value\n }\n // No schema for this key, accept it\n console.warn(`Unknown environment variable: '${key}'`);\n merged[key] = value;\n break;\n } catch {\n // Validation failed, log warning and try next source\n const valueStr =\n value === null\n ? \"null\"\n : typeof value === \"object\"\n ? JSON.stringify(value)\n : (value as string);\n console.warn(\n `Invalid value for ${key} from ${source.name}: ${valueStr}. Trying next source.`,\n );\n }\n }\n }\n\n return merged;\n}\n\n/**\n * Loads and validates environment variables with priority:\n * 1. process.env (highest)\n * 2. options\n * 3. fileEnv\n * 4. defaults from schema (lowest)\n *\n * @param options - Environment sources in priority order\n * @returns Validated and typed environment configuration\n */\nexport function loadConnectEnv(options: LoadEnvOptions = {}): ConnectEnv {\n const allKeys = new Set([\n ...Object.keys(buildEnvSchema.shape),\n ...Object.keys(runtimeEnvSchema.shape),\n ]);\n\n const merged = mergeEnvSources(options, allKeys, connectEnvSchema);\n return connectEnvSchema.parse(merged);\n}\n\n/**\n * Loads only runtime environment variables\n *\n * @param options - Environment sources in priority order\n * @returns Validated runtime environment configuration\n */\nexport function loadRuntimeEnv(\n options: LoadEnvOptions = {},\n): ConnectRuntimeEnv {\n const allKeys = new Set(Object.keys(runtimeEnvSchema.shape));\n const merged = mergeEnvSources(options, allKeys, runtimeEnvSchema);\n return runtimeEnvSchema.parse(merged);\n}\n\n/**\n * Loads only build-time environment variables\n *\n * @param options - Environment sources in priority order\n * @returns Validated build environment configuration\n */\nexport function loadBuildEnv(options: LoadEnvOptions = {}): ConnectBuildEnv {\n const allKeys = new Set(Object.keys(buildEnvSchema.shape));\n const merged = mergeEnvSources(options, allKeys, buildEnvSchema);\n return buildEnvSchema.parse(merged);\n}\n\n/**\n * Safely sets Connect environment variables with validation.\n * Invalid values will log a warning and be skipped.\n *\n * @param values - Type-safe object with key-value pairs to set\n *\n * @example\n * ```ts\n * setConnectEnv({\n * PH_CONNECT_LOG_LEVEL: \"debug\",\n * PH_CONNECT_VERSION: \"1.2.3\",\n * PH_CONNECT_STUDIO_MODE: true,\n * });\n * ```\n */\nexport function setConnectEnv(values: Partial<ConnectEnv>): void {\n for (const [key, value] of Object.entries(values)) {\n // Check if key exists in schema\n const fieldSchema =\n connectEnvSchema.shape[key as keyof typeof connectEnvSchema.shape];\n\n if (!fieldSchema) {\n console.warn(\n `Unknown environment variable: ${key}. Variable not set. Valid keys: ${Object.keys(connectEnvSchema.shape).join(\", \")}`,\n );\n continue;\n }\n\n try {\n // Validate the value\n fieldSchema.parse(value);\n\n // Set the value (convert to string for process.env compatibility)\n process.env[key] = String(value);\n } catch (error) {\n console.warn(\n `Invalid value for ${key}: ${String(value)}. Validation failed.`,\n error,\n );\n }\n }\n}\n\n/**\n * Normalizes a base path to ensure it:\n * - Starts with a forward slash (/)\n * - Ends with a forward slash (/)\n * - Has no relative path prefix (.)\n *\n * @param basePath - The base path to normalize\n * @returns The normalized base path\n *\n * @example\n * normalizeBasePath('/app') // '/app/'\n * normalizeBasePath('./app/') // '/app/'\n * normalizeBasePath('app') // '/app/'\n * normalizeBasePath('/') // '/'\n * normalizeBasePath('') // '/'\n */\nexport function normalizeBasePath(basePath: string): string {\n if (!basePath) {\n return \"/\";\n }\n\n let normalized = basePath;\n\n // Remove relative path prefix\n if (normalized.startsWith(\".\")) {\n normalized = normalized.slice(1);\n }\n\n // Ensure it starts with a forward slash\n if (!normalized.startsWith(\"/\")) {\n normalized = `/${normalized}`;\n }\n\n // Ensure it ends with a forward slash\n if (!normalized.endsWith(\"/\")) {\n normalized = `${normalized}/`;\n }\n\n return normalized;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Ha as Reducer, Jn as AssertIsDocumentOfType, Oi as Maybe, Yn as AssertIsStateOfType, co as SaveToFileHandle, gi as IsStateOfType, hi as IsDocumentOfType, hn as PHBaseState, ir as CreateDocument, kr as DocumentModelGlobalState, sr as CreateState, vi as LoadFromInput } from "../actions-
|
|
2
|
-
import { $ as AddFolderAction, A as TriggerData, C as RemoveTriggerInput, D as SetSharingTypeInput, E as SetDriveNameInput, G as GenerateNodesCopySrc, H as DriveDocumentModelModule, J as DocumentDriveDocument, K as SharingType, M as TriggerType, N as UpdateFileInput, O as TransmitterType, P as UpdateNodeInput, Q as AddFileAction, S as RemoveListenerInput, T as SetDriveIconInput, U as DriveInput, V as DocumentDrivePHState, W as GenerateNodesCopyIdGenerator, X as LegacyAddFileInput, Y as LegacyAddFileAction, Z as LegacySynchronizationUnit, _ as ListenerInput, a as CopyNodeInput, at as UpdateFileAction, b as PullResponderTriggerData, c as DocumentDriveLocalState, ct as AddTriggerAction, d as FolderNode, dt as RemoveListenerAction, et as CopyNodeAction, f as Listener, ft as RemoveTriggerAction, g as ListenerFilterInput, gt as SetSharingTypeAction, h as ListenerFilter, ht as SetDriveNameAction, i as AddTriggerInput, it as MoveNodeAction, j as TriggerInput, k as Trigger, l as DocumentDrivePHState$1, lt as DocumentDriveDriveAction, m as ListenerCallInfoInput, mt as SetDriveIconAction, n as AddFolderInput, nt as DocumentDriveNodeAction, o as DeleteNodeInput, ot as UpdateNodeAction, p as ListenerCallInfo, pt as SetAvailableOfflineAction, q as DocumentDriveAction, r as AddListenerInput, rt as DocumentDriveNodeOperations, s as DocumentDriveGlobalState, st as AddListenerAction, t as AddFileInput, tt as DeleteNodeAction, u as FileNode, ut as DocumentDriveDriveOperations, v as MoveNodeInput, w as SetAvailableOfflineInput, x as PullResponderTriggerDataInput, y as Node } from "../types-
|
|
1
|
+
import { Ha as Reducer, Jn as AssertIsDocumentOfType, Oi as Maybe, Yn as AssertIsStateOfType, co as SaveToFileHandle, gi as IsStateOfType, hi as IsDocumentOfType, hn as PHBaseState, ir as CreateDocument, kr as DocumentModelGlobalState, sr as CreateState, vi as LoadFromInput } from "../actions-BqyQ1_K7.js";
|
|
2
|
+
import { $ as AddFolderAction, A as TriggerData, C as RemoveTriggerInput, D as SetSharingTypeInput, E as SetDriveNameInput, G as GenerateNodesCopySrc, H as DriveDocumentModelModule, J as DocumentDriveDocument, K as SharingType, M as TriggerType, N as UpdateFileInput, O as TransmitterType, P as UpdateNodeInput, Q as AddFileAction, S as RemoveListenerInput, T as SetDriveIconInput, U as DriveInput, V as DocumentDrivePHState, W as GenerateNodesCopyIdGenerator, X as LegacyAddFileInput, Y as LegacyAddFileAction, Z as LegacySynchronizationUnit, _ as ListenerInput, a as CopyNodeInput, at as UpdateFileAction, b as PullResponderTriggerData, c as DocumentDriveLocalState, ct as AddTriggerAction, d as FolderNode, dt as RemoveListenerAction, et as CopyNodeAction, f as Listener, ft as RemoveTriggerAction, g as ListenerFilterInput, gt as SetSharingTypeAction, h as ListenerFilter, ht as SetDriveNameAction, i as AddTriggerInput, it as MoveNodeAction, j as TriggerInput, k as Trigger, l as DocumentDrivePHState$1, lt as DocumentDriveDriveAction, m as ListenerCallInfoInput, mt as SetDriveIconAction, n as AddFolderInput, nt as DocumentDriveNodeAction, o as DeleteNodeInput, ot as UpdateNodeAction, p as ListenerCallInfo, pt as SetAvailableOfflineAction, q as DocumentDriveAction, r as AddListenerInput, rt as DocumentDriveNodeOperations, s as DocumentDriveGlobalState, st as AddListenerAction, t as AddFileInput, tt as DeleteNodeAction, u as FileNode, ut as DocumentDriveDriveOperations, v as MoveNodeInput, w as SetAvailableOfflineInput, x as PullResponderTriggerDataInput, y as Node } from "../types-DA_0pilk.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region document-drive/constants.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../document-drive/constants.ts","../../document-drive/gen/node/creators.ts","../../document-drive/gen/drive/creators.ts","../../document-drive/gen/document-model.ts","../../document-drive/gen/document-schema.ts","../../document-drive/gen/document-type.ts","../../document-drive/gen/ph-factories.ts","../../document-drive/gen/reducer.ts","../../document-drive/gen/schema/zod.ts","../../document-drive/gen/utils.ts","../../document-drive/module.ts","../../document-drive/src/reducers/drive.ts","../../document-drive/src/reducers/node.ts","../../document-drive/src/utils.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../document-drive/constants.ts","../../document-drive/gen/node/creators.ts","../../document-drive/gen/drive/creators.ts","../../document-drive/gen/document-model.ts","../../document-drive/gen/document-schema.ts","../../document-drive/gen/document-type.ts","../../document-drive/gen/ph-factories.ts","../../document-drive/gen/reducer.ts","../../document-drive/gen/schema/zod.ts","../../document-drive/gen/utils.ts","../../document-drive/module.ts","../../document-drive/src/reducers/drive.ts","../../document-drive/src/reducers/node.ts","../../document-drive/src/utils.ts"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { n as generateId } from "../utils-bCWnsmtD.js";
|
|
2
1
|
import { BaseDocumentHeaderSchema, BaseDocumentStateSchema, baseCreateDocument, baseLoadFromInput, baseSaveToFileHandle, createAction, createBaseState, createReducer, createState as createState$1, defaultBaseState, isDocumentAction } from "../document-model/index.js";
|
|
3
2
|
import { z } from "zod";
|
|
4
3
|
//#region \0rolldown/runtime.js
|
|
@@ -680,14 +679,14 @@ function handleTargetNameCollisions(params) {
|
|
|
680
679
|
return targetNodeChildrenNames.includes(srcName) ? `${srcName} (copy) ${getNextCopyNumber(targetNodeChildrenNames, srcName)}` : srcName;
|
|
681
680
|
}
|
|
682
681
|
const isValidName = (name) => {
|
|
683
|
-
return
|
|
682
|
+
return name.trim().length > 0 && !/[\u0000-\u001F\u007F]/.test(name);
|
|
684
683
|
};
|
|
685
684
|
//#endregion
|
|
686
685
|
//#region document-drive/src/reducers/node.ts
|
|
687
686
|
const nodeReducer = {
|
|
688
687
|
addFileOperation(state, action, dispatch) {
|
|
689
688
|
if (state.nodes.find((node) => node.id === action.input.id)) throw new Error(`Node with id ${action.input.id} already exists!`);
|
|
690
|
-
if (!isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must be
|
|
689
|
+
if (!isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must not be empty or contain control characters.`);
|
|
691
690
|
const name = handleTargetNameCollisions({
|
|
692
691
|
nodes: state.nodes,
|
|
693
692
|
srcName: action.input.name,
|
|
@@ -713,7 +712,7 @@ const nodeReducer = {
|
|
|
713
712
|
},
|
|
714
713
|
addFolderOperation(state, action) {
|
|
715
714
|
if (state.nodes.find((node) => node.id === action.input.id)) throw new Error(`Node with id ${action.input.id} already exists!`);
|
|
716
|
-
if (!isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must be
|
|
715
|
+
if (!isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must not be empty or contain control characters.`);
|
|
717
716
|
const name = handleTargetNameCollisions({
|
|
718
717
|
nodes: state.nodes,
|
|
719
718
|
srcName: action.input.name,
|
|
@@ -741,7 +740,7 @@ const nodeReducer = {
|
|
|
741
740
|
});
|
|
742
741
|
},
|
|
743
742
|
updateFileOperation(state, action) {
|
|
744
|
-
if (action.input.name && !isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must be
|
|
743
|
+
if (action.input.name && !isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must not be empty or contain control characters.`);
|
|
745
744
|
state.nodes = state.nodes.map((node) => node.id === action.input.id ? {
|
|
746
745
|
...node,
|
|
747
746
|
name: handleTargetNameCollisions({
|
|
@@ -755,7 +754,7 @@ const nodeReducer = {
|
|
|
755
754
|
state.nodes.sort((a, b) => a.id.localeCompare(b.id));
|
|
756
755
|
},
|
|
757
756
|
updateNodeOperation(state, action) {
|
|
758
|
-
if (action.input.name && !isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must be
|
|
757
|
+
if (action.input.name && !isValidName(action.input.name)) throw new Error(`Invalid name: '${action.input.name}'. Names must not be empty or contain control characters.`);
|
|
759
758
|
state.nodes = state.nodes.map((node) => node.id === action.input.id ? {
|
|
760
759
|
...node,
|
|
761
760
|
name: handleTargetNameCollisions({
|
|
@@ -916,10 +915,7 @@ const driveCreateState = (state) => {
|
|
|
916
915
|
};
|
|
917
916
|
};
|
|
918
917
|
const driveCreateDocument = (state) => {
|
|
919
|
-
|
|
920
|
-
document.header.documentType = driveDocumentType;
|
|
921
|
-
document.header.id = generateId();
|
|
922
|
-
return document;
|
|
918
|
+
return baseCreateDocument(driveCreateState, state, driveDocumentType);
|
|
923
919
|
};
|
|
924
920
|
const driveSaveToFileHandle = (document, input) => {
|
|
925
921
|
return baseSaveToFileHandle(document, input);
|