Setting the file. One moment. Multilingual Setup · Rp Execute Setup · wix/skills · Skills Docsscripts/multilingual-setup.js
scripts/multilingual-setup.js
JavaScript·76 lines·3 KB
const
target
=
require
(
'../../rp-target-wix/lib/multilingual-target.js'
);
9const { loadAdapter } = require('../../rp-target-wix/scripts/multilingual-execute.js');
10
11async function readJson(file) { return JSON.parse(await fs.readFile(file, 'utf8')); }
12
13async function run(projectDir, { adapterModule, proofFile }) {
14 const [topology, proof] = await Promise.all([
15 readJson(path.join(projectDir, 'discovery/public-source-languages.json')),
16 readJson(proofFile),
17 ]);
18 const adapter = await loadAdapter(adapterModule, projectDir);
19 const current = await adapter.readLocaleState();
20 await core.writeJsonAtomic(path.join(projectDir, 'state/multilingual-public/locale-visibility-before.json'), {
21 schemaVersion: 1,
22 locales: (current.locales || []).map((row) => ({ locale: row.locale, visibility: row.visibility })),
23 digest: core.digest((current.locales || []).map((row) => ({ locale: row.locale, visibility: row.visibility }))),
24 });
25 const decisions = core.readNdjson(path.join(projectDir, 'state/multilingual-public/decisions.ndjson'));
26 const siteId = siteRegional.destinationSiteId(projectDir);
27 const siteOrigin = siteRegional.siteOriginFor(projectDir, siteId);
28 let result;
29 try {
30 result = await target.executeSetup({
31 adapter,
32 proof,
33 current,
34 additionalLocales: (topology.additionalLocales || []).filter((row) => row.state === 'reachable').map((row) => row.locale),
35 siteOrigin,
36 decisions,
37 });
38 } catch (error) {
39 await core.writeJsonAtomic(path.join(projectDir, 'state/multilingual-public/setup.json'), {
40 schemaVersion: 1,
41 status: 'failed',
42 siteOrigin,
43 beforeDigest: core.digest(current),
44 requests: error.requests || [],
45 failure: { code: error.code || 'LANG_TARGET_PLAN_BLOCKED', route: error.route || null, rowId: 'setup' },
46 });
47 throw error;
48 }
49 await core.writeJsonAtomic(path.join(projectDir, 'state/multilingual-public/setup.json'), {
50 schemaVersion: 1,
51 status: result.status,
52 siteOrigin,
53 proposal: result.proposal,
54 proposalDigest: result.proposalDigest,
55 action: result.action,
56 beforeDigest: core.digest(current),
57 afterDigest: core.digest(result.after),
58 requests: result.requests,
59 });
60 return result;
61}
62
63async function main() {
64 const projectDir = process.argv[2] && path.resolve(process.argv[2]);
65 const adapterIndex = process.argv.indexOf('--adapter');
66 const proofIndex = process.argv.indexOf('--proof');
67 if (!projectDir || adapterIndex < 0 || proofIndex < 0) {
68 throw new Error('Usage: multilingual-setup.js <projectDir> --adapter <module.js> --proof <contract-evidence.json>');
69 }
70 const result = await run(projectDir, { adapterModule: process.argv[adapterIndex + 1], proofFile: path.resolve(process.argv[proofIndex + 1]) });
71 process.stdout.write(`${JSON.stringify({ status: result.status, requests: result.requests.length })}\n`);
72 if (result.status === 'confirmation-required') process.exitCode = 2;
73}
74
75if (require.main === module) main().catch((error) => { console.error(error.message); process.exitCode = 1; });
76module.exports = { run };