everything-dev 1.17.0 → 1.20.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/cli/init.cjs +165 -84
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts +14 -2
- package/dist/cli/init.d.cts.map +1 -1
- package/dist/cli/init.d.mts +14 -2
- package/dist/cli/init.d.mts.map +1 -1
- package/dist/cli/init.mjs +164 -85
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/prompts.cjs +12 -14
- package/dist/cli/prompts.cjs.map +1 -1
- package/dist/cli/prompts.mjs +12 -14
- package/dist/cli/prompts.mjs.map +1 -1
- package/dist/cli/timing.cjs +21 -1
- package/dist/cli/timing.cjs.map +1 -1
- package/dist/cli/timing.mjs +21 -1
- package/dist/cli/timing.mjs.map +1 -1
- package/dist/cli/upgrade.cjs +114 -49
- package/dist/cli/upgrade.cjs.map +1 -1
- package/dist/cli/upgrade.mjs +114 -49
- package/dist/cli/upgrade.mjs.map +1 -1
- package/dist/contract.cjs +1 -4
- package/dist/contract.cjs.map +1 -1
- package/dist/contract.d.cts +4 -10
- package/dist/contract.d.cts.map +1 -1
- package/dist/contract.d.mts +4 -10
- package/dist/contract.d.mts.map +1 -1
- package/dist/contract.meta.cjs +5 -5
- package/dist/contract.meta.cjs.map +1 -1
- package/dist/contract.meta.d.cts +9 -9
- package/dist/contract.meta.d.mts +9 -9
- package/dist/contract.meta.mjs +5 -5
- package/dist/contract.meta.mjs.map +1 -1
- package/dist/contract.mjs +1 -4
- package/dist/contract.mjs.map +1 -1
- package/dist/plugin.cjs +83 -119
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +3 -6
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +3 -6
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +84 -120
- package/dist/plugin.mjs.map +1 -1
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/package.json +5 -5
- package/src/cli/init.ts +224 -162
- package/src/cli/prompts.ts +17 -22
- package/src/cli/timing.ts +27 -0
- package/src/cli/upgrade.ts +173 -56
- package/src/contract.meta.ts +6 -8
- package/src/contract.ts +1 -4
- package/src/plugin.ts +189 -209
package/dist/plugin.cjs
CHANGED
|
@@ -409,58 +409,20 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
409
409
|
const integrity = publishedUrl ? await require_integrity.computeSriHashForUrl(publishedUrl) : null;
|
|
410
410
|
const version = manifest?.plugin.version ?? pkgJson.version;
|
|
411
411
|
if (publishedUrl) {
|
|
412
|
-
const
|
|
413
|
-
|
|
414
|
-
const
|
|
415
|
-
if (!
|
|
416
|
-
const plugins =
|
|
412
|
+
const rootConfigPath = (0, node_path.join)(deps.configDir, "bos.config.json");
|
|
413
|
+
try {
|
|
414
|
+
const rootConfig = JSON.parse((0, node_fs.readFileSync)(rootConfigPath, "utf-8"));
|
|
415
|
+
if (!rootConfig.plugins || typeof rootConfig.plugins !== "object") rootConfig.plugins = {};
|
|
416
|
+
const plugins = rootConfig.plugins;
|
|
417
417
|
if (!plugins[input.key] || typeof plugins[input.key] !== "object") plugins[input.key] = {};
|
|
418
418
|
const entry = plugins[input.key];
|
|
419
419
|
entry.production = publishedUrl;
|
|
420
420
|
if (integrity) entry.integrity = integrity;
|
|
421
421
|
else delete entry.integrity;
|
|
422
|
-
(0, node_fs.writeFileSync)(
|
|
423
|
-
console.log(` ✅ Updated
|
|
422
|
+
(0, node_fs.writeFileSync)(rootConfigPath, `${JSON.stringify(rootConfig, null, 2)}\n`);
|
|
423
|
+
console.log(` ✅ Updated bos.config.json: plugins.${input.key}.production`);
|
|
424
424
|
} catch (err) {
|
|
425
|
-
console.error(` ❌ Failed to update
|
|
426
|
-
}
|
|
427
|
-
const account = deps.bosConfig.account;
|
|
428
|
-
const network = require_network.getNetworkIdForAccount(account);
|
|
429
|
-
let pluginDomain;
|
|
430
|
-
if ((0, node_fs.existsSync)(pluginConfigPath)) try {
|
|
431
|
-
const pluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
|
|
432
|
-
if (typeof pluginConfig.domain === "string") pluginDomain = pluginConfig.domain;
|
|
433
|
-
} catch {}
|
|
434
|
-
if (!pluginDomain) pluginDomain = `${input.key}.${deps.bosConfig.domain ?? "everything.dev"}`;
|
|
435
|
-
try {
|
|
436
|
-
const registryEntries = {};
|
|
437
|
-
if ((0, node_fs.existsSync)(pluginConfigPath)) try {
|
|
438
|
-
const publishedPluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
|
|
439
|
-
delete publishedPluginConfig.development;
|
|
440
|
-
registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] = JSON.stringify(publishedPluginConfig);
|
|
441
|
-
} catch {}
|
|
442
|
-
if (Object.keys(registryEntries).length > 0) {
|
|
443
|
-
const payload = JSON.stringify(registryEntries);
|
|
444
|
-
const argsBase64 = Buffer.from(payload).toString("base64");
|
|
445
|
-
const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
|
|
446
|
-
await effect.Effect.runPromise(require_near_cli.ensureNearCli);
|
|
447
|
-
try {
|
|
448
|
-
await effect.Effect.runPromise(require_near_cli.executeTransaction({
|
|
449
|
-
account,
|
|
450
|
-
contract: require_fastkv.getRegistryNamespaceForNetwork(network),
|
|
451
|
-
method: "__fastdata_kv",
|
|
452
|
-
argsBase64,
|
|
453
|
-
network,
|
|
454
|
-
privateKey,
|
|
455
|
-
gas: "50Tgas",
|
|
456
|
-
deposit: "0NEAR"
|
|
457
|
-
}));
|
|
458
|
-
} catch (registryError) {
|
|
459
|
-
if (!extractTransactionHash(registryError)) console.warn(`[publish] Plugin registry write failed: ${registryError instanceof Error ? registryError.message : registryError}`);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
} catch (registryError) {
|
|
463
|
-
console.warn(`[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`);
|
|
425
|
+
console.error(` ❌ Failed to update bos.config.json:`, err instanceof Error ? err.message : err);
|
|
464
426
|
}
|
|
465
427
|
await generateCodeArtifacts(deps.configDir, deps.bosConfig);
|
|
466
428
|
}
|
|
@@ -728,18 +690,6 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
728
690
|
}
|
|
729
691
|
}
|
|
730
692
|
const registryEntries = { [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig) };
|
|
731
|
-
for (const [pluginKey, pluginEntry] of Object.entries(publishConfig.plugins ?? {})) {
|
|
732
|
-
const pluginRef = getPluginRef(pluginEntry);
|
|
733
|
-
if (!pluginRef?.development?.startsWith("local:")) continue;
|
|
734
|
-
const pluginConfigPath = (0, node_path.join)((0, node_path.join)(deps.configDir, pluginRef.development.slice(6)), "bos.config.json");
|
|
735
|
-
if (!(0, node_fs.existsSync)(pluginConfigPath)) continue;
|
|
736
|
-
try {
|
|
737
|
-
const pluginConfig = JSON.parse((0, node_fs.readFileSync)(pluginConfigPath, "utf-8"));
|
|
738
|
-
const pluginDomain = typeof pluginConfig.domain === "string" ? pluginConfig.domain : `${pluginKey}.${gateway}`;
|
|
739
|
-
delete pluginConfig.development;
|
|
740
|
-
registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] = JSON.stringify(pluginConfig);
|
|
741
|
-
} catch {}
|
|
742
|
-
}
|
|
743
693
|
const payload = JSON.stringify(registryEntries);
|
|
744
694
|
const argsBase64 = Buffer.from(payload).toString("base64");
|
|
745
695
|
const privateKey = input.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;
|
|
@@ -829,33 +779,34 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
829
779
|
init: builder.init.handler(async ({ input }) => {
|
|
830
780
|
try {
|
|
831
781
|
const timings = [];
|
|
832
|
-
let extendsAccount =
|
|
833
|
-
let extendsGateway =
|
|
782
|
+
let extendsAccount = "";
|
|
783
|
+
let extendsGateway = "";
|
|
834
784
|
let directory = input.directory;
|
|
835
785
|
let account = input.account;
|
|
836
786
|
let domain = input.domain;
|
|
837
787
|
let withHost = input.withHost;
|
|
838
788
|
let plugins = input.plugins;
|
|
839
789
|
if (input.extends) {
|
|
840
|
-
const match = input.extends.match(/^
|
|
790
|
+
const match = (input.extends.startsWith("bos://") ? input.extends : `bos://${input.extends}`).match(/^bos:\/\/([^/]+)\/(.+)$/);
|
|
841
791
|
if (match) {
|
|
842
|
-
|
|
843
|
-
|
|
792
|
+
extendsAccount = match[1];
|
|
793
|
+
extendsGateway = match[2];
|
|
844
794
|
}
|
|
845
795
|
}
|
|
846
796
|
extendsAccount = extendsAccount || "dev.everything.near";
|
|
847
797
|
extendsGateway = extendsGateway || "everything.dev";
|
|
798
|
+
const s = _clack_prompts.spinner();
|
|
799
|
+
s.start("Initializing project");
|
|
848
800
|
let parentPluginKeys = [];
|
|
849
801
|
let parentConfig = null;
|
|
850
802
|
try {
|
|
851
|
-
parentConfig = await require_timing.timePhase(timings, "parent config", () => require_cli_init.fetchParentConfig(extendsAccount, extendsGateway));
|
|
803
|
+
parentConfig = await require_timing.timePhase(timings, "parent config", () => require_cli_init.fetchParentConfig(extendsAccount, extendsGateway), s);
|
|
852
804
|
if (parentConfig?.plugins && typeof parentConfig.plugins === "object") parentPluginKeys = Object.keys(parentConfig.plugins);
|
|
853
805
|
} catch {}
|
|
854
806
|
if (!input.noInteractive) {
|
|
807
|
+
s.stop("Config fetched");
|
|
855
808
|
const prompted = await require_prompts.promptInitOptions({
|
|
856
|
-
extendsAccount
|
|
857
|
-
extendsGateway,
|
|
858
|
-
extends: input.extends,
|
|
809
|
+
extends: `bos://${extendsAccount}/${extendsGateway}`,
|
|
859
810
|
directory,
|
|
860
811
|
account,
|
|
861
812
|
domain,
|
|
@@ -870,85 +821,99 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
870
821
|
domain = prompted.domain;
|
|
871
822
|
withHost = prompted.withHost;
|
|
872
823
|
plugins = prompted.plugins;
|
|
824
|
+
s.start("Setting up project");
|
|
873
825
|
}
|
|
874
826
|
directory = directory || domain || extendsGateway;
|
|
875
827
|
const targetDir = (0, node_path.resolve)(directory);
|
|
876
828
|
plugins = plugins ?? [];
|
|
829
|
+
const extendsRef = `bos://${extendsAccount}/${extendsGateway}`;
|
|
877
830
|
if (!parentConfig) try {
|
|
878
|
-
parentConfig = await require_timing.timePhase(timings, "parent config", () => require_cli_init.fetchParentConfig(extendsAccount, extendsGateway));
|
|
831
|
+
parentConfig = await require_timing.timePhase(timings, "parent config", () => require_cli_init.fetchParentConfig(extendsAccount, extendsGateway), s);
|
|
879
832
|
} catch {
|
|
833
|
+
s.stop("Failed");
|
|
880
834
|
return {
|
|
881
835
|
status: "error",
|
|
882
836
|
directory,
|
|
883
|
-
|
|
884
|
-
extendsGateway,
|
|
837
|
+
extendsRef,
|
|
885
838
|
account,
|
|
886
839
|
domain,
|
|
887
|
-
extends:
|
|
840
|
+
extends: extendsRef,
|
|
888
841
|
plugins: plugins ?? [],
|
|
889
842
|
filesCopied: 0,
|
|
890
843
|
timings,
|
|
891
|
-
error: `No config found at
|
|
844
|
+
error: `No config found at ${extendsRef} — are you sure this is the right parent?`
|
|
892
845
|
};
|
|
893
846
|
}
|
|
894
847
|
const { sourceDir, parentConfig: resolvedParentConfig, cleanup } = await require_timing.timePhase(timings, "template source", () => require_cli_init.resolveSourceDir({
|
|
895
848
|
extendsAccount,
|
|
896
849
|
extendsGateway,
|
|
897
850
|
source: input.source
|
|
898
|
-
}));
|
|
851
|
+
}), s);
|
|
899
852
|
parentConfig = resolvedParentConfig;
|
|
853
|
+
const isMinimalScaffold = sourceDir === "";
|
|
900
854
|
try {
|
|
901
|
-
|
|
902
|
-
if (
|
|
903
|
-
status: "error",
|
|
904
|
-
directory,
|
|
905
|
-
extendsAccount,
|
|
906
|
-
extendsGateway,
|
|
907
|
-
account,
|
|
908
|
-
domain,
|
|
909
|
-
extends: `bos://${extendsAccount}/${extendsGateway}`,
|
|
910
|
-
plugins: plugins ?? [],
|
|
911
|
-
filesCopied: 0,
|
|
912
|
-
error: "No .templatekeep found in template source"
|
|
913
|
-
};
|
|
914
|
-
const pluginRoutes = {};
|
|
915
|
-
const parentRuntimePlugins = await require_config.buildRuntimePluginsForConfig(parentConfig, sourceDir, "production");
|
|
916
|
-
for (const [key, plugin] of Object.entries(parentRuntimePlugins ?? {})) if (plugin.routes && plugin.routes.length > 0) pluginRoutes[key] = plugin.routes;
|
|
917
|
-
const s = _clack_prompts.spinner();
|
|
918
|
-
s.start("Setting up project");
|
|
919
|
-
const filesCopied = await require_timing.timePhase(timings, "copy files", () => require_cli_init.copyFilteredFiles(sourceDir, targetDir, patterns, {
|
|
920
|
-
withHost,
|
|
921
|
-
plugins,
|
|
922
|
-
pluginRoutes
|
|
923
|
-
}));
|
|
924
|
-
await require_timing.timePhase(timings, "personalize config", () => require_cli_init.personalizeConfig(targetDir, {
|
|
855
|
+
let filesCopied;
|
|
856
|
+
if (isMinimalScaffold) filesCopied = await require_timing.timePhase(timings, "scaffold project", () => require_cli_init.scaffoldMinimalProject(targetDir, parentConfig, {
|
|
925
857
|
extendsAccount,
|
|
926
858
|
extendsGateway,
|
|
927
859
|
account: account || extendsAccount,
|
|
928
|
-
domain
|
|
860
|
+
domain,
|
|
929
861
|
plugins,
|
|
930
|
-
pluginRoutes,
|
|
931
|
-
workspaceOpts: { sourceDir },
|
|
932
862
|
withHost
|
|
933
|
-
}));
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
863
|
+
}), s);
|
|
864
|
+
else {
|
|
865
|
+
const patterns = await require_cli_init.readTemplatekeep(sourceDir);
|
|
866
|
+
if (patterns.length === 0) {
|
|
867
|
+
s.stop("Failed");
|
|
868
|
+
return {
|
|
869
|
+
status: "error",
|
|
870
|
+
directory,
|
|
871
|
+
extendsRef,
|
|
872
|
+
account,
|
|
873
|
+
domain,
|
|
874
|
+
extends: extendsRef,
|
|
875
|
+
plugins: plugins ?? [],
|
|
876
|
+
filesCopied: 0,
|
|
877
|
+
error: "No .templatekeep found in template source"
|
|
878
|
+
};
|
|
879
|
+
}
|
|
880
|
+
const pluginRoutes = {};
|
|
881
|
+
const parentRuntimePlugins = await require_config.buildRuntimePluginsForConfig(parentConfig, sourceDir, "production");
|
|
882
|
+
for (const [key, plugin] of Object.entries(parentRuntimePlugins ?? {})) if (plugin.routes && plugin.routes.length > 0) pluginRoutes[key] = plugin.routes;
|
|
883
|
+
filesCopied = await require_timing.timePhase(timings, "copy files", () => require_cli_init.copyFilteredFiles(sourceDir, targetDir, patterns, {
|
|
884
|
+
withHost,
|
|
885
|
+
plugins,
|
|
886
|
+
pluginRoutes
|
|
887
|
+
}), s);
|
|
888
|
+
await require_timing.timePhase(timings, "personalize config", () => require_cli_init.personalizeConfig(targetDir, {
|
|
889
|
+
extendsAccount,
|
|
890
|
+
extendsGateway,
|
|
891
|
+
account: account || extendsAccount,
|
|
892
|
+
domain: domain || extendsGateway,
|
|
893
|
+
plugins,
|
|
894
|
+
pluginRoutes,
|
|
895
|
+
workspaceOpts: { sourceDir },
|
|
896
|
+
withHost
|
|
897
|
+
}), s);
|
|
898
|
+
await require_timing.timePhase(timings, "write snapshot", () => require_cli_init.writeInitSnapshot(targetDir, extendsAccount, extendsGateway, sourceDir, patterns, {
|
|
899
|
+
withHost,
|
|
900
|
+
plugins,
|
|
901
|
+
pluginRoutes
|
|
902
|
+
}), s);
|
|
903
|
+
}
|
|
904
|
+
const initConfig = await require_timing.timePhase(timings, "resolve config", () => require_config.loadConfig({ cwd: targetDir }), s);
|
|
940
905
|
if (initConfig?.runtime) await require_timing.timePhase(timings, "generate env/docker", async () => {
|
|
941
906
|
require_infra.writeGeneratedInfra(targetDir, initConfig.runtime);
|
|
942
|
-
});
|
|
907
|
+
}, s);
|
|
943
908
|
await require_timing.timePhase(timings, "create env file", async () => {
|
|
944
909
|
require_infra.ensureEnvFile(targetDir);
|
|
945
|
-
});
|
|
910
|
+
}, s);
|
|
946
911
|
if (!input.noInstall) {
|
|
947
|
-
await require_timing.timePhase(timings, "install dependencies", () => require_cli_init.runBunInstall(targetDir));
|
|
948
|
-
await require_timing.timePhase(timings, "generate types", () => require_cli_init.runTypesGen(targetDir));
|
|
949
|
-
await require_timing.timePhase(timings, "generate migrations", () => require_cli_init.generateDatabaseMigrations(targetDir));
|
|
912
|
+
await require_timing.timePhase(timings, "install dependencies", () => require_cli_init.runBunInstall(targetDir), s);
|
|
913
|
+
await require_timing.timePhase(timings, "generate types", () => require_cli_init.runTypesGen(targetDir), s);
|
|
914
|
+
await require_timing.timePhase(timings, "generate migrations", () => require_cli_init.generateDatabaseMigrations(targetDir), s);
|
|
950
915
|
}
|
|
951
|
-
if (input.noInstall && initConfig?.config) await require_timing.timePhase(timings, "generate code artifacts", () => generateCodeArtifacts(targetDir, initConfig.config));
|
|
916
|
+
if (input.noInstall && initConfig?.config) await require_timing.timePhase(timings, "generate code artifacts", () => generateCodeArtifacts(targetDir, initConfig.config), s);
|
|
952
917
|
s.stop("Project initialized");
|
|
953
918
|
if (!input.noInteractive) {
|
|
954
919
|
if (await _clack_prompts.confirm({
|
|
@@ -969,11 +934,10 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
969
934
|
return {
|
|
970
935
|
status: "initialized",
|
|
971
936
|
directory,
|
|
972
|
-
|
|
973
|
-
extendsGateway,
|
|
937
|
+
extendsRef,
|
|
974
938
|
account,
|
|
975
939
|
domain,
|
|
976
|
-
extends:
|
|
940
|
+
extends: extendsRef,
|
|
977
941
|
plugins,
|
|
978
942
|
filesCopied,
|
|
979
943
|
timings
|
|
@@ -982,14 +946,14 @@ var plugin_default = (0, every_plugin.createPlugin)({
|
|
|
982
946
|
await cleanup();
|
|
983
947
|
}
|
|
984
948
|
} catch (error) {
|
|
949
|
+
const extendsRef = input.extends ? input.extends.startsWith("bos://") ? input.extends : `bos://${input.extends}` : "bos://dev.everything.near/everything.dev";
|
|
985
950
|
return {
|
|
986
951
|
status: "error",
|
|
987
952
|
directory: input.directory ?? "",
|
|
988
|
-
|
|
989
|
-
extendsGateway: input.extendsGateway ?? "",
|
|
953
|
+
extendsRef,
|
|
990
954
|
account: input.account,
|
|
991
955
|
domain: input.domain,
|
|
992
|
-
extends:
|
|
956
|
+
extends: extendsRef,
|
|
993
957
|
plugins: input.plugins ?? [],
|
|
994
958
|
filesCopied: 0,
|
|
995
959
|
timings: [],
|