@coreframe/scripts 0.1.49 → 0.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/dist/coreframe.d.ts +233 -41
- package/dist/coreframe.js +13 -2
- package/package.json +17 -30
- package/dist/_virtual/_@oxc-project_runtime@0.138.0/helpers/esm/usingCtx.js +0 -1
- package/dist/assets/contracts.d.ts +0 -187
- package/dist/assets/contracts.js +0 -1
- package/dist/assets/credentials.d.ts +0 -35
- package/dist/assets/credentials.js +0 -1
- package/dist/assets/images.d.ts +0 -32
- package/dist/assets/images.js +0 -1
- package/dist/assets/media.d.ts +0 -42
- package/dist/assets/media.js +0 -1
- package/dist/assets/project.d.ts +0 -54
- package/dist/assets/project.js +0 -3
- package/dist/assets/storage.d.ts +0 -60
- package/dist/assets/storage.js +0 -1
- package/dist/assets/workflows.d.ts +0 -69
- package/dist/assets/workflows.js +0 -1
- package/dist/assets.d.ts +0 -4
- package/dist/assets.js +0 -1
- package/dist/config.d.ts +0 -49
- package/dist/config.js +0 -1
- package/dist/db/apply-seed.d.ts +0 -8
- package/dist/db/apply-seed.js +0 -1
- package/dist/db/client.d.ts +0 -30
- package/dist/db/client.js +0 -1
- package/dist/db/config.d.ts +0 -24
- package/dist/db/config.js +0 -1
- package/dist/db/drizzle-kit.d.ts +0 -10
- package/dist/db/drizzle-kit.js +0 -2
- package/dist/db/ensure.d.ts +0 -9
- package/dist/db/ensure.js +0 -2
- package/dist/db/error.d.ts +0 -4
- package/dist/db/error.js +0 -1
- package/dist/db/local-postgres.d.ts +0 -65
- package/dist/db/local-postgres.js +0 -1
- package/dist/db/migrate-held.d.ts +0 -16
- package/dist/db/migrate-held.js +0 -10
- package/dist/db/migrate.d.ts +0 -9
- package/dist/db/migrate.js +0 -2
- package/dist/db/project.d.ts +0 -23
- package/dist/db/project.js +0 -1
- package/dist/db/reset.d.ts +0 -9
- package/dist/db/reset.js +0 -2
- package/dist/db/schema-check.d.ts +0 -11
- package/dist/db/schema-check.js +0 -2
- package/dist/db/schema-push.d.ts +0 -22
- package/dist/db/schema-push.js +0 -1
- package/dist/db/seed.d.ts +0 -19
- package/dist/db/seed.js +0 -2
- package/dist/db/setup.d.ts +0 -11
- package/dist/db/setup.js +0 -2
- package/dist/deploy/access-token-secret.d.ts +0 -39
- package/dist/deploy/access-token-secret.js +0 -1
- package/dist/deploy/check-migrations.d.ts +0 -4
- package/dist/deploy/check-migrations.js +0 -2
- package/dist/deploy/checks.d.ts +0 -8
- package/dist/deploy/checks.js +0 -1
- package/dist/deploy/config.d.ts +0 -68
- package/dist/deploy/config.js +0 -1
- package/dist/deploy/migrations.d.ts +0 -24
- package/dist/deploy/migrations.js +0 -4
- package/dist/deploy/pending-migrations.d.ts +0 -9
- package/dist/deploy/pending-migrations.js +0 -1
- package/dist/deploy/tauri-release.d.ts +0 -106
- package/dist/deploy/tauri-release.js +0 -1
- package/dist/deploy/version.d.ts +0 -24
- package/dist/deploy/version.js +0 -1
- package/dist/deploy.d.ts +0 -21
- package/dist/deploy.js +0 -3
- package/dist/dev-device.d.ts +0 -34
- package/dist/dev-device.js +0 -1
- package/dist/dev-https.d.ts +0 -17
- package/dist/dev-https.js +0 -1
- package/dist/dev-lock.d.ts +0 -28
- package/dist/dev-lock.js +0 -1
- package/dist/dev-timing.d.ts +0 -25
- package/dist/dev-timing.js +0 -1
- package/dist/dev.d.ts +0 -39
- package/dist/dev.js +0 -3
- package/dist/environment.d.ts +0 -27
- package/dist/environment.js +0 -1
- package/dist/i18n/catalogs.d.ts +0 -60
- package/dist/i18n/catalogs.js +0 -1
- package/dist/i18n/contracts.d.ts +0 -60
- package/dist/i18n/contracts.js +0 -1
- package/dist/i18n/paths.d.ts +0 -12
- package/dist/i18n/paths.js +0 -1
- package/dist/i18n/storage.d.ts +0 -117
- package/dist/i18n/storage.js +0 -1
- package/dist/i18n/workflows.d.ts +0 -46
- package/dist/i18n/workflows.js +0 -1
- package/dist/managed-dev-protocol.d.ts +0 -135
- package/dist/managed-dev-protocol.js +0 -1
- package/dist/managed-dev.d.ts +0 -48
- package/dist/managed-dev.js +0 -5
- package/dist/private-object-store.d.ts +0 -28
- package/dist/private-object-store.js +0 -1
- package/dist/project.d.ts +0 -5
- package/dist/project.js +0 -1
- package/dist/recipes/apply.d.ts +0 -26
- package/dist/recipes/apply.js +0 -2
- package/dist/recipes/list.d.ts +0 -14
- package/dist/recipes/list.js +0 -1
- package/dist/recipes/manifest.d.ts +0 -14
- package/dist/recipes/manifest.js +0 -1
- package/dist/recipes/source.d.ts +0 -22
- package/dist/recipes/source.js +0 -1
- package/dist/runner.d.ts +0 -20
- package/dist/runner.js +0 -1
- package/dist/staging.d.ts +0 -33
- package/dist/staging.js +0 -3
- package/dist/tauri-dev-output.d.ts +0 -21
- package/dist/tauri-dev-output.js +0 -2
- package/dist/typecheck.d.ts +0 -4
- package/dist/typecheck.js +0 -2
- package/dist/upgrade/check-skill-current.d.ts +0 -11
- package/dist/upgrade/check-skill-current.js +0 -2
- package/dist/upgrade/ensure-template-remote.d.ts +0 -13
- package/dist/upgrade/ensure-template-remote.js +0 -2
- package/dist/upgrade/fast-forward-template-files.d.ts +0 -9
- package/dist/upgrade/fast-forward-template-files.js +0 -2
- package/dist/upgrade/sync-coreframe-packages.d.ts +0 -8
- package/dist/upgrade/sync-coreframe-packages.js +0 -4
- package/dist/upgrade/template-ref.d.ts +0 -6
- package/dist/upgrade/template-ref.js +0 -1
- package/dist/user-preferences.d.ts +0 -8
- package/dist/user-preferences.js +0 -1
- package/dist/worker-environment.d.ts +0 -95
- package/dist/worker-environment.js +0 -1
package/dist/deploy.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { DeployEnvironment, ResolvedDeployConfig, TauriReleasePlatform } from "./deploy/config.js";
|
|
2
|
-
import { readProjectConfig } from "./config.js";
|
|
3
|
-
|
|
4
|
-
//#region deploy.d.ts
|
|
5
|
-
type DeployArgs = {
|
|
6
|
-
environment: DeployEnvironment;
|
|
7
|
-
runMigrations: boolean;
|
|
8
|
-
skipMigrations: boolean;
|
|
9
|
-
skipPostDeployChecks: boolean;
|
|
10
|
-
tauriLocalPlatforms: TauriReleasePlatform[];
|
|
11
|
-
tauriWorkflowName?: string;
|
|
12
|
-
tauriWorkflowPlatforms: TauriReleasePlatform[];
|
|
13
|
-
tauriWorkflowRef?: string;
|
|
14
|
-
yes: boolean;
|
|
15
|
-
};
|
|
16
|
-
declare function deployProject(argv?: string[], env?: NodeJS.ProcessEnv): Promise<void>;
|
|
17
|
-
declare function parseDeployArgs(argv: string[]): DeployArgs;
|
|
18
|
-
declare function resolveDeployUrl(config: ResolvedDeployConfig, environment: DeployEnvironment, discover?: () => Promise<string>): Promise<string>;
|
|
19
|
-
declare function resolveDashboardPassword(env: NodeJS.ProcessEnv, environment: DeployEnvironment): Promise<string>;
|
|
20
|
-
//#endregion
|
|
21
|
-
export { deployProject, parseDeployArgs, readProjectConfig, resolveDashboardPassword, resolveDeployUrl };
|
package/dist/deploy.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"./config.js";import{createProjectDeployDatabase as t}from"./db/project.js";import{collectDeployMigrationFiles as n,formatMigrationList as r,formatMigrationScanFailures as i,scanDeployMigrationFiles as ee}from"./deploy/migrations.js";import{accessTokenSigningSecretName as a,prepareAccessTokenSigningSecret as o,verifyAccessTokenSigningSecret as te}from"./deploy/access-token-secret.js";import{runAfterWorkerDeploy as ne,runPostDeployChecks as re}from"./deploy/checks.js";import{deployEnvironments as s,resolveDeployConfig as c}from"./deploy/config.js";import{filterPendingMigrations as l,readAppliedMigrationNames as u}from"./deploy/pending-migrations.js";import{parseTauriReleasePlatform as d,prepareTauriRelease as f,resolveTauriReleasePlan as p,restoreTauriReleaseMetadata as m,uploadTauriReleaseToB2 as h,validateTauriReleasePlan as g,writeTauriReleaseMetadata as _}from"./deploy/tauri-release.js";import{readPackageJson as v,releaseName as ie,resolveReleaseVersion as ae,writePackageVersion as oe}from"./deploy/version.js";import{materializeI18nSnapshot as y}from"./i18n/workflows.js";import{discoverStagingUrl as b}from"./staging.js";import{clearAppliedPendingWorkerSecrets as x,readPendingWorkerSecretSnapshot as S}from"./worker-environment.js";import{mkdtemp as C,readFile as w,rm as T,writeFile as E}from"node:fs/promises";import{join as D}from"node:path";import O from"nano-spawn";import{tmpdir as k}from"node:os";import*as A from"@clack/prompts";import{parseEnv as j}from"node:util";const M=`package.json`;async function N(n=process.argv.slice(2),r=process.env){let s=P(n);H(s);let{packageJson:l,source:u}=await v(M),d=await e(),C=c(d.deploy??{},s.environment,r);se(r,[`POSTHOG_API_KEY`,`POSTHOG_PROJECT_ID`]);let w=await U(C,s.environment,()=>b({env:r})),T=p({args:s,config:s.environment===`production`?C.tauriRelease:{},env:r});K(s.environment,T.enabled),await g(T);let D=await S({environment:s.environment}),k=D.values.DASHBOARD_PASSWORD??await q(r,s.environment),j=await o({environment:s.environment}),N=await V();await y({env:r,revision:N});let F=N.slice(0,12),I=ae(s.environment,l.version,F),L=ie(l.name,I),z={...le(r,s.environment,L,l.name,I),COREFRAME_I18N_RELEASE_REVISION:N},W=s.environment===`production`,J=!1,X={files:[]};A.intro(`Deploy ${L} to ${s.environment}`);let Z=Object.keys(D.values).sort();Z.length>0&&A.note(Z.join(`
|
|
3
|
-
`),`Pending Worker secret updates`),j.provisioned&&A.log.info(`Provisioning Coreframe-managed access-token signing material.`),await G(s);let Q=await R(await t({config:d.database,env:r})),$=await ee(Q);if($.length>0)throw Error(`Pending deploy migrations contain unsafe SQL. Move unsafe statements to held migrations.\n${i($)}`);let ue=await B(s,Q);try{W&&(await oe(M,l,I),X=await _(T,I)),A.log.step(`Running pre-deploy build`),await O(`pnpm`,[`build`],{env:Y(z),stdio:`inherit`});let e=T.enabled?await f({env:Y(z),plan:T,releaseName:L,version:I}):void 0;A.log.step(`Running release build and uploading PostHog source maps`),J=!0,await O(`pnpm`,[`build`],{env:z,stdio:`inherit`}),ue&&(A.log.step(`Running deploy-safe database migrations`),await O(`pnpm`,[`db`,`migrate`],{env:z,stdio:`inherit`})),A.log.step(`Deploying Worker and static assets to Cloudflare`);let t={...k?{DASHBOARD_PASSWORD:k}:{},...j.value?{[a]:j.value}:{},...D.values},n=Object.keys(t).length>0?await ce(t):void 0;try{await O(`pnpm`,[`exec`,`wrangler`,`deploy`,`--env`,s.environment,`--strict`,`--keep-vars`,`--tag`,L,`--message`,`Deploy ${L}`,`--var`,`DEPLOY_ENV:${s.environment}`,`--var`,`POSTHOG_RELEASE:${L}`,...n?[`--secrets-file`,n.path]:[]],{env:z,stdio:`inherit`}),await x(D),await te({environment:s.environment})}finally{await n?.dispose()}let r={environment:s.environment,releaseName:L,url:w,version:I};C.afterWorkerDeploy&&(A.log.step(`Running required after-Worker deploy hook`),await ne(C,r)),s.skipPostDeployChecks||(A.log.step(`Running post-deploy checks`),await re(C,r)),e&&(A.log.step(`Uploading Tauri release artifacts to Backblaze B2`),await h(T,e)),A.outro(`Deployed ${L} to ${s.environment}`)}catch(e){throw!J&&W&&(await E(M,u),await m(X)),e}}function P(e){return{environment:F(e[0]),runMigrations:e.includes(`--run-migrations`),skipMigrations:e.includes(`--skip-migrations`),skipPostDeployChecks:e.includes(`--skip-post-deploy-checks`),tauriLocalPlatforms:I(e,`--tauri-local-platform`).map(e=>d(e)),tauriWorkflowName:L(e,`--tauri-workflow-name`),tauriWorkflowPlatforms:I(e,`--tauri-workflow-platform`).map(e=>d(e)),tauriWorkflowRef:L(e,`--tauri-workflow-ref`),yes:e.includes(`--yes`)}}function F(e){if(e&&s.includes(e))return e;throw Error(`Deploy environment must be one of: ${s.join(`, `)}.`)}function I(e,t){let n=[];for(let r=0;r<e.length;r+=1){let i=e[r];if(i===t){let i=e[r+1];if(!i||i.startsWith(`--`))throw Error(`${t} requires a value.`);n.push(...i.split(`,`).filter(Boolean)),r+=1;continue}i.startsWith(`${t}=`)&&n.push(...i.slice(t.length+1).split(`,`).filter(Boolean))}return n}function L(e,t){let n=I(e,t);if(n.length>1)throw Error(`${t} can only be provided once.`);return n[0]}async function R(e){try{return await z(e)}finally{await e.close?.()}}async function z(e){return l(await n(),await u(e))}async function B(e,t){if(t.length===0)return A.log.info(`No pending deploy migrations.`),!1;if(A.note(r(t),`Pending deploy migrations`),e.runMigrations)return!0;if(e.skipMigrations)return!1;if(!process.stdout.isTTY)throw Error(`Pending migrations require --run-migrations or --skip-migrations in noninteractive deploys.`);let n=await A.confirm({initialValue:!0,message:`Run these deploy-safe database migrations before Cloudflare deploy?`});if(A.isCancel(n))throw A.cancel(`Deploy cancelled.`),Error(`Deploy cancelled.`);return n}async function V(){let{stdout:e}=await O(`git`,[`status`,`--porcelain`],{stdin:`ignore`});if(e.trim().length>0)throw Error(`Deploy requires a clean git tree.`);let{stdout:t}=await O(`git`,[`rev-parse`,`HEAD`],{stdin:`ignore`});return t.trim()}function H(e){if(e.runMigrations&&e.skipMigrations)throw Error(`Use only one of --run-migrations or --skip-migrations.`)}async function U(e,t,n=b){return e.url?W(e.url,t):t===`staging`&&e.stagingHostname?W(await n(),t):W(void 0,t)}function W(e,t){if(!e)throw Error(`Missing ${t} deploy URL. Set DEPLOY_URL or deploy.environments.${t}.url in coreframe.config.ts.`);let n;try{n=new URL(e)}catch{throw Error(`Invalid ${t} deploy URL "${e}". Expected an HTTP(S) URL.`)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw Error(`Invalid ${t} deploy URL "${e}". Expected an HTTP(S) URL.`);return n.toString()}async function G(e){if(e.environment!==`production`||e.yes)return;if(!process.stdout.isTTY)throw Error(`Production deploys require --yes in noninteractive environments.`);let t=await A.confirm({initialValue:!1,message:`Deploy to production?`});if(A.isCancel(t)||!t)throw A.cancel(`Deploy cancelled.`),Error(`Deploy cancelled.`)}function K(e,t){if(e===`staging`&&t)throw Error(`Tauri releases can only be published from production deploys.`)}function se(e,t){let n=t.filter(t=>!e[t]);if(n.length>0)throw Error(`Missing required deploy environment variables: ${n.join(`, `)}`);return Object.fromEntries(t.map(t=>[t,e[t]]))}async function q(e,t){let n=e.DASHBOARD_PASSWORD?.trim();if(n)return n;let r;try{r=j(await w(`.env`,`utf8`))}catch(e){throw J(e)&&e.code===`ENOENT`?Error(`Missing ${t} dashboard password. Set DASHBOARD_PASSWORD in ".env".`):e}let i=r.DASHBOARD_PASSWORD?.trim();if(!i)throw Error(`Missing ${t} dashboard password. Set DASHBOARD_PASSWORD in ".env".`);return i}async function ce(e){let t=await C(D(k(),`coreframe-deploy-secrets-`)),n=D(t,`secrets.json`);return await E(n,JSON.stringify(e),{mode:384}),{path:n,dispose:()=>T(t,{force:!0,recursive:!0})}}function J(e){return e instanceof Error&&`code`in e}function le(e,t,n,r,i){return{...e,CLOUDFLARE_ENV:t,DEPLOY_ENV:t,POSTHOG_RELEASE:n,POSTHOG_RELEASE_NAME:e.POSTHOG_RELEASE_NAME??r,POSTHOG_RELEASE_VERSION:e.POSTHOG_RELEASE_VERSION??i}}function Y(e){let{POSTHOG_API_KEY:t,POSTHOG_PROJECT_ID:n,...r}=e;return r}export{N as deployProject,P as parseDeployArgs,e as readProjectConfig,q as resolveDashboardPassword,U as resolveDeployUrl};
|
package/dist/dev-device.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
//#region dev-device.d.ts
|
|
2
|
-
type MobileDevPlatform = "android" | "ios";
|
|
3
|
-
type MobileDevDevice = {
|
|
4
|
-
id?: string;
|
|
5
|
-
label: string;
|
|
6
|
-
name: string;
|
|
7
|
-
physical: boolean;
|
|
8
|
-
};
|
|
9
|
-
type SelectMobileDevDeviceOptions = {
|
|
10
|
-
env?: NodeJS.ProcessEnv;
|
|
11
|
-
interactive?: boolean;
|
|
12
|
-
platform: MobileDevPlatform;
|
|
13
|
-
target?: string;
|
|
14
|
-
};
|
|
15
|
-
type ResolveMobileDevHostOptions = {
|
|
16
|
-
device: MobileDevDevice;
|
|
17
|
-
host?: string | true;
|
|
18
|
-
interactive?: boolean;
|
|
19
|
-
platform: MobileDevPlatform;
|
|
20
|
-
};
|
|
21
|
-
declare function selectMobileDevDevice({
|
|
22
|
-
env,
|
|
23
|
-
interactive,
|
|
24
|
-
platform,
|
|
25
|
-
target
|
|
26
|
-
}: SelectMobileDevDeviceOptions): Promise<MobileDevDevice>;
|
|
27
|
-
declare function resolveMobileDevHost({
|
|
28
|
-
device,
|
|
29
|
-
host,
|
|
30
|
-
interactive,
|
|
31
|
-
platform
|
|
32
|
-
}: ResolveMobileDevHostOptions): Promise<string | undefined>;
|
|
33
|
-
//#endregion
|
|
34
|
-
export { MobileDevDevice, MobileDevPlatform, resolveMobileDevHost, selectMobileDevDevice };
|
package/dist/dev-device.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{fs as e,os as t}from"./environment.js";import{readUserPreferences as n,updateUserPreferences as r}from"./user-preferences.js";import i from"node:path";import a from"nano-spawn";import*as o from"@clack/prompts";import s from"node:process";async function c({env:e=s.env,interactive:t=s.stdin.isTTY===!0,platform:n,target:r}){let i=await p(n,e).catch(()=>[]),a=r?D(i,r):void 0;if(a)return a;if(!r&&i.length>0)return f(i,n,t);let o=await m(n,e),c=r?D(o,r):void 0;if(c)return c;if(!r&&o.length>0)return f(o,n,t);let l=n===`ios`?`iOS`:`Android`;throw Error(r?`Could not find a ${l} device matching "${r}".`:`No connected ${l} devices or available ${l} ${n===`ios`?`simulators`:`emulators`} were detected.`)}async function l({device:e,host:t,interactive:n=s.stdin.isTTY===!0,platform:r}){if(!(e.physical||r===`android`&&s.platform===`win32`)&&t===void 0)return;if(typeof t==`string`&&t!==`0.0.0.0`&&t!==`::`)return t;let i=k();if(i.length===0)throw Error(`No external IP address was detected. Pass one explicitly with --host.`);let a=await u();if(a&&i.includes(a))return a;if(i.length===1)return await d(i[0]),i[0];if(!n)throw Error(`Multiple external IP addresses were detected (${i.join(`, `)}). Pass one explicitly with --host.`);let c=await o.select({message:`Which IP address should the mobile device use to reach the development server?`,options:i.map(e=>({label:e,value:e}))});if(o.isCancel(c))throw Error(`Mobile development IP selection was cancelled.`);return await d(c),c}async function u(){return(await n()).mobileDevHost}async function d(e){try{await r({mobileDevHost:e})}catch(e){o.log.warn(`Could not remember the mobile development IP address: ${e instanceof Error?e.message:String(e)}`)}}async function f(e,t,n){if(e.length===1)return e[0];if(!n)throw Error(`Multiple ${t===`ios`?`iOS`:`Android`} devices were detected. Pass a device name explicitly.`);let r=await o.select({message:`Which ${t===`ios`?`iOS`:`Android`} device should Coreframe use?`,options:e.map(e=>({label:e.label,value:e}))});if(o.isCancel(r))throw Error(`Mobile development device selection was cancelled.`);return r}async function p(e,t){return e===`android`?h(t):_(t)}async function m(e,t){return e===`android`?g(t):v(t)}async function h(e){let t=await b(e,`platform-tools`,s.platform===`win32`?`adb.exe`:`adb`),{stdout:n}=await a(t,[`devices`],{env:e}),r=n.split(/\r?\n/).map(e=>e.match(/^(\S+)\s+device(?:\s|$)/)?.[1]).filter(e=>e!==void 0);return(await Promise.all(r.map(async n=>{let r=await S(t,e,n,`ro.product.model`),i=n.startsWith(`emulator-`),a=i?await w(t,e,n,r):await T(t,e,n,r);return{id:n,label:a===r?a:`${a} (${r})`,name:a,physical:!i}}))).sort(A)}async function g(e){let{stdout:t}=await a(await b(e,`emulator`,s.platform===`win32`?`emulator.exe`:`emulator`),[`-list-avds`],{env:e});return t.split(/\r?\n/).map(e=>e.trim()).filter(e=>e.length>0&&!/^(INFO|WARNING|ERROR)\s+\|/.test(e)).map(e=>({id:e,label:e,name:e,physical:!1}))}async function _(n){let r=await e.mkdtemp(i.join(t.tmpdir(),`coreframe-ios-devices-`)),o=i.join(r,`devices.json`);try{return await e.writeFile(o,``),await a(`xcrun`,[`devicectl`,`list`,`devices`,`--json-output`,o],{env:n}),(JSON.parse(await e.readFile(o,`utf8`)).result?.devices??[]).filter(y).map(e=>({id:e.hardwareProperties.udid,label:`${e.deviceProperties.name} (${e.hardwareProperties.productType})`,name:e.deviceProperties.name,physical:!0})).sort(A)}finally{await e.rm(r,{force:!0,recursive:!0})}}async function v(e){let{stdout:t}=await a(`xcrun`,[`simctl`,`list`,`--json`,`devices`,`available`],{env:e}),n=JSON.parse(t);return Object.entries(n.devices??{}).filter(([e])=>e.includes(`iOS-`)).flatMap(([,e])=>e).flatMap(e=>e.name?[{id:e.udid,label:e.name,name:e.name,physical:!1}]:[]).sort(A)}function y(e){return e.connectionProperties?.tunnelState!==`unavailable`&&typeof e.hardwareProperties?.platform==`string`&&(e.hardwareProperties.platform.includes(`iOS`)||e.hardwareProperties.platform.includes(`xrOS`))&&typeof e.deviceProperties?.name==`string`&&typeof e.hardwareProperties.productType==`string`&&typeof e.hardwareProperties.udid==`string`}async function b(t,n,r){let a=t.ANDROID_HOME??t.ANDROID_SDK_ROOT,o=a?[a]:x(t);for(let t of o){let a=i.join(t,n,r);try{return await e.access(a),a}catch{}}return r}function x(e){return s.platform===`darwin`?[i.join(t.homedir(),`Library`,`Android`,`sdk`)]:s.platform===`win32`&&e.LOCALAPPDATA?[i.join(e.LOCALAPPDATA,`Android`,`Sdk`)]:[i.join(t.homedir(),`Android`,`Sdk`)]}async function S(e,t,n,r){return(await C(e,t,[`-s`,n,`shell`,`getprop`,r])).trim()}async function C(e,t,n){return(await a(e,n,{env:t,timeout:3e3})).stdout}async function w(e,t,n,r){return C(e,t,[`-s`,n,`emu`,`avd`,`name`]).then(e=>e.split(/\r?\n/)[0]?.trim()||r).catch(()=>r)}async function T(e,t,n,r){return C(e,t,[`-s`,n,`shell`,`dumpsys`,`bluetooth_manager`]).then(e=>E(e)||r).catch(()=>r)}function E(e){return e.match(/\bname: (.+)/)?.[1]?.trim()}function D(e,t){let n=e.map(e=>({device:e,score:Math.max(O(t,e.name),O(t,e.id??``))})).sort((e,t)=>t.score-e.score)[0];return n&&n.score>0?n.device:void 0}function O(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(r===n)return 1e4;let i=r.indexOf(n);if(i>=0)return 5e3-i;let a=0,o=0;for(let e of n){let t=r.indexOf(e,o);if(t<0)return 0;a+=t===o?2:1,o=t+1}return a}function k(){return[...new Set(Object.values(t.networkInterfaces()).flatMap(e=>e??[]).filter(e=>!e.internal&&e.family===`IPv4`).map(e=>e.address))].sort()}function A(e,t){return e.label.localeCompare(t.label)}export{l as resolveMobileDevHost,c as selectMobileDevDevice};
|
package/dist/dev-https.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { UserConfig } from "vite";
|
|
2
|
-
|
|
3
|
-
//#region dev-https.d.ts
|
|
4
|
-
declare const devHttpsCertEnv = "COREFRAME_HTTPS_CERT";
|
|
5
|
-
declare const devHttpsKeyEnv = "COREFRAME_HTTPS_KEY";
|
|
6
|
-
type PrepareDevHttpsOptions = {
|
|
7
|
-
cwd?: string;
|
|
8
|
-
};
|
|
9
|
-
declare function prepareDevHttps({
|
|
10
|
-
cwd
|
|
11
|
-
}?: PrepareDevHttpsOptions): Promise<{
|
|
12
|
-
cert: string;
|
|
13
|
-
key: string;
|
|
14
|
-
}>;
|
|
15
|
-
declare function coreframeDevHttpsConfig(env?: NodeJS.ProcessEnv): UserConfig;
|
|
16
|
-
//#endregion
|
|
17
|
-
export { coreframeDevHttpsConfig, devHttpsCertEnv, devHttpsKeyEnv, prepareDevHttps };
|
package/dist/dev-https.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{fs as e}from"./environment.js";import t from"node:path";import n from"nano-spawn";const r=`COREFRAME_HTTPS_CERT`,i=`COREFRAME_HTTPS_KEY`;async function a({cwd:r=process.cwd()}={}){let i=t.resolve(r,`.coreframe`,`https`),a=t.join(i,`localhost.pem`),o=t.join(i,`localhost-key.pem`);if(!await s(a,o)){let r;try{r=(await n(`mkcert`,[`-CAROOT`],{stdin:`ignore`})).stdout.trim()}catch{throw Error("Local HTTPS requires mkcert. Install it, run `mkcert -install`, then retry `coreframe dev --https`.")}try{await e.access(t.join(r,`rootCA.pem`))}catch{throw Error("The mkcert local CA is not initialized. Run `mkcert -install`, then retry `coreframe dev --https`.")}await e.mkdir(i,{recursive:!0}),await n(`mkcert`,[`-cert-file`,a,`-key-file`,o,`localhost`,`127.0.0.1`,`::1`],{stdin:`ignore`}),process.platform!==`win32`&&await e.chmod(o,384)}return{cert:a,key:o}}function o(t=process.env){let n=t[r],a=t[i];if(!n&&!a)return{};if(!n||!a)throw Error(`${r} and ${i} must be set together.`);return{server:{https:{cert:e.readFileSync(n),key:e.readFileSync(a)}}}}async function s(...t){try{return await Promise.all(t.map(t=>e.access(t))),!0}catch{return!1}}export{o as coreframeDevHttpsConfig,r as devHttpsCertEnv,i as devHttpsKeyEnv,a as prepareDevHttps};
|
package/dist/dev-lock.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
//#region dev-lock.d.ts
|
|
2
|
-
type DevProcessOperations = {
|
|
3
|
-
isRunning(pid: number): boolean;
|
|
4
|
-
stop(pid: number): void;
|
|
5
|
-
waitForExit(pid: number): Promise<void>;
|
|
6
|
-
};
|
|
7
|
-
type CheckDevLockOptions = {
|
|
8
|
-
confirmStop?(pid: number): Promise<boolean>;
|
|
9
|
-
cwd?: string;
|
|
10
|
-
interactive?: boolean;
|
|
11
|
-
processes?: DevProcessOperations;
|
|
12
|
-
};
|
|
13
|
-
type AcquireDevLockOptions = CheckDevLockOptions & {
|
|
14
|
-
pid?: number;
|
|
15
|
-
};
|
|
16
|
-
type DevLock = {
|
|
17
|
-
release(): Promise<void>;
|
|
18
|
-
takeoverApproved: boolean;
|
|
19
|
-
};
|
|
20
|
-
declare function acquireDevLock({
|
|
21
|
-
confirmStop,
|
|
22
|
-
cwd,
|
|
23
|
-
interactive,
|
|
24
|
-
pid,
|
|
25
|
-
processes
|
|
26
|
-
}?: AcquireDevLockOptions): Promise<DevLock | undefined>;
|
|
27
|
-
//#endregion
|
|
28
|
-
export { DevLock, acquireDevLock };
|
package/dist/dev-lock.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{randomUUID as e}from"node:crypto";import{link as t,mkdir as n,readFile as r,unlink as i,writeFile as a}from"node:fs/promises";import o from"node:path";import*as s from"@clack/prompts";import c from"node:process";const l={isRunning:h,stop(e){try{c.kill(e,`SIGTERM`)}catch(e){if(!v(e))throw e}},waitForExit:g};async function u({confirmStop:r=f,cwd:s=c.cwd(),interactive:u=c.stdin.isTTY===!0,pid:p=c.pid,processes:h=l}={}){let g=o.resolve(s,`.coreframe/dev.lock`),v={pid:p,token:e()},y=`${JSON.stringify(v)}\n`,b=`${g}.${v.token}.tmp`,x=!1;await n(o.dirname(g),{recursive:!0}),await a(b,y,{flag:`wx`,mode:384});try{for(;;){try{return await t(b,g),{async release(){await m(g,y)},takeoverApproved:x}}catch(e){if(!_(e))throw e}let e=await d({confirmStop:r,file:g,interactive:u,processes:h});if(e===void 0)return;x||=e}}finally{await i(b).catch(()=>void 0)}}async function d({confirmStop:e,file:t,interactive:n,processes:r}){let i=await p(t);if(!i||!r.isRunning(i.owner.pid))return await m(t,i?.source),!1;if(!n)throw Error(`Coreframe dev is already running for this project (PID ${i.owner.pid}). Stop it before starting another.`);if(await e(i.owner.pid))return r.stop(i.owner.pid),await r.waitForExit(i.owner.pid),await m(t,i.source),!0}async function f(e){let t=await s.confirm({initialValue:!1,message:`Coreframe dev is already running for this project (PID ${e}). Stop it and start here?`});return s.isCancel(t)||!t?(s.cancel(`Keeping the existing Coreframe dev process.`),!1):!0}async function p(e){try{let t=await r(e,`utf8`),n=JSON.parse(t);return!Number.isSafeInteger(n.pid)||Number(n.pid)<=0||!n.token?void 0:{owner:n,source:t}}catch{return}}async function m(e,t){let n=await r(e,`utf8`).catch(()=>void 0);(t===void 0||n===t)&&await i(e).catch(()=>void 0)}function h(e){try{return c.kill(e,0),!0}catch(e){return!v(e)}}async function g(e){let t=Date.now()+1e4;for(;h(e);){if(Date.now()>=t)throw Error(`Coreframe dev process ${e} did not stop within 10 seconds.`);await new Promise(e=>setTimeout(e,50))}}function _(e){return y(e)&&e.code===`EEXIST`}function v(e){return y(e)&&e.code===`ESRCH`}function y(e){return e instanceof Error}export{u as acquireDevLock};
|
package/dist/dev-timing.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
//#region dev-timing.d.ts
|
|
2
|
-
declare const devStartupTimingsEnv = "COREFRAME_DEV_TIMINGS";
|
|
3
|
-
declare const devStartupStartedAtEnv = "COREFRAME_DEV_STARTED_AT";
|
|
4
|
-
type DevStartupTimingOptions = {
|
|
5
|
-
env?: NodeJS.ProcessEnv;
|
|
6
|
-
now?: () => number;
|
|
7
|
-
write?: (message: string) => void;
|
|
8
|
-
};
|
|
9
|
-
declare function createDevStartupTiming({
|
|
10
|
-
env,
|
|
11
|
-
now,
|
|
12
|
-
write
|
|
13
|
-
}?: DevStartupTimingOptions): {
|
|
14
|
-
environment: {
|
|
15
|
-
COREFRAME_DEV_STARTED_AT: string;
|
|
16
|
-
COREFRAME_DEV_TIMINGS: string;
|
|
17
|
-
} | {
|
|
18
|
-
COREFRAME_DEV_STARTED_AT?: undefined;
|
|
19
|
-
COREFRAME_DEV_TIMINGS?: undefined;
|
|
20
|
-
};
|
|
21
|
-
measure<Result>(name: string, operation: () => Promise<Result>): Promise<Result>;
|
|
22
|
-
report(): void;
|
|
23
|
-
};
|
|
24
|
-
//#endregion
|
|
25
|
-
export { createDevStartupTiming, devStartupStartedAtEnv, devStartupTimingsEnv };
|
package/dist/dev-timing.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=`COREFRAME_DEV_TIMINGS`,t=`COREFRAME_DEV_STARTED_AT`;function n({env:n=process.env,now:r=Date.now,write:i=console.log}={}){let a=n[e]===`1`,o=r(),s=[];return{environment:a?{[t]:String(o),[e]:`1`}:{},async measure(e,t){if(!a)return t();let n=r();try{return await t()}finally{s.push({duration:Math.max(0,Math.round(r()-n)),name:e})}},report(){if(!a)return;let e=Math.max(0,Math.round(r()-o)),t=s.map(({duration:e,name:t})=>`${t}=${e}ms`).join(` `);i(`[coreframe:startup] preflight=${e}ms${t?` ${t}`:``}`)}}}export{n as createDevStartupTiming,t as devStartupStartedAtEnv,e as devStartupTimingsEnv};
|
package/dist/dev.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { CoreframeConfig } from "./config.js";
|
|
2
|
-
|
|
3
|
-
//#region dev.d.ts
|
|
4
|
-
type DevServerOptions = {
|
|
5
|
-
cwd?: string;
|
|
6
|
-
debug?: DevDebugFeature;
|
|
7
|
-
device?: string;
|
|
8
|
-
env?: NodeJS.ProcessEnv;
|
|
9
|
-
host?: string | true;
|
|
10
|
-
https?: boolean;
|
|
11
|
-
interactive?: boolean;
|
|
12
|
-
managed?: boolean;
|
|
13
|
-
noManaged?: boolean;
|
|
14
|
-
platform?: DevPlatform;
|
|
15
|
-
verbose?: boolean;
|
|
16
|
-
webPort?: number;
|
|
17
|
-
};
|
|
18
|
-
declare const devPlatforms: readonly ["web", "desktop", "ios", "android"];
|
|
19
|
-
declare const devDebugFeatures: readonly ["managed-dev-overlay"];
|
|
20
|
-
declare const managedDevOverlayDebugEnv = "VITE_COREFRAME_MANAGED_DEV_OVERLAY_DEBUG";
|
|
21
|
-
type DevPlatform = "android" | "desktop" | "ios" | "web";
|
|
22
|
-
type DevDebugFeature = (typeof devDebugFeatures)[number];
|
|
23
|
-
declare function resolveDevPlatforms(config: CoreframeConfig): DevPlatform[];
|
|
24
|
-
declare function runDevServer({
|
|
25
|
-
cwd,
|
|
26
|
-
debug,
|
|
27
|
-
device,
|
|
28
|
-
env,
|
|
29
|
-
host,
|
|
30
|
-
https,
|
|
31
|
-
interactive,
|
|
32
|
-
managed,
|
|
33
|
-
noManaged,
|
|
34
|
-
platform,
|
|
35
|
-
verbose,
|
|
36
|
-
webPort
|
|
37
|
-
}?: DevServerOptions): Promise<void>;
|
|
38
|
-
//#endregion
|
|
39
|
-
export { DevDebugFeature, DevPlatform, DevServerOptions, devDebugFeatures, devPlatforms, managedDevOverlayDebugEnv, resolveDevPlatforms, runDevServer };
|
package/dist/dev.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{readProjectConfig as e}from"./config.js";import{fs as t,net as n}from"./environment.js";import{ProjectPostgresAlreadyRunningError as r,startProjectPostgres as i,stopProjectPostgres as a}from"./db/local-postgres.js";import{ensureDevI18nCatalogs as o}from"./i18n/workflows.js";import{resolveMobileDevHost as s,selectMobileDevDevice as ee}from"./dev-device.js";import{devHttpsCertEnv as te,devHttpsKeyEnv as c,prepareDevHttps as ne}from"./dev-https.js";import{acquireDevLock as l}from"./dev-lock.js";import{createDevStartupTiming as u}from"./dev-timing.js";import{managedDevEnv as re}from"./managed-dev-protocol.js";import{isManagedDevCheckout as ie,isPrimaryCheckout as ae}from"./managed-dev.js";import{createTauriDevOutput as oe}from"./tauri-dev-output.js";import d from"node:path";import f from"nano-spawn";import{finished as p}from"node:stream/promises";import*as m from"@clack/prompts";import h from"node:process";import{once as g}from"node:events";import{createInterface as _}from"node:readline/promises";import{determineAgent as se}from"@vercel/detect-agent";import{createPrefixStream as v,supervise as y}from"procband";const b=[`web`,`desktop`,`ios`,`android`],x=[`managed-dev-overlay`],S=`VITE_COREFRAME_MANAGED_DEV_OVERLAY_DEBUG`;function C(e){let t=e.dev?.platforms??[`web`];for(let e of t)if(!b.includes(e))throw Error(`Invalid development platform "${String(e)}". Expected one of: ${b.join(`, `)}.`);return[...new Set(t)]}const ce=d.resolve(`node_modules`,`.bin`),w=h.platform===`win32`?`pnpm.cmd`:`pnpm`,le=h.platform===`win32`?`portless.cmd`:`portless`,ue=h.platform===`win32`?`react-router.cmd`:`react-router`,de=h.platform===`win32`?`turso.cmd`:`turso`;async function T({cwd:r=h.cwd(),debug:i,device:a,env:g=h.env,host:_,https:b=!1,interactive:x=h.stdin.isTTY===!0,managed:C=!1,noManaged:T=!1,platform:M=`web`,verbose:ge=!1,webPort:N}={}){let P=u({env:g}),F=g.PATH??g.Path??``,I=M===`web`?j(N??g.COREFRAME_WEB_PORT):void 0,L,R,z,B,V,H,U=!1,W,G=g,K=new AbortController;if(C&&T)throw Error(`Cannot use --managed and --no-managed together.`);if(i===`managed-dev-overlay`&&C)throw Error(`Cannot use --managed with --debug managed-dev-overlay.`);if(b&&M!==`web`)throw Error(`Local HTTPS is only supported for the web development platform.`);if(a!==void 0&&M!==`ios`&&M!==`android`)throw Error(`A device name or ID is only supported for iOS or Android development.`);if(M===`web`&&g.TAURI_ENV_PLATFORM!==void 0&&g.COREFRAME_TAURI_DEV!==`1`){let e=g.TAURI_ENV_PLATFORM===`ios`||g.TAURI_ENV_PLATFORM===`android`?g.TAURI_ENV_PLATFORM:`desktop`;throw Error(`Direct Tauri development is not supported. Run \`pnpm dev ${e}\` instead.`)}let q=await P.measure(`dev-lock`,()=>l({cwd:r,interactive:x}));if(!q)return;let J=()=>{U||(U=!0,K.abort(),R?.kill(`SIGTERM`),B?.kill(`SIGTERM`),H?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),L?.nodeChildProcess.then(e=>e.kill(`SIGTERM`)).catch(()=>void 0),V?.kill(`SIGTERM`))},Y=e=>{W??=e,J()},X=[`SIGINT`,`SIGTERM`].map(e=>{let t=()=>Y(e);return h.on(e,t),{handler:t,signal:e}}),Z=async e=>{let t=y(e);R=t;try{await t.expectSuccess()}catch(e){if(!U)throw e}finally{R===t&&(R=void 0)}};try{let l=M===`ios`||M===`android`?M:void 0,u=l?await ee({env:g,interactive:x,platform:l,target:a}):void 0,D=l&&u?await s({device:u,host:_,interactive:x,platform:l}):void 0,j=D?!0:_,[N,R,W]=await Promise.all([P.measure(`config`,()=>e({cwd:r})),P.measure(`routing`,async()=>M===`web`&&g.PORTLESS!==`0`&&g.TAURI_ENV_PLATFORM===void 0&&!(await se()).isAgent&&await ae(r)),P.measure(`managed`,async()=>i!==`managed-dev-overlay`&&(C||x&&!T)&&await ie(r))]);await P.measure(`i18n`,()=>o({cwd:r,projectConfig:N}));let X=await P.measure(`https`,async()=>b&&!R?ne({cwd:r}):void 0);G={...g,...P.environment,...i===`managed-dev-overlay`?{[S]:`1`}:void 0,...M===`web`?void 0:{COREFRAME_TAURI_DEV:`1`,TAURI_ENV_PLATFORM:me(M),...D?{TAURI_DEV_HOST:D}:void 0},...X?{[te]:X.cert,[c]:X.key}:void 0};let Q=async()=>{let e=v({label:`web`}),t=v({color:`red`,label:`web`});e.pipe(h.stdout,{end:!1}),t.pipe(h.stderr,{end:!1}),H=f(R?le:ue,R?he({host:j,port:I}):A({host:j,port:I}),{cwd:r,env:{...G,CLOUDFLARE_ENV:`development`,NODE_OPTIONS:[G.NODE_OPTIONS,`--conditions=development`].filter(Boolean).join(` `),PATH:ce+d.delimiter+F},stdin:`inherit`});let n=Promise.allSettled([E(H.stdout,e),E(H.stderr,t)]);try{await H;let e=(await n).find(e=>e.status===`rejected`);if(e)throw e.reason}catch(e){if(!U)throw e}finally{await n,e.end(),t.end(),await Promise.allSettled([p(e),p(t)]),H=void 0}},_e=async()=>{if(M===`web`){await Q();return}let e=Q().then(()=>{if(!U)throw Error(`The Vite development server stopped while Tauri was still running.`)}),t=async()=>{for(;!U;){let e,t;if(M===`ios`&&!ge){t=v({label:`ios`}),t.pipe(h.stdout,{end:!1});try{e=await oe({output:t}),m.log.info(`Full iOS log: ${e.logFile}`)}catch{t.end(),t=void 0,m.log.warn(`Could not create the temporary iOS log; showing full Tauri output.`)}}let n=f(w,k(M,u?.name,D),{cwd:r,env:g,stdio:e?[`inherit`,`pipe`,`pipe`]:`inherit`});L=n;let i=e?.consume(n);try{await n;return}catch(t){if(U)throw t;if(await i,M===`ios`&&x&&e?.failureReason()===`locked-device`){if(await fe({onInterrupt:()=>Y(`SIGINT`),signal:K.signal}))continue;return}throw await e?.reportFailure(),t}finally{await Promise.allSettled([n,i]),await e?.close(),t?.end(),L===n&&(L=void 0)}}};try{await Promise.race([e,t()])}finally{J(),await Promise.allSettled([e,L]),L=void 0}},ve=async()=>{let e=y({name:`panda`,command:w,args:[`exec`,`panda`,`dev`,`--no-color`],cwd:r,env:G});B=e;try{if(await e.expectSuccess(),!U)throw Error(`The Panda CSS watcher stopped while development was still running.`)}catch(e){if(!U)throw e}finally{B===e&&(B=void 0)}},$=async()=>{let e=ve(),t=_e();try{await Promise.race([e,t]),U&&await t}finally{J(),await Promise.allSettled([e,t])}};if(W&&(G={...G,[re]:`1`}),U||N.database?.dialect===`sqlite`&&(await P.measure(`database`,async()=>{let e=await n.getAvailablePort(),i=d.resolve(r,`.coreframe`),a=d.join(i,`turso.db`);await t.mkdir(i,{recursive:!0}),G={...G,TURSO_DATABASE_URL:`http://127.0.0.1:${e}`,TURSO_AUTH_TOKEN:`dev`},V=y({name:`turso`,command:de,args:[`dev`,`--port`,String(e),`--db-file`,a],cwd:r,env:g}),await V.waitFor(`listening`)}),await P.measure(`schema`,()=>Z({name:`db`,command:w,args:[`db`,`ensure`],cwd:r,env:G,prefix:!1})),U))return;if(pe(N)){let e=v({label:`postgres`});e.pipe(h.stdout,{end:!1});try{let t=await P.measure(`database`,()=>O({config:N,cwd:r,env:G,failIfRunning:!0,interactive:x,isStopping:()=>U,postgresOutput:e,takeoverApproved:q.takeoverApproved}));if(!t)return;z=t,G=t.env;try{U||await P.measure(`schema`,()=>Z({name:`db`,command:w,args:[`db`,`ensure`],cwd:r,env:G,prefix:!1})),U||(P.report(),await $())}finally{await t[Symbol.asyncDispose](),z===t&&(z=void 0)}}finally{e.end()}return}P.report(),await $()}finally{J();let e;try{await z?.[Symbol.asyncDispose]()}catch(t){e=t}finally{for(let{handler:e,signal:t}of X)h.off(t,e);W&&(h.exitCode??=W===`SIGINT`?130:143)}D(e),await q.release()}}async function fe({onInterrupt:e,signal:t}){m.log.warn(`Unable to launch the iOS app because the device is locked.`);let n=_({input:h.stdin,output:h.stdout});n.once(`SIGINT`,e);try{return await n.question(`Unlock the device, then press Enter to retry. Press Ctrl-C to stop.
|
|
3
|
-
`,{signal:t}),!0}catch(e){if(t.aborted&&e instanceof Error&&e.name===`AbortError`)return!1;throw e}finally{n.close()}}async function E(e,t){for await(let n of e)t.write(`${n}\n`)||await g(t,`drain`)}function D(e){if(e)throw e}async function O({interactive:e,isStopping:t,takeoverApproved:n,...o}){try{return await i(o)}catch(s){if(!(s instanceof r)||!e)throw s;if(!n){let e=await m.confirm({initialValue:!1,message:`PostgreSQL is already running for this project (PID ${s.pid}). Stop it and start here?`});if(m.isCancel(e)||!e){m.cancel(`Keeping the existing PostgreSQL process.`);return}}return await a(s),t()?void 0:i(o)}}function pe(e){return(e.database?.dialect??`postgres`)===`postgres`}function k(e,t,n){return[`exec`,`tauri`,...e===`desktop`?[]:[e],`dev`,`--config`,JSON.stringify({build:{beforeDevCommand:``}}),...n===void 0?[]:[`--host=${n}`],...t===void 0?[]:[t]]}function me(e){return e===`desktop`?h.platform===`win32`?`windows`:h.platform:e}function A({host:e,port:t}){return[`dev`,...e===void 0?[]:[`--host`,e===!0?`0.0.0.0`:e],...t===void 0?[]:[`--port`,String(t)]]}function he({host:e,port:t}){return[`run`,...t===void 0?[]:[`--app-port`,String(t)],`react-router`,...A({host:e,port:void 0})]}function j(e){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<=0||t>65535)throw Error(`COREFRAME_WEB_PORT must be a valid TCP port.`);return t}export{x as devDebugFeatures,b as devPlatforms,S as managedDevOverlayDebugEnv,C as resolveDevPlatforms,T as runDevServer};
|
package/dist/environment.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { access, chmod, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
3
|
-
import { homedir, networkInterfaces, tmpdir } from "node:os";
|
|
4
|
-
|
|
5
|
-
//#region environment.d.ts
|
|
6
|
-
declare const fs: {
|
|
7
|
-
access: typeof access;
|
|
8
|
-
chmod: typeof chmod;
|
|
9
|
-
mkdir: typeof mkdir;
|
|
10
|
-
mkdtemp: typeof mkdtemp;
|
|
11
|
-
readFile: typeof readFile;
|
|
12
|
-
readFileSync: typeof readFileSync;
|
|
13
|
-
rm: typeof rm;
|
|
14
|
-
writeFile: typeof writeFile;
|
|
15
|
-
};
|
|
16
|
-
declare const net: {
|
|
17
|
-
getAvailablePort: typeof getAvailablePort;
|
|
18
|
-
};
|
|
19
|
-
declare const os: {
|
|
20
|
-
homedir: typeof homedir;
|
|
21
|
-
kill: (pid: number, signal?: string | number) => true;
|
|
22
|
-
networkInterfaces: typeof networkInterfaces;
|
|
23
|
-
tmpdir: typeof tmpdir;
|
|
24
|
-
};
|
|
25
|
-
declare function getAvailablePort(): Promise<number>;
|
|
26
|
-
//#endregion
|
|
27
|
-
export { fs, net, os };
|
package/dist/environment.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{access as e,chmod as t,mkdir as n,mkdtemp as r,readFile as i,rm as a,writeFile as o}from"node:fs/promises";import{readFileSync as s}from"node:fs";import{homedir as c,networkInterfaces as l,tmpdir as u}from"node:os";import d from"node:process";import{createServer as f}from"node:net";const p={access:e,chmod:t,mkdir:n,mkdtemp:r,readFile:i,readFileSync:s,rm:a,writeFile:o},m={getAvailablePort:g},h={homedir:c,kill:d.kill,networkInterfaces:l,tmpdir:u};async function g(){let e=f();try{await new Promise((t,n)=>{e.once(`error`,n),e.listen(0,`127.0.0.1`,t)});let t=e.address();if(!t||typeof t==`string`)throw Error(`Could not allocate an available TCP port.`);return t.port}finally{e.listening&&await new Promise((t,n)=>{e.close(e=>e?n(e):t())})}}export{p as fs,m as net,h as os};
|
package/dist/i18n/catalogs.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { I18nConfig } from "../config.js";
|
|
2
|
-
import { RichCatalog, TranslationRequestMessage, TranslationResponse } from "./contracts.js";
|
|
3
|
-
|
|
4
|
-
//#region i18n/catalogs.d.ts
|
|
5
|
-
type ResolvedI18nConfig = Required<Pick<I18nConfig, "catalogs" | "locales" | "sourceLocale">> & Pick<I18nConfig, "generator"> & {
|
|
6
|
-
directory: string;
|
|
7
|
-
};
|
|
8
|
-
declare function catalogRelativePath(config: ResolvedI18nConfig, locale: string, catalog: string): string;
|
|
9
|
-
declare function runLinguiExtract(cwd: string): Promise<void>;
|
|
10
|
-
declare function validateLinguiCompile({
|
|
11
|
-
config,
|
|
12
|
-
cwd,
|
|
13
|
-
strict,
|
|
14
|
-
temporaryDirectory
|
|
15
|
-
}: {
|
|
16
|
-
config: ResolvedI18nConfig;
|
|
17
|
-
cwd: string;
|
|
18
|
-
strict: boolean;
|
|
19
|
-
temporaryDirectory: string;
|
|
20
|
-
}): Promise<void>;
|
|
21
|
-
declare function collectMissingTranslations({
|
|
22
|
-
config,
|
|
23
|
-
cwd
|
|
24
|
-
}: {
|
|
25
|
-
config: ResolvedI18nConfig;
|
|
26
|
-
cwd: string;
|
|
27
|
-
}): Promise<TranslationRequestMessage[]>;
|
|
28
|
-
declare function generateMissingTranslations({
|
|
29
|
-
config,
|
|
30
|
-
cwd,
|
|
31
|
-
messages,
|
|
32
|
-
env
|
|
33
|
-
}: {
|
|
34
|
-
config: ResolvedI18nConfig;
|
|
35
|
-
cwd: string;
|
|
36
|
-
messages: TranslationRequestMessage[];
|
|
37
|
-
env?: NodeJS.ProcessEnv;
|
|
38
|
-
}): Promise<TranslationResponse>;
|
|
39
|
-
declare function applyGeneratedTranslations({
|
|
40
|
-
config,
|
|
41
|
-
cwd,
|
|
42
|
-
missing,
|
|
43
|
-
response
|
|
44
|
-
}: {
|
|
45
|
-
config: ResolvedI18nConfig;
|
|
46
|
-
cwd: string;
|
|
47
|
-
missing: TranslationRequestMessage[];
|
|
48
|
-
response: TranslationResponse;
|
|
49
|
-
}): Promise<void>;
|
|
50
|
-
declare function assertCompleteCatalogs({
|
|
51
|
-
config,
|
|
52
|
-
cwd
|
|
53
|
-
}: {
|
|
54
|
-
config: ResolvedI18nConfig;
|
|
55
|
-
cwd: string;
|
|
56
|
-
}): Promise<void>;
|
|
57
|
-
declare function readRichCatalog(path: string): Promise<RichCatalog>;
|
|
58
|
-
declare function writeRichCatalog(path: string, catalog: RichCatalog): Promise<void>;
|
|
59
|
-
//#endregion
|
|
60
|
-
export { ResolvedI18nConfig, applyGeneratedTranslations, assertCompleteCatalogs, catalogRelativePath, collectMissingTranslations, generateMissingTranslations, readRichCatalog, runLinguiExtract, validateLinguiCompile, writeRichCatalog };
|
package/dist/i18n/catalogs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{importProjectDependency as e}from"../project.js";import{resolveProjectArtifact as t}from"./paths.js";import{copyFile as n,mkdir as r,readFile as i,rename as a,rm as o,writeFile as s}from"node:fs/promises";import{dirname as c,join as l}from"node:path";import u from"nano-spawn";function d(e,t,n){return`${e.directory}/${t}/${n}.json`}function f(e,t,n){return`${e.directory}/${t}/${n}.mjs`}async function p(e){await u(`pnpm`,[`exec`,`lingui`,`extract`],{cwd:e,stdio:`inherit`})}async function m({config:e,cwd:i,strict:a,temporaryDirectory:s}){let p=[];try{for(let a of e.locales)for(let o of e.catalogs){let u=t(i,d(e,a,o)),f=await y(u),m=Object.fromEntries(Object.entries(f).filter(([,e])=>!e.obsolete)),h=l(s,`${a}-${o}.json`);await r(c(h),{recursive:!0}),await n(u,h),p.push({path:u,backup:h}),await b(u,m)}await u(`pnpm`,[`exec`,`lingui`,`compile`,...a?[`--strict`]:[]],{cwd:i,stdio:`inherit`})}finally{try{for(let{path:e,backup:t}of p)await n(t,e)}finally{for(let n of e.locales)for(let r of e.catalogs)await o(t(i,f(e,n,r)),{force:!0})}}}async function h({config:e,cwd:n}){let r=[];for(let i of e.locales)if(i!==e.sourceLocale)for(let a of e.catalogs){let o=await y(t(n,d(e,i,a)));for(let[e,t]of Object.entries(o)){if(t.obsolete||t.translation?.trim())continue;let n=t.message;if(typeof n!=`string`||!n)throw Error(`Missing source message metadata for ${i}:${e}.`);r.push({catalog:a,comments:t.comments?.filter(e=>typeof e==`string`)??[],context:t.context,id:e,locale:i,message:n,origins:t.origin?.map(([e,t])=>t?`${e}:${t}`:e)??[],placeholders:Object.keys(t.placeholders??{}).sort()})}}return r.sort((e,t)=>T(e).localeCompare(T(t)))}async function g({config:e,cwd:t,messages:n,env:r=process.env}){if(n.length===0)return{translations:[],version:1};if(!e.generator)throw Error(`I18n preparation found ${n.length} missing translations, but no generator is configured.`);let i={messages:n,sourceLocale:e.sourceLocale,version:1};return x(await S({args:e.generator.args??[],command:e.generator.command,cwd:t,env:r,input:JSON.stringify(i)}))}async function _({config:n,cwd:r,missing:i,response:a}){let o=new Map(i.map(e=>[T(e),e])),s=new Map;for(let e of a.translations){let t=T(e);if(!o.has(t))throw Error(`Translation generator returned unexpected entry ${e.locale}:${e.catalog}:${e.id}.`);if(s.has(t))throw Error(`Translation generator returned duplicate entry ${e.locale}:${e.catalog}:${e.id}.`);if(!e.translation.trim())throw Error(`Translation generator returned an empty entry ${e.locale}:${e.id}.`);s.set(t,e.translation)}let c=[...o.keys()].filter(e=>!s.has(e));if(c.length>0)throw Error(`Translation generator omitted ${c.length} required entries.`);let l=await e(`@lingui/message-utils/compileMessage`,r);for(let e of i){let t=s.get(T(e));C({compileMessage:l,id:e.id,locale:e.locale,source:e.message,translation:t})}for(let e of n.locales)if(e!==n.sourceLocale)for(let i of n.catalogs){let a=t(r,d(n,e,i)),o=await y(a),c=!1;for(let[t,n]of Object.entries(o)){let r=s.get(T({catalog:i,id:t,locale:e}));if(r!==void 0){if(n.translation?.trim())throw Error(`Refusing to overwrite preserved translation ${e}:${t}.`);n.translation=r,c=!0}}c&&await b(a,o)}}async function v({config:n,cwd:r}){let i=await h({config:n,cwd:r});if(i.length>0)throw Error(`I18n catalogs remain incomplete: ${i.length} translations are missing.`);let a=await e(`@lingui/message-utils/compileMessage`,r);for(let e of n.locales)if(e!==n.sourceLocale)for(let i of n.catalogs){let o=await y(t(r,d(n,e,i)));for(let[t,n]of Object.entries(o))if(!n.obsolete){if(typeof n.message!=`string`||typeof n.translation!=`string`)throw Error(`Incomplete source metadata for active translation ${e}:${t}.`);C({compileMessage:a,id:t,locale:e,source:n.message,translation:n.translation})}}}async function y(e){let t=JSON.parse(await i(e,`utf8`));if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Lingui rich JSON catalog must be an object: ${e}.`);for(let[n,r]of Object.entries(t)){if(!r||typeof r!=`object`||Array.isArray(r))throw Error(`Invalid Lingui rich JSON message ${n} in ${e}.`);let t=r;if(t.translation!==void 0&&typeof t.translation!=`string`)throw Error(`Invalid translation value for ${n} in ${e}.`);if(t.message!==void 0&&t.message!==null&&typeof t.message!=`string`)throw Error(`Invalid source message value for ${n} in ${e}.`);if(t.context!==void 0&&typeof t.context!=`string`)throw Error(`Invalid context value for ${n} in ${e}.`);if(t.obsolete!==void 0&&typeof t.obsolete!=`boolean`)throw Error(`Invalid obsolete marker for ${n} in ${e}.`);if(t.comments!==void 0&&(!Array.isArray(t.comments)||t.comments.some(e=>typeof e!=`string`)))throw Error(`Invalid comments for ${n} in ${e}.`);if(t.origin!==void 0&&(!Array.isArray(t.origin)||t.origin.some(e=>!Array.isArray(e)||typeof e[0]!=`string`||e[1]!==void 0&&typeof e[1]!=`number`)))throw Error(`Invalid origins for ${n} in ${e}.`);if(t.placeholders!==void 0&&(!t.placeholders||typeof t.placeholders!=`object`||Array.isArray(t.placeholders)))throw Error(`Invalid placeholders for ${n} in ${e}.`)}return t}async function b(e,t){await r(c(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;await s(n,`${JSON.stringify(t,null,2)}\n`),await a(n,e)}function x(e){let t;try{t=JSON.parse(e)}catch{throw Error(`Translation generator returned invalid JSON.`)}if(!t||typeof t!=`object`||t.version!==1||!Array.isArray(t.translations))throw Error(`Translation generator returned an invalid response envelope.`);for(let e of t.translations)if(!e||typeof e!=`object`||typeof e.id!=`string`||typeof e.catalog!=`string`||typeof e.locale!=`string`||typeof e.translation!=`string`)throw Error(`Translation generator returned an invalid translation entry.`);return t}function S({args:e,command:t,cwd:n,env:r,input:i}){return u(t,e,{cwd:n,env:r,stdio:[{string:i},`pipe`,`ignore`]}).then(({stdout:e})=>{if(Buffer.byteLength(e)>10*1024*1024)throw Error(`Translation generator output exceeded 10 MiB.`);return e}).catch(()=>{throw Error(`Translation generator exited unsuccessfully.`)})}function C({compileMessage:e,id:t,locale:n,source:r,translation:i}){let a,o;try{a=e.compileMessageOrThrow(r),o=e.compileMessageOrThrow(i)}catch{throw Error(`Translation ${n}:${t} is not valid ICU MessageFormat.`)}let s=w(a),c=w(o);if(s.length!==c.length||s.some((e,t)=>e!==c[t]))throw Error(`Translation ${n}:${t} does not preserve source ICU placeholders.`)}function w(e){let t=[];function n(e){for(let r of e){if(typeof r==`string`)continue;let[e,i=`argument`,a]=r;if(t.push(`${e}:${i}`),a&&typeof a==`object`&&!Array.isArray(a))for(let e of Object.values(a))Array.isArray(e)&&n(e)}}return n(e),t.sort()}function T(e){return`${e.locale}\0${e.catalog}\0${e.id}`}export{_ as applyGeneratedTranslations,v as assertCompleteCatalogs,d as catalogRelativePath,h as collectMissingTranslations,g as generateMissingTranslations,y as readRichCatalog,p as runLinguiExtract,m as validateLinguiCompile,b as writeRichCatalog};
|
package/dist/i18n/contracts.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
//#region i18n/contracts.d.ts
|
|
2
|
-
type RichCatalogMessage = {
|
|
3
|
-
comments?: string[];
|
|
4
|
-
context?: string;
|
|
5
|
-
extra?: unknown;
|
|
6
|
-
message?: string | null;
|
|
7
|
-
obsolete?: boolean;
|
|
8
|
-
origin?: [string, number?][];
|
|
9
|
-
placeholders?: Record<string, unknown>;
|
|
10
|
-
translation?: string;
|
|
11
|
-
};
|
|
12
|
-
type RichCatalog = Record<string, RichCatalogMessage>;
|
|
13
|
-
type TranslationRequestMessage = {
|
|
14
|
-
catalog: string;
|
|
15
|
-
comments: string[];
|
|
16
|
-
context?: string;
|
|
17
|
-
id: string;
|
|
18
|
-
locale: string;
|
|
19
|
-
message: string;
|
|
20
|
-
origins: string[];
|
|
21
|
-
placeholders: string[];
|
|
22
|
-
};
|
|
23
|
-
type TranslationRequest = {
|
|
24
|
-
messages: TranslationRequestMessage[];
|
|
25
|
-
sourceLocale: string;
|
|
26
|
-
version: 1;
|
|
27
|
-
};
|
|
28
|
-
type TranslationResponse = {
|
|
29
|
-
translations: {
|
|
30
|
-
catalog: string;
|
|
31
|
-
id: string;
|
|
32
|
-
locale: string;
|
|
33
|
-
translation: string;
|
|
34
|
-
}[];
|
|
35
|
-
version: 1;
|
|
36
|
-
};
|
|
37
|
-
type I18nSnapshotFile = {
|
|
38
|
-
digest: string;
|
|
39
|
-
path: string;
|
|
40
|
-
size: number;
|
|
41
|
-
};
|
|
42
|
-
type I18nSnapshotManifest = {
|
|
43
|
-
baseline?: string;
|
|
44
|
-
catalogs: string[];
|
|
45
|
-
files: I18nSnapshotFile[];
|
|
46
|
-
generator: string;
|
|
47
|
-
linguiVersion: string;
|
|
48
|
-
locales: string[];
|
|
49
|
-
projectId: string;
|
|
50
|
-
revision: string;
|
|
51
|
-
sourceLocale: string;
|
|
52
|
-
version: 1;
|
|
53
|
-
};
|
|
54
|
-
type I18nSnapshotReference = {
|
|
55
|
-
revision: string;
|
|
56
|
-
snapshot: string;
|
|
57
|
-
version: 1;
|
|
58
|
-
};
|
|
59
|
-
//#endregion
|
|
60
|
-
export { I18nSnapshotFile, I18nSnapshotManifest, I18nSnapshotReference, RichCatalog, RichCatalogMessage, TranslationRequest, TranslationRequestMessage, TranslationResponse };
|
package/dist/i18n/contracts.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{};
|
package/dist/i18n/paths.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
//#region i18n/paths.d.ts
|
|
2
|
-
declare function assertSha256(value: string): string;
|
|
3
|
-
declare function assertRevision(value: string): string;
|
|
4
|
-
declare function assertI18nSegment(value: string, label: string): string;
|
|
5
|
-
declare function i18nNamespace(projectId: string): string;
|
|
6
|
-
declare function i18nObjectKey(projectId: string, digest: string): string;
|
|
7
|
-
declare function i18nCommitReferenceKey(projectId: string, revision: string): string;
|
|
8
|
-
declare function i18nReleaseReferenceKey(projectId: string, tag: string): string;
|
|
9
|
-
declare function assertReleaseTag(tag: string): string;
|
|
10
|
-
declare function resolveProjectArtifact(cwd: string, path: string): string;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { assertI18nSegment, assertReleaseTag, assertRevision, assertSha256, i18nCommitReferenceKey, i18nNamespace, i18nObjectKey, i18nReleaseReferenceKey, resolveProjectArtifact };
|
package/dist/i18n/paths.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{resolve as e,sep as t}from"node:path";const n=/^[a-f0-9]{64}$/,r=/^[a-f0-9]{40}$/,i=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function a(e){if(!n.test(e))throw Error(`Invalid SHA-256 digest "${e}".`);return e}function o(e){if(!r.test(e))throw Error(`Invalid full Git revision "${e}".`);return e}function s(e,t){if(!i.test(e))throw Error(`${t} must contain only letters, numbers, dots, underscores, or hyphens.`);return e}function c(e){return`projects/${s(e,`Project ID`)}/i18n/v1`}function l(e,t){return a(t),`${c(e)}/objects/sha256/${t.slice(0,2)}/${t}`}function u(e,t){return o(t),`${c(e)}/commits/${t}.json`}function d(e,t){return f(t),`${c(e)}/releases/${encodeURIComponent(t)}.json`}function f(e){if(!e.startsWith(`v`)||e.length<2||e.length>128||/\s/.test(e)||e.includes(`..`))throw Error(`Release tag "${e}" must be a valid v-prefixed tag.`);return e}function p(n,r){if(!r||r.startsWith(`/`)||r.includes(`\0`))throw Error(`Unsafe i18n artifact path "${r}".`);let i=e(n),a=e(i,r);if(a!==i&&!a.startsWith(`${i}${t}`))throw Error(`Unsafe i18n artifact path "${r}".`);return a}export{s as assertI18nSegment,f as assertReleaseTag,o as assertRevision,a as assertSha256,u as i18nCommitReferenceKey,c as i18nNamespace,l as i18nObjectKey,d as i18nReleaseReferenceKey,p as resolveProjectArtifact};
|
package/dist/i18n/storage.d.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { PrivateObjectStore } from "../private-object-store.js";
|
|
2
|
-
import { I18nSnapshotManifest, I18nSnapshotReference } from "./contracts.js";
|
|
3
|
-
|
|
4
|
-
//#region i18n/storage.d.ts
|
|
5
|
-
declare function sha256(body: Uint8Array | string): string;
|
|
6
|
-
declare function sha256File(path: string): Promise<string>;
|
|
7
|
-
declare function serializeJson(value: unknown): Uint8Array;
|
|
8
|
-
declare function ensureImmutableObject({
|
|
9
|
-
bucket,
|
|
10
|
-
digest,
|
|
11
|
-
projectId,
|
|
12
|
-
source,
|
|
13
|
-
store
|
|
14
|
-
}: {
|
|
15
|
-
bucket: string;
|
|
16
|
-
digest: string;
|
|
17
|
-
projectId: string;
|
|
18
|
-
source: string;
|
|
19
|
-
store: PrivateObjectStore;
|
|
20
|
-
}): Promise<void>;
|
|
21
|
-
declare function ensureImmutableReference({
|
|
22
|
-
bucket,
|
|
23
|
-
key,
|
|
24
|
-
reference,
|
|
25
|
-
store,
|
|
26
|
-
temporaryDirectory
|
|
27
|
-
}: {
|
|
28
|
-
bucket: string;
|
|
29
|
-
key: string;
|
|
30
|
-
reference: I18nSnapshotReference;
|
|
31
|
-
store: PrivateObjectStore;
|
|
32
|
-
temporaryDirectory: string;
|
|
33
|
-
}): Promise<void>;
|
|
34
|
-
declare function publishSnapshotManifest({
|
|
35
|
-
bucket,
|
|
36
|
-
manifest,
|
|
37
|
-
projectId,
|
|
38
|
-
store,
|
|
39
|
-
temporaryDirectory
|
|
40
|
-
}: {
|
|
41
|
-
bucket: string;
|
|
42
|
-
manifest: I18nSnapshotManifest;
|
|
43
|
-
projectId: string;
|
|
44
|
-
store: PrivateObjectStore;
|
|
45
|
-
temporaryDirectory: string;
|
|
46
|
-
}): Promise<string>;
|
|
47
|
-
declare function readSnapshotReference({
|
|
48
|
-
bucket,
|
|
49
|
-
key,
|
|
50
|
-
store,
|
|
51
|
-
temporaryDirectory
|
|
52
|
-
}: {
|
|
53
|
-
bucket: string;
|
|
54
|
-
key: string;
|
|
55
|
-
store: PrivateObjectStore;
|
|
56
|
-
temporaryDirectory: string;
|
|
57
|
-
}): Promise<I18nSnapshotReference | undefined>;
|
|
58
|
-
declare function readCommitReference({
|
|
59
|
-
bucket,
|
|
60
|
-
projectId,
|
|
61
|
-
revision,
|
|
62
|
-
store,
|
|
63
|
-
temporaryDirectory
|
|
64
|
-
}: {
|
|
65
|
-
bucket: string;
|
|
66
|
-
projectId: string;
|
|
67
|
-
revision: string;
|
|
68
|
-
store: PrivateObjectStore;
|
|
69
|
-
temporaryDirectory: string;
|
|
70
|
-
}): Promise<I18nSnapshotReference | undefined>;
|
|
71
|
-
declare function writeSnapshotReferences({
|
|
72
|
-
bucket,
|
|
73
|
-
projectId,
|
|
74
|
-
reference,
|
|
75
|
-
store,
|
|
76
|
-
tag,
|
|
77
|
-
temporaryDirectory
|
|
78
|
-
}: {
|
|
79
|
-
bucket: string;
|
|
80
|
-
projectId: string;
|
|
81
|
-
reference: I18nSnapshotReference;
|
|
82
|
-
store: PrivateObjectStore;
|
|
83
|
-
tag?: string;
|
|
84
|
-
temporaryDirectory: string;
|
|
85
|
-
}): Promise<void>;
|
|
86
|
-
declare function materializeObject({
|
|
87
|
-
bucket,
|
|
88
|
-
cacheRoot,
|
|
89
|
-
digest,
|
|
90
|
-
projectId,
|
|
91
|
-
store,
|
|
92
|
-
target
|
|
93
|
-
}: {
|
|
94
|
-
bucket: string;
|
|
95
|
-
cacheRoot: string;
|
|
96
|
-
digest: string;
|
|
97
|
-
projectId: string;
|
|
98
|
-
store: PrivateObjectStore;
|
|
99
|
-
target: string;
|
|
100
|
-
}): Promise<void>;
|
|
101
|
-
declare function readSnapshotManifest({
|
|
102
|
-
bucket,
|
|
103
|
-
cacheRoot,
|
|
104
|
-
digest,
|
|
105
|
-
projectId,
|
|
106
|
-
store,
|
|
107
|
-
temporaryDirectory
|
|
108
|
-
}: {
|
|
109
|
-
bucket: string;
|
|
110
|
-
cacheRoot: string;
|
|
111
|
-
digest: string;
|
|
112
|
-
projectId: string;
|
|
113
|
-
store: PrivateObjectStore;
|
|
114
|
-
temporaryDirectory: string;
|
|
115
|
-
}): Promise<I18nSnapshotManifest>;
|
|
116
|
-
//#endregion
|
|
117
|
-
export { ensureImmutableObject, ensureImmutableReference, materializeObject, publishSnapshotManifest, readCommitReference, readSnapshotManifest, readSnapshotReference, serializeJson, sha256, sha256File, writeSnapshotReferences };
|
package/dist/i18n/storage.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{assertRevision as e,assertSha256 as t,i18nCommitReferenceKey as n,i18nObjectKey as r,i18nReleaseReferenceKey as i}from"./paths.js";import{createHash as a,randomUUID as o}from"node:crypto";import{copyFile as s,mkdir as c,readFile as l,rename as u,rm as d,stat as f,writeFile as p}from"node:fs/promises";import{dirname as m,join as h,resolve as g}from"node:path";function _(e){return a(`sha256`).update(e).digest(`hex`)}async function v(e){return _(await l(e))}function y(e){return Buffer.from(`${JSON.stringify(e,null,2)}\n`)}async function b({bucket:e,digest:n,projectId:i,source:a,store:s}){if(t(n),await v(a)!==n)throw Error(`I18n object source does not match declared SHA-256 digest ${n}.`);let c=r(i,n);await s.has(e,c)||await s.upload(e,c,a,`application/octet-stream`);let l=`${a}.${process.pid}.${o()}.verify`;try{if(await s.download(e,c,l),await v(l)!==n)throw Error(`Existing immutable i18n object ${c} failed integrity verification.`)}finally{await d(l,{force:!0})}}async function x({bucket:e,key:t,reference:n,store:r,temporaryDirectory:i}){let a=y(n),s=h(i,`reference-${o()}.json`);if(await r.has(e,t))try{if(await r.download(e,t,s),!(await l(s)).equals(a))throw Error(`Immutable i18n reference ${t} already resolves to different snapshot data.`);return}finally{await d(s,{force:!0})}await p(s,a,{flag:`wx`});try{await r.upload(e,t,s,`application/json`)}finally{await d(s,{force:!0})}let c=h(i,`reference-${o()}.verify.json`);try{if(await r.download(e,t,c),!(await l(c)).equals(a))throw Error(`Uploaded immutable i18n reference ${t} failed verification.`)}finally{await d(c,{force:!0})}}async function S({bucket:e,manifest:t,projectId:n,store:r,temporaryDirectory:i}){let a=y(t),o=_(a),s=h(i,`manifest-${o}.json`);await p(s,a,{flag:`wx`});try{await b({bucket:e,digest:o,projectId:n,source:s,store:r})}finally{await d(s,{force:!0})}return o}async function C({bucket:n,key:r,store:i,temporaryDirectory:a}){if(!await i.has(n,r))return;let s=h(a,`reference-${o()}.json`);try{await i.download(n,r,s);let a=JSON.parse(await l(s,`utf8`));if(a.version!==1||typeof a.revision!=`string`||typeof a.snapshot!=`string`)throw Error(`Invalid i18n reference at ${r}.`);return e(a.revision),t(a.snapshot),a}finally{await d(s,{force:!0})}}async function w({bucket:e,projectId:t,revision:r,store:i,temporaryDirectory:a}){let o=await C({bucket:e,key:n(t,r),store:i,temporaryDirectory:a});if(o&&o.revision!==r)throw Error(`I18n commit reference does not match requested revision ${r}.`);return o}async function T({bucket:e,projectId:t,reference:r,store:a,tag:o,temporaryDirectory:s}){await x({bucket:e,key:n(t,r.revision),reference:r,store:a,temporaryDirectory:s}),o&&await x({bucket:e,key:i(t,o),reference:r,store:a,temporaryDirectory:s})}async function E({bucket:e,cacheRoot:n,digest:i,projectId:a,store:l,target:f}){t(i);let p=h(g(n),`v1`,`sha256`,i.slice(0,2),i);if(await O(p,i)===!1){await c(m(p),{recursive:!0});let t=`${p}.${process.pid}.${o()}.tmp`;try{if(await l.download(e,r(a,i),t),await v(t)!==i)throw Error(`Downloaded i18n object failed SHA-256 verification: ${i}.`);await d(p,{force:!0}),await u(t,p)}finally{await d(t,{force:!0})}}await c(m(f),{recursive:!0});let _=`${f}.${process.pid}.${o()}.tmp`;try{if(await s(p,_),await v(_)!==i)throw Error(`Cached i18n object failed SHA-256 verification: ${i}.`);await d(f,{force:!0}),await u(_,f)}finally{await d(_,{force:!0})}}async function D({bucket:n,cacheRoot:r,digest:i,projectId:a,store:o,temporaryDirectory:s}){let c=h(s,`manifest-${i}.json`);await E({bucket:n,cacheRoot:r,digest:i,projectId:a,store:o,target:c});let u=JSON.parse(await l(c,`utf8`));if(u.version!==1||u.projectId!==a||typeof u.revision!=`string`||!Array.isArray(u.files)||!Array.isArray(u.catalogs)||u.catalogs.some(e=>typeof e!=`string`)||!Array.isArray(u.locales)||u.locales.some(e=>typeof e!=`string`)||typeof u.sourceLocale!=`string`||typeof u.generator!=`string`||typeof u.linguiVersion!=`string`)throw Error(`Invalid i18n snapshot manifest ${i}.`);e(u.revision),u.baseline!==void 0&&t(u.baseline);for(let e of u.files){if(!e||typeof e!=`object`||typeof e.path!=`string`||typeof e.digest!=`string`||typeof e.size!=`number`)throw Error(`Invalid file entry in i18n snapshot manifest ${i}.`);t(e.digest)}return u}async function O(e,t){try{return(await f(e)).isFile()&&await v(e)===t}catch{return!1}}export{b as ensureImmutableObject,x as ensureImmutableReference,E as materializeObject,S as publishSnapshotManifest,w as readCommitReference,D as readSnapshotManifest,C as readSnapshotReference,y as serializeJson,_ as sha256,v as sha256File,T as writeSnapshotReferences};
|
package/dist/i18n/workflows.d.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { CoreframeConfig, I18nConfig } from "../config.js";
|
|
2
|
-
import { PrivateObjectStore } from "../private-object-store.js";
|
|
3
|
-
import { ResolvedI18nConfig } from "./catalogs.js";
|
|
4
|
-
|
|
5
|
-
//#region i18n/workflows.d.ts
|
|
6
|
-
type WorkflowOptions = {
|
|
7
|
-
cwd?: string;
|
|
8
|
-
env?: NodeJS.ProcessEnv;
|
|
9
|
-
store?: PrivateObjectStore;
|
|
10
|
-
};
|
|
11
|
-
declare function buildI18n({
|
|
12
|
-
cwd,
|
|
13
|
-
env
|
|
14
|
-
}?: Pick<WorkflowOptions, "cwd" | "env">): Promise<void>;
|
|
15
|
-
declare function ensureDevI18nCatalogs({
|
|
16
|
-
cwd,
|
|
17
|
-
projectConfig
|
|
18
|
-
}?: {
|
|
19
|
-
cwd?: string;
|
|
20
|
-
projectConfig?: CoreframeConfig;
|
|
21
|
-
}): Promise<void>;
|
|
22
|
-
declare function prepareI18nRelease({
|
|
23
|
-
cwd,
|
|
24
|
-
env,
|
|
25
|
-
store,
|
|
26
|
-
tag
|
|
27
|
-
}: WorkflowOptions & {
|
|
28
|
-
tag: string;
|
|
29
|
-
}): Promise<{
|
|
30
|
-
reused: boolean;
|
|
31
|
-
snapshot: string;
|
|
32
|
-
}>;
|
|
33
|
-
declare function materializeI18nSnapshot({
|
|
34
|
-
cwd,
|
|
35
|
-
env,
|
|
36
|
-
revision,
|
|
37
|
-
store
|
|
38
|
-
}?: WorkflowOptions & {
|
|
39
|
-
revision?: string;
|
|
40
|
-
}): Promise<{
|
|
41
|
-
revision: string;
|
|
42
|
-
snapshot: string;
|
|
43
|
-
} | undefined>;
|
|
44
|
-
declare function resolveI18nConfig(config: I18nConfig): ResolvedI18nConfig;
|
|
45
|
-
//#endregion
|
|
46
|
-
export { buildI18n, ensureDevI18nCatalogs, materializeI18nSnapshot, prepareI18nRelease, resolveI18nConfig };
|
package/dist/i18n/workflows.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{readProjectConfig as e}from"../config.js";import{createB2PrivateObjectStore as t}from"../private-object-store.js";import{importProjectDependency as n}from"../project.js";import{assertI18nSegment as r,assertReleaseTag as i,assertRevision as a,resolveProjectArtifact as o}from"./paths.js";import{applyGeneratedTranslations as s,assertCompleteCatalogs as c,catalogRelativePath as l,collectMissingTranslations as u,generateMissingTranslations as d,runLinguiExtract as f,validateLinguiCompile as p,writeRichCatalog as m}from"./catalogs.js";import{ensureImmutableObject as h,materializeObject as g,publishSnapshotManifest as _,readCommitReference as v,readSnapshotManifest as y,sha256File as b,writeSnapshotReferences as x}from"./storage.js";import{access as S,mkdir as C,mkdtemp as w,rename as T,rm as E,stat as D}from"node:fs/promises";import{dirname as O,join as k,resolve as A}from"node:path";import j from"nano-spawn";import{tmpdir as M}from"node:os";async function N({cwd:t=process.cwd(),env:n=process.env}={}){if((await e({cwd:t})).i18n){if(n.COREFRAME_I18N_RELEASE_REVISION){await I({cwd:t,env:n,revision:n.COREFRAME_I18N_RELEASE_REVISION});return}await f(t)}}async function P({cwd:t=process.cwd(),projectConfig:n}={}){let r=n??await e({cwd:t});if(!r.i18n)return;let i=L(r.i18n),a=o(t,i.directory);try{if(!(await D(a)).isDirectory())throw Error(`I18n catalog path is not a directory: ${a}.`)}catch(e){if(e.code!==`ENOENT`)throw e;await f(t);return}for(let e of i.locales)for(let n of i.catalogs)try{if(!(await D(o(t,l(i,e,n)))).isFile())throw Error(`I18n catalog path is not a file: ${e}/${n}.json.`)}catch(e){if(e.code!==`ENOENT`)throw e;await f(t);return}}async function F({cwd:e=process.cwd(),env:t=process.env,store:n,tag:r}){i(r);let a=await R({cwd:e,env:t,store:n});await K(e);let o=await G(e);await q(e,r,o);let l=await w(k(M(),`coreframe-i18n-prepare-`));try{let n=await v({bucket:a.assets.sourceBucket,projectId:a.assets.projectId,revision:o,store:a.store,temporaryDirectory:l});if(n){let e=await y({bucket:a.assets.sourceBucket,cacheRoot:a.cacheRoot,digest:n.snapshot,projectId:a.assets.projectId,store:a.store,temporaryDirectory:l});return W(a,e,o),await B(a,e),await x({bucket:a.assets.sourceBucket,projectId:a.assets.projectId,reference:n,store:a.store,tag:r,temporaryDirectory:l}),{reused:!0,snapshot:n.snapshot}}return await U(a,l,async()=>{let n=await z(a,o,l);n||await H(a),await f(e);let i=await u({config:a.config,cwd:e}),m=await d({config:a.config,cwd:e,env:t,messages:i});await s({config:a.config,cwd:e,missing:i,response:m}),await c({config:a.config,cwd:e}),await p({config:a.config,cwd:e,strict:!0,temporaryDirectory:l});let h=await V(a),g={...n?{baseline:n}:{},catalogs:a.config.catalogs,files:h,generator:i.length>0?a.config.generator?.id??`unconfigured`:`none`,linguiVersion:await J(e),locales:a.config.locales,projectId:a.assets.projectId,revision:o,sourceLocale:a.config.sourceLocale,version:1},v=await _({bucket:a.assets.sourceBucket,manifest:g,projectId:a.assets.projectId,store:a.store,temporaryDirectory:l});return await x({bucket:a.assets.sourceBucket,projectId:a.assets.projectId,reference:{revision:o,snapshot:v,version:1},store:a.store,tag:r,temporaryDirectory:l}),{reused:!1,snapshot:v}})}finally{await E(l,{force:!0,recursive:!0})}}async function I({cwd:t=process.cwd(),env:n=process.env,revision:r,store:i}={}){let o=await e({cwd:t});if(!o.i18n)return;let s=await R({cwd:t,env:n,store:i,projectConfig:o}),c=a(r??await G(t)),l=await w(k(M(),`coreframe-i18n-materialize-`));try{let e=await v({bucket:s.assets.sourceBucket,projectId:s.assets.projectId,revision:c,store:s.store,temporaryDirectory:l});if(!e)throw Error(`No prepared i18n snapshot exists for commit ${c}. Push a v* tag for this commit and wait for the translation gate.`);let t=await y({bucket:s.assets.sourceBucket,cacheRoot:s.cacheRoot,digest:e.snapshot,projectId:s.assets.projectId,store:s.store,temporaryDirectory:l});return W(s,t,c),await B(s,t),{revision:c,snapshot:e.snapshot}}finally{await E(l,{force:!0,recursive:!0})}}function L(e){let t=r(e.sourceLocale,`Source locale`),n=[...new Set(e.locales.map(e=>r(e,`Locale`)))],i=[...new Set(e.catalogs.map(e=>r(e,`Catalog`)))];if(n.length===0||!n.includes(t))throw Error(`I18n locales must include the source locale.`);if(i.length===0)throw Error(`I18n configuration requires at least one catalog.`);if(e.generator&&(!e.generator.command.trim()||!e.generator.id.trim()))throw Error(`I18n generator command and ID must be non-empty.`);return{catalogs:i,directory:e.directory??`locales`,generator:e.generator,locales:n,sourceLocale:t}}async function R({cwd:n=process.cwd(),env:r=process.env,projectConfig:i,store:a}){let o=i??await e({cwd:n});if(!o.i18n)throw Error(`Missing i18n configuration in coreframe.config.ts.`);if(!o.assets)throw Error(`I18n snapshots require the existing private build bucket configured under assets.`);let s=o.assets;return{assets:s,cacheRoot:A(n,`.coreframe`,`i18n`,`cache`),config:L(o.i18n),cwd:A(n),env:r,store:a??t({config:s,env:r})}}async function z(e,t,n){let{stdout:r}=await j(`git`,[`rev-list`,`--first-parent`,`--skip=1`,t],{cwd:e.cwd,stdin:`ignore`});for(let t of r.split(/\r?\n/).filter(Boolean)){let r=await v({bucket:e.assets.sourceBucket,projectId:e.assets.projectId,revision:a(t),store:e.store,temporaryDirectory:n});if(!r)continue;let i=await y({bucket:e.assets.sourceBucket,cacheRoot:e.cacheRoot,digest:r.snapshot,projectId:e.assets.projectId,store:e.store,temporaryDirectory:n});return W(e,i,t),await B(e,i),r.snapshot}}async function B(e,t){for(let n of t.files)if(await g({bucket:e.assets.sourceBucket,cacheRoot:e.cacheRoot,digest:n.digest,projectId:e.assets.projectId,store:e.store,target:o(e.cwd,n.path)}),(await D(o(e.cwd,n.path))).size!==n.size)throw Error(`Materialized i18n artifact size does not match manifest: ${n.path}.`)}async function V(e){let t=[];for(let n of e.config.locales)for(let r of e.config.catalogs){let i=l(e.config,n,r),a=o(e.cwd,i),s=await b(a);await h({bucket:e.assets.sourceBucket,digest:s,projectId:e.assets.projectId,source:a,store:e.store}),t.push({digest:s,path:i,size:(await D(a)).size})}return t.sort((e,t)=>e.path.localeCompare(t.path))}async function H(e){let{stdout:t}=await j(`git`,[`rev-parse`,`--show-prefix`],{cwd:e.cwd,stdin:`ignore`}),r=t.trim(),{stdout:i}=await j(`git`,[`log`,`-1`,`--format=%H`,`--diff-filter=AM`,`--`,`:(top)${`${r}${e.config.directory}/${e.config.sourceLocale}/${e.config.catalogs[0]}.po`}`],{cwd:e.cwd,stdin:`ignore`}),a=i.trim();if(!a)return!1;let s=(await n(`@lingui/format-po`,e.cwd)).formatter({lineNumbers:!1}),c=!1;for(let t of e.config.locales)for(let n of e.config.catalogs){let i=`${r}${`${e.config.directory}/${t}/${n}.po`}`;try{let{stdout:r}=await j(`git`,[`show`,`${a}:${i}`],{cwd:e.cwd,stdin:`ignore`});await m(o(e.cwd,l(e.config,t,n)),s.parse(r)),c=!0}catch{}}return c}async function U(e,t,n){let r=[];for(let n of e.config.locales)for(let i of e.config.catalogs){let a=l(e.config,n,i),s=o(e.cwd,a);try{await S(s)}catch{continue}let c=k(t,`previous-catalogs`,a);await C(O(c),{recursive:!0}),await T(s,c),r.push({backup:c,path:s})}try{let e=await n();return await E(k(t,`previous-catalogs`),{force:!0,recursive:!0}),e}catch(t){for(let t of e.config.locales)for(let n of e.config.catalogs)await E(o(e.cwd,l(e.config,t,n)),{force:!0});for(let{backup:e,path:t}of r)await C(O(t),{recursive:!0}),await T(e,t);throw t}}function W(e,t,n){if(t.revision!==n||t.projectId!==e.assets.projectId||t.sourceLocale!==e.config.sourceLocale||JSON.stringify(t.locales)!==JSON.stringify(e.config.locales)||JSON.stringify(t.catalogs)!==JSON.stringify(e.config.catalogs))throw Error(`I18n snapshot does not match commit or project configuration.`);let r=e.config.locales.flatMap(t=>e.config.catalogs.map(n=>l(e.config,t,n))),i=t.files.map(e=>e.path);if(new Set(i).size!==i.length||JSON.stringify(i.sort())!==JSON.stringify(r.sort()))throw Error(`I18n snapshot has an incomplete or unexpected artifact set.`)}async function G(e){let{stdout:t}=await j(`git`,[`rev-parse`,`HEAD`],{cwd:e,stdin:`ignore`});return a(t.trim())}async function K(e){let{stdout:t}=await j(`git`,[`status`,`--porcelain`],{cwd:e,stdin:`ignore`});if(t.trim())throw Error(`Tagged i18n preparation requires a clean Git tree.`)}async function q(e,t,n){let{stdout:r}=await j(`git`,[`rev-parse`,`${t}^{commit}`],{cwd:e,stdin:`ignore`});if(r.trim()!==n)throw Error(`Release tag ${t} does not point to checked-out commit ${n}.`)}async function J(e){let{stdout:t}=await j(`pnpm`,[`exec`,`lingui`,`--version`],{cwd:e,stdin:`ignore`});return t.trim()}export{N as buildI18n,P as ensureDevI18nCatalogs,I as materializeI18nSnapshot,F as prepareI18nRelease,L as resolveI18nConfig};
|