primitive-admin 1.0.53 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -10
- package/dist/bin/primitive.js +8 -0
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/apps.js +54 -2
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.js +16 -6
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +84 -7
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +3 -3
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collections.js +12 -9
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/databases.js +220 -82
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +77 -0
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +1 -9
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +12 -6
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +161 -0
- package/dist/src/commands/guides.js +502 -84
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/integrations.js +2 -2
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +344 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.js +2 -2
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -0
- package/dist/src/commands/rule-sets.js +25 -3
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +2 -0
- package/dist/src/commands/scripts.js +667 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/settings.d.ts +15 -0
- package/dist/src/commands/settings.js +102 -0
- package/dist/src/commands/settings.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +105 -0
- package/dist/src/commands/sync-app-settings.js +339 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +204 -9
- package/dist/src/commands/sync.js +1706 -371
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +110 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/webhooks.js +17 -3
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +30 -0
- package/dist/src/commands/workflows.js +667 -59
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +122 -18
- package/dist/src/lib/api-client.js +131 -2
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +108 -0
- package/dist/src/lib/app-settings-descriptor.js +250 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +76 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +144 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +16 -0
- package/dist/src/lib/config.js +41 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/constants.d.ts +9 -0
- package/dist/src/lib/constants.js +9 -0
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/csv.d.ts +1 -2
- package/dist/src/lib/csv.js +3 -8
- package/dist/src/lib/csv.js.map +1 -1
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +21 -65
- package/dist/src/lib/db-codegen/dbGenerator.js +117 -321
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/db-codegen/dbNaming.d.ts +37 -0
- package/dist/src/lib/db-codegen/dbNaming.js +70 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +165 -5
- package/dist/src/lib/db-codegen/dbTemplates.js +292 -16
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +7 -3
- package/dist/src/lib/db-codegen/dbTsTypes.js +23 -1
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +101 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +200 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +43 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/init-config.js +2 -2
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/output.d.ts +25 -5
- package/dist/src/lib/output.js +32 -4
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +68 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +380 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +84 -0
- package/dist/src/lib/swift-codegen/generator.js +178 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +225 -0
- package/dist/src/lib/sync-resource-types.js +394 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +10 -19
- package/dist/src/lib/toml-database-config.js +28 -59
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +147 -0
- package/dist/src/lib/toml-metadata-config.js +463 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +34 -0
- package/dist/src/lib/toml-params-validator.js +118 -3
- package/dist/src/lib/toml-params-validator.js.map +1 -1
- package/dist/src/lib/workflow-apply.d.ts +86 -0
- package/dist/src/lib/workflow-apply.js +127 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +87 -0
- package/dist/src/lib/workflow-codegen/generator.js +290 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +85 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +71 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +64 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +282 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-fragments.js +3 -3
- package/dist/src/lib/workflow-fragments.js.map +1 -1
- package/dist/src/lib/workflow-payload.d.ts +68 -0
- package/dist/src/lib/workflow-payload.js +150 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +1 -1
- package/dist/src/lib/workflow-toml-validator.js +37 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +11 -0
- package/dist/src/validators.d.ts +4 -3
- package/dist/src/validators.js +6 -5
- package/dist/src/validators.js.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared write / `--check` / stale-cleanup machinery for the CLI codegen
|
|
3
|
+
* commands (issue #1442, sponsor decision #6).
|
|
4
|
+
*
|
|
5
|
+
* Both `databases codegen` (#814) and `workflows codegen` (#1442) render a set
|
|
6
|
+
* of `*.generated.ts` files and then either write them to disk or, under
|
|
7
|
+
* `--check`, compare the would-be output byte-for-byte against what's on disk.
|
|
8
|
+
* The write/compare/cleanup half is identical between them, so it lives here
|
|
9
|
+
* rather than being cloned into each generator.
|
|
10
|
+
*
|
|
11
|
+
* The RENDERING (schema → TS) stays in each generator — only the on-disk
|
|
12
|
+
* lifecycle is shared: `mkdir`, write, orphan cleanup, and the `--check`
|
|
13
|
+
* missing/differs/stale comparison.
|
|
14
|
+
*/
|
|
15
|
+
import * as path from "path";
|
|
16
|
+
import { promises as fsp } from "fs";
|
|
17
|
+
const DEFAULT_GENERATED_SUFFIX = ".generated.ts";
|
|
18
|
+
/**
|
|
19
|
+
* Write (or `--check`) a set of rendered generated files, handling orphan
|
|
20
|
+
* cleanup / stale detection. Pure lifecycle: the caller renders content, this
|
|
21
|
+
* owns the disk side.
|
|
22
|
+
*/
|
|
23
|
+
export async function writeOrCheckGeneratedFiles(options) {
|
|
24
|
+
const outAbs = path.resolve(options.outputDir);
|
|
25
|
+
const suffix = options.generatedSuffix ?? DEFAULT_GENERATED_SUFFIX;
|
|
26
|
+
if (options.check === true) {
|
|
27
|
+
return await runCheck(outAbs, options.filesToWrite, options.fullOwnership, suffix, options.ownershipBanner);
|
|
28
|
+
}
|
|
29
|
+
await fsp.mkdir(outAbs, { recursive: true });
|
|
30
|
+
const deletedFiles = await cleanupGeneratedOutputs(outAbs, options.filesToWrite, options.fullOwnership, suffix, options.ownershipBanner);
|
|
31
|
+
const writtenFiles = [];
|
|
32
|
+
for (const [filePath, content] of options.filesToWrite) {
|
|
33
|
+
await fsp.writeFile(filePath, content, "utf-8");
|
|
34
|
+
writtenFiles.push(filePath);
|
|
35
|
+
}
|
|
36
|
+
writtenFiles.sort();
|
|
37
|
+
deletedFiles.sort();
|
|
38
|
+
return { writtenFiles, deletedFiles, mismatches: [] };
|
|
39
|
+
}
|
|
40
|
+
async function runCheck(outAbs, filesToWrite, fullOwnership, suffix, ownershipBanner) {
|
|
41
|
+
const mismatches = [];
|
|
42
|
+
for (const [filePath, expected] of filesToWrite) {
|
|
43
|
+
let actual;
|
|
44
|
+
try {
|
|
45
|
+
actual = await fsp.readFile(filePath, "utf-8");
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err && err.code === "ENOENT") {
|
|
49
|
+
actual = null;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (actual === null) {
|
|
56
|
+
mismatches.push({ filePath, reason: "missing" });
|
|
57
|
+
}
|
|
58
|
+
else if (actual !== expected) {
|
|
59
|
+
mismatches.push({ filePath, reason: "differs" });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Stale on-disk generated files the generator wouldn't produce also count as
|
|
63
|
+
// a mismatch (so CI catches dropped types/workflows). Skip when this run only
|
|
64
|
+
// owns a subset: `filesToWrite` is then partial, so sibling files aren't
|
|
65
|
+
// "stale" — they just weren't in scope.
|
|
66
|
+
if (fullOwnership && (await dirExists(outAbs))) {
|
|
67
|
+
const onDisk = await listOwnedGeneratedFiles(outAbs, suffix, ownershipBanner);
|
|
68
|
+
const expectedPaths = new Set(filesToWrite.keys());
|
|
69
|
+
for (const filePath of onDisk) {
|
|
70
|
+
if (!expectedPaths.has(filePath)) {
|
|
71
|
+
mismatches.push({ filePath, reason: "stale" });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
writtenFiles: [...filesToWrite.keys()].sort(),
|
|
77
|
+
deletedFiles: [],
|
|
78
|
+
mismatches,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async function cleanupGeneratedOutputs(outDir, filesToWrite, fullOwnership, suffix, ownershipBanner) {
|
|
82
|
+
// A filtered run only owns a subset; `filesToWrite` does not represent the
|
|
83
|
+
// full set of generated files, so skip orphan cleanup to avoid destroying
|
|
84
|
+
// sibling files. Full cleanup only happens on the unfiltered run.
|
|
85
|
+
if (!fullOwnership)
|
|
86
|
+
return [];
|
|
87
|
+
const onDisk = await listOwnedGeneratedFiles(outDir, suffix, ownershipBanner);
|
|
88
|
+
const expectedPaths = new Set(filesToWrite.keys());
|
|
89
|
+
const deleted = [];
|
|
90
|
+
for (const filePath of onDisk) {
|
|
91
|
+
if (!expectedPaths.has(filePath)) {
|
|
92
|
+
await fsp.unlink(filePath);
|
|
93
|
+
deleted.push(filePath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return deleted;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* List only the generator-owned files in `outDir`, decided by the `suffix`
|
|
100
|
+
* (`.generated.ts`) and, when given, an `ownershipBanner` prefix on the file's
|
|
101
|
+
* content. Hand-written files — and files owned by a DIFFERENT generator that
|
|
102
|
+
* happen to share the suffix — are never touched.
|
|
103
|
+
*/
|
|
104
|
+
async function listOwnedGeneratedFiles(outDir, suffix, ownershipBanner) {
|
|
105
|
+
if (!(await dirExists(outDir)))
|
|
106
|
+
return [];
|
|
107
|
+
const entries = await fsp.readdir(outDir, { withFileTypes: true });
|
|
108
|
+
const owned = [];
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
if (!entry.isFile())
|
|
111
|
+
continue;
|
|
112
|
+
if (!entry.name.endsWith(suffix))
|
|
113
|
+
continue;
|
|
114
|
+
const filePath = path.join(outDir, entry.name);
|
|
115
|
+
if (ownershipBanner) {
|
|
116
|
+
// Content-scoped ownership: only sweep files carrying THIS generator's
|
|
117
|
+
// banner, so a shared output dir keeps each generator's cleanup to its
|
|
118
|
+
// own files. A read failure means "not confidently ours" → skip it.
|
|
119
|
+
let contents;
|
|
120
|
+
try {
|
|
121
|
+
contents = await fsp.readFile(filePath, "utf-8");
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (!contents.startsWith(ownershipBanner))
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
owned.push(filePath);
|
|
130
|
+
}
|
|
131
|
+
return owned;
|
|
132
|
+
}
|
|
133
|
+
async function dirExists(dir) {
|
|
134
|
+
try {
|
|
135
|
+
const stat = await fsp.stat(dir);
|
|
136
|
+
return stat.isDirectory();
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
if (err && err.code === "ENOENT")
|
|
140
|
+
return false;
|
|
141
|
+
throw err;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=generatedFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatedFiles.js","sourceRoot":"","sources":["../../../../src/lib/codegen-shared/generatedFiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared source-directory resolution for the CLI codegen commands
|
|
3
|
+
* (`workflows codegen` #1442 and `databases codegen` #814, issue #1510).
|
|
4
|
+
*
|
|
5
|
+
* Both commands read a set of `*.toml` schemas out of a synced sub-directory
|
|
6
|
+
* (`workflows/` or `database-types/`) and render `*.generated.ts` beside them.
|
|
7
|
+
* Historically each command located that source directory by scanning EVERY
|
|
8
|
+
* `.primitive/sync/<env>/<appId>/<subdir>` slot and either hard-erroring on
|
|
9
|
+
* more than one (`workflows`) or silently merging across environments
|
|
10
|
+
* (`databases`, via a `seenTypes` dedup). Neither did any environment
|
|
11
|
+
* resolution, so `PRIMITIVE_ENV=dev workflows codegen` would happily generate
|
|
12
|
+
* from the `alpha` TOML while `databases codegen` followed a different env —
|
|
13
|
+
* the two generated-type trees could come from different environments in one
|
|
14
|
+
* run.
|
|
15
|
+
*
|
|
16
|
+
* This helper resolves the source directory the same way every other CLI
|
|
17
|
+
* command targets an environment: `--env` → `PRIMITIVE_ENV` →
|
|
18
|
+
* `defaultEnvironment` → single-env → error. `--sync-dir` and `--app` remain
|
|
19
|
+
* explicit overrides. It returns ONLY the resolved source directory; TOML
|
|
20
|
+
* collection, type filtering/dedup, and output-dir defaulting stay in each
|
|
21
|
+
* command.
|
|
22
|
+
*
|
|
23
|
+
* Design notes (binding, from the plan of record for #1510):
|
|
24
|
+
* - Call `getCurrentEnvironment()` DIRECTLY when no `--sync-dir` is given.
|
|
25
|
+
* `resolveSyncDir()`'s internal `safeEnv()` swallows the resolver's
|
|
26
|
+
* ambiguity error and falls back to `./config`, so genuine ambiguity must
|
|
27
|
+
* be surfaced here, not through `resolveSyncDir()`.
|
|
28
|
+
* - Throw plain `Error`s; the calling commands keep their existing
|
|
29
|
+
* `error(); process.exit(1)` convention (they catch at the boundary).
|
|
30
|
+
* - Do NOT use `resolveAppId()` — it is auth-oriented and exits the process,
|
|
31
|
+
* which is wrong for an offline codegen path.
|
|
32
|
+
* - Preserve the `--app`-alone legacy fallback: when `--app` is given, NO
|
|
33
|
+
* environment was explicitly requested, and env resolution fails (or there
|
|
34
|
+
* is no project config / legacy bare-dir mode), scan
|
|
35
|
+
* `.primitive/sync/<env>/<app>/<subdir>` for that specific app, resolving
|
|
36
|
+
* when it appears under exactly one env and erroring (naming the candidate
|
|
37
|
+
* envs) when it appears under more than one. This keeps the existing
|
|
38
|
+
* integration contract
|
|
39
|
+
* (`cli/tests/integration/workflows-codegen.test.ts`) intact.
|
|
40
|
+
* - Do NOT fall through to that scan when an environment WAS explicitly named
|
|
41
|
+
* (`--env` or `PRIMITIVE_ENV`) but is invalid/unknown: surface the
|
|
42
|
+
* resolver's error instead, so an explicit env selection never silently
|
|
43
|
+
* generates code from a different synced environment.
|
|
44
|
+
*/
|
|
45
|
+
export interface ResolveCodegenSourceDirOptions {
|
|
46
|
+
/** `--app <app-id>` override, if the user passed it. */
|
|
47
|
+
app?: string;
|
|
48
|
+
/** `--sync-dir <path>` override, if the user passed it. */
|
|
49
|
+
syncDir?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ResolveCodegenSourceDirArgs {
|
|
52
|
+
/** The synced sub-directory to resolve, e.g. "workflows" or "database-types". */
|
|
53
|
+
subdir: string;
|
|
54
|
+
/** Parsed command options (`--app`, `--sync-dir`). */
|
|
55
|
+
options: ResolveCodegenSourceDirOptions;
|
|
56
|
+
/**
|
|
57
|
+
* Working directory the legacy scan is rooted at. Defaults to
|
|
58
|
+
* `process.cwd()`; parameterised so unit tests can point it at a tmp tree
|
|
59
|
+
* (vitest workers can't `chdir`).
|
|
60
|
+
*/
|
|
61
|
+
cwd?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolves the single source directory a codegen command should read its
|
|
65
|
+
* `*.toml` schemas from. Throws a plain `Error` (with a user-facing message)
|
|
66
|
+
* when the directory can't be resolved unambiguously or doesn't exist.
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveCodegenSourceDir(args: ResolveCodegenSourceDirArgs): string;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared source-directory resolution for the CLI codegen commands
|
|
3
|
+
* (`workflows codegen` #1442 and `databases codegen` #814, issue #1510).
|
|
4
|
+
*
|
|
5
|
+
* Both commands read a set of `*.toml` schemas out of a synced sub-directory
|
|
6
|
+
* (`workflows/` or `database-types/`) and render `*.generated.ts` beside them.
|
|
7
|
+
* Historically each command located that source directory by scanning EVERY
|
|
8
|
+
* `.primitive/sync/<env>/<appId>/<subdir>` slot and either hard-erroring on
|
|
9
|
+
* more than one (`workflows`) or silently merging across environments
|
|
10
|
+
* (`databases`, via a `seenTypes` dedup). Neither did any environment
|
|
11
|
+
* resolution, so `PRIMITIVE_ENV=dev workflows codegen` would happily generate
|
|
12
|
+
* from the `alpha` TOML while `databases codegen` followed a different env —
|
|
13
|
+
* the two generated-type trees could come from different environments in one
|
|
14
|
+
* run.
|
|
15
|
+
*
|
|
16
|
+
* This helper resolves the source directory the same way every other CLI
|
|
17
|
+
* command targets an environment: `--env` → `PRIMITIVE_ENV` →
|
|
18
|
+
* `defaultEnvironment` → single-env → error. `--sync-dir` and `--app` remain
|
|
19
|
+
* explicit overrides. It returns ONLY the resolved source directory; TOML
|
|
20
|
+
* collection, type filtering/dedup, and output-dir defaulting stay in each
|
|
21
|
+
* command.
|
|
22
|
+
*
|
|
23
|
+
* Design notes (binding, from the plan of record for #1510):
|
|
24
|
+
* - Call `getCurrentEnvironment()` DIRECTLY when no `--sync-dir` is given.
|
|
25
|
+
* `resolveSyncDir()`'s internal `safeEnv()` swallows the resolver's
|
|
26
|
+
* ambiguity error and falls back to `./config`, so genuine ambiguity must
|
|
27
|
+
* be surfaced here, not through `resolveSyncDir()`.
|
|
28
|
+
* - Throw plain `Error`s; the calling commands keep their existing
|
|
29
|
+
* `error(); process.exit(1)` convention (they catch at the boundary).
|
|
30
|
+
* - Do NOT use `resolveAppId()` — it is auth-oriented and exits the process,
|
|
31
|
+
* which is wrong for an offline codegen path.
|
|
32
|
+
* - Preserve the `--app`-alone legacy fallback: when `--app` is given, NO
|
|
33
|
+
* environment was explicitly requested, and env resolution fails (or there
|
|
34
|
+
* is no project config / legacy bare-dir mode), scan
|
|
35
|
+
* `.primitive/sync/<env>/<app>/<subdir>` for that specific app, resolving
|
|
36
|
+
* when it appears under exactly one env and erroring (naming the candidate
|
|
37
|
+
* envs) when it appears under more than one. This keeps the existing
|
|
38
|
+
* integration contract
|
|
39
|
+
* (`cli/tests/integration/workflows-codegen.test.ts`) intact.
|
|
40
|
+
* - Do NOT fall through to that scan when an environment WAS explicitly named
|
|
41
|
+
* (`--env` or `PRIMITIVE_ENV`) but is invalid/unknown: surface the
|
|
42
|
+
* resolver's error instead, so an explicit env selection never silently
|
|
43
|
+
* generates code from a different synced environment.
|
|
44
|
+
*/
|
|
45
|
+
import { existsSync, readdirSync } from "fs";
|
|
46
|
+
import { basename, dirname, join } from "path";
|
|
47
|
+
import { getCurrentEnvironment, getExplicitEnvName } from "../env-resolver.js";
|
|
48
|
+
import { getCurrentAppId } from "../config.js";
|
|
49
|
+
import { resolveSyncDir, assertSafePathComponent } from "../sync-paths.js";
|
|
50
|
+
/**
|
|
51
|
+
* Resolves the single source directory a codegen command should read its
|
|
52
|
+
* `*.toml` schemas from. Throws a plain `Error` (with a user-facing message)
|
|
53
|
+
* when the directory can't be resolved unambiguously or doesn't exist.
|
|
54
|
+
*/
|
|
55
|
+
export function resolveCodegenSourceDir(args) {
|
|
56
|
+
const { subdir, options } = args;
|
|
57
|
+
const cwd = args.cwd ?? process.cwd();
|
|
58
|
+
// 1. --sync-dir is an explicit override: use <sync-dir>/<subdir> verbatim.
|
|
59
|
+
if (options.syncDir) {
|
|
60
|
+
return requireExisting(join(options.syncDir, subdir), subdir, undefined);
|
|
61
|
+
}
|
|
62
|
+
// 2. Resolve the active environment. Call getCurrentEnvironment() directly
|
|
63
|
+
// (not via resolveSyncDir/safeEnv) so a genuinely ambiguous project
|
|
64
|
+
// surfaces the resolver's "No environment selected… Available: …" error
|
|
65
|
+
// with a non-zero exit — unless the caller narrowed the target with
|
|
66
|
+
// --app AND did not name an environment, in which case we fall back to the
|
|
67
|
+
// legacy per-app scan.
|
|
68
|
+
//
|
|
69
|
+
// The `--app`-alone fallback only applies when NO environment was
|
|
70
|
+
// explicitly requested (neither `--env` nor `PRIMITIVE_ENV`). When the
|
|
71
|
+
// user DID name an env but it's invalid/unknown, getCurrentEnvironment()
|
|
72
|
+
// throws; we must surface that error (non-zero exit) rather than silently
|
|
73
|
+
// scanning the app under some OTHER synced environment — that would
|
|
74
|
+
// generate code from the wrong env instead of honoring the explicit
|
|
75
|
+
// selection.
|
|
76
|
+
const explicitEnvRequested = getExplicitEnvName() !== null || !!process.env.PRIMITIVE_ENV;
|
|
77
|
+
let env;
|
|
78
|
+
try {
|
|
79
|
+
env = getCurrentEnvironment();
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (options.app && !explicitEnvRequested) {
|
|
83
|
+
return scanSyncTree({ subdir, appId: options.app, cwd });
|
|
84
|
+
}
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
// 3. Project mode: resolve the app id and build the env/app-scoped path.
|
|
88
|
+
if (env) {
|
|
89
|
+
const appId = options.app ?? env.config.appId ?? getCurrentAppId();
|
|
90
|
+
if (!appId) {
|
|
91
|
+
throw new Error(`No app configured for environment "${env.name}" in .primitive/config.json ` +
|
|
92
|
+
`and no --app given. Add "appId" to the environment or pass --app <app-id>.`);
|
|
93
|
+
}
|
|
94
|
+
// resolveSyncDir re-reads the (cached) resolved env and guards appId via
|
|
95
|
+
// assertSafePathComponent, so an unsafe --app is rejected here.
|
|
96
|
+
const dir = join(resolveSyncDir({ appId }), subdir);
|
|
97
|
+
return requireExisting(dir, subdir, appId);
|
|
98
|
+
}
|
|
99
|
+
// 4. Legacy / bare-dir mode (no .primitive/config.json): scan the sync tree,
|
|
100
|
+
// filtered to --app when given. This preserves the pre-#1510 behavior.
|
|
101
|
+
return scanSyncTree({ subdir, appId: options.app, cwd });
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Legacy fallback: scan `<cwd>/.primitive/sync/<env>/<app>/<subdir>` for a
|
|
105
|
+
* source directory. When `appId` is given, only that app's slots are
|
|
106
|
+
* considered. Resolves to the single match; errors clearly on zero or on
|
|
107
|
+
* ambiguity (naming the candidate apps or envs).
|
|
108
|
+
*/
|
|
109
|
+
function scanSyncTree(args) {
|
|
110
|
+
const { subdir, appId, cwd } = args;
|
|
111
|
+
// Defence-in-depth: an --app value flows into a file-system path below, so
|
|
112
|
+
// reject separators / `..` before using it.
|
|
113
|
+
if (appId)
|
|
114
|
+
assertSafePathComponent(appId, "appId");
|
|
115
|
+
const root = join(cwd, ".primitive", "sync");
|
|
116
|
+
const found = [];
|
|
117
|
+
if (existsSync(root)) {
|
|
118
|
+
for (const envName of readdirSync(root)) {
|
|
119
|
+
const envDir = join(root, envName);
|
|
120
|
+
try {
|
|
121
|
+
for (const app of readdirSync(envDir)) {
|
|
122
|
+
if (appId && app !== appId)
|
|
123
|
+
continue;
|
|
124
|
+
const candidate = join(envDir, app, subdir);
|
|
125
|
+
if (existsSync(candidate))
|
|
126
|
+
found.push(candidate);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Not a directory (or unreadable) — skip.
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (found.length === 0) {
|
|
135
|
+
throw new Error(notFoundMessage(subdir, appId));
|
|
136
|
+
}
|
|
137
|
+
if (found.length > 1) {
|
|
138
|
+
if (appId) {
|
|
139
|
+
const envs = [
|
|
140
|
+
...new Set(found.map((d) => basename(dirname(dirname(d))))),
|
|
141
|
+
];
|
|
142
|
+
throw new Error(`App "${appId}" has a ${subdir}/ directory under multiple environments: ` +
|
|
143
|
+
`${envs.join(", ")}.\n` +
|
|
144
|
+
found.map((d) => ` ${d}`).join("\n") +
|
|
145
|
+
`\nPass --env <name> or --sync-dir to select one.`);
|
|
146
|
+
}
|
|
147
|
+
const apps = [...new Set(found.map((d) => basename(dirname(d))))];
|
|
148
|
+
throw new Error(`Found ${subdir}/ directories for more than one app/env:\n` +
|
|
149
|
+
found.map((d) => ` ${d}`).join("\n") +
|
|
150
|
+
`\nCodegen writes into one output dir, so it must run against one app. ` +
|
|
151
|
+
`Pass --app <app-id> (found: ${apps.join(", ")}) or --sync-dir to select one.`);
|
|
152
|
+
}
|
|
153
|
+
return found[0];
|
|
154
|
+
}
|
|
155
|
+
/** Verifies `dir` exists, throwing the standard "no source dir" error otherwise. */
|
|
156
|
+
function requireExisting(dir, subdir, appId) {
|
|
157
|
+
if (!existsSync(dir)) {
|
|
158
|
+
throw new Error(notFoundMessage(subdir, appId));
|
|
159
|
+
}
|
|
160
|
+
return dir;
|
|
161
|
+
}
|
|
162
|
+
function notFoundMessage(subdir, appId) {
|
|
163
|
+
return appId
|
|
164
|
+
? `No ${subdir}/ directory found for app "${appId}" under .primitive/sync/. ` +
|
|
165
|
+
`Check the --app id, pass --sync-dir, or run \`primitive sync pull\` first.`
|
|
166
|
+
: `No ${subdir}/ directory found. Pass --sync-dir or run \`primitive sync pull\` first.`;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=resolveCodegenSourceDir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveCodegenSourceDir.js","sourceRoot":"","sources":["../../../../src/lib/codegen-shared/resolveCodegenSourceDir.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a TOML source string with a TOML 1.0-compliant parser.
|
|
3
|
+
* Accepts heterogeneous inline arrays that the old `@iarna` rejected.
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseConfigToml(content: string): Record<string, any>;
|
|
6
|
+
/**
|
|
7
|
+
* Serialize a config object to TOML with a TOML 1.0-compliant serializer.
|
|
8
|
+
* Emits heterogeneous arrays natively instead of falling back to a JSON string.
|
|
9
|
+
*/
|
|
10
|
+
export declare function stringifyConfigToml(data: any): string;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI's single TOML wrapper. Every TOML parse/stringify in the CLI routes
|
|
3
|
+
* through here — config files (database-type configs, workflows, collection-type
|
|
4
|
+
* configs, v2 block configs) and non-config files alike (app.toml, prompts,
|
|
5
|
+
* integrations, cron triggers, webhooks, rule-sets, codegen, ...).
|
|
6
|
+
*
|
|
7
|
+
* Config files can carry **heterogeneous arrays**: a settings-gated pipeline
|
|
8
|
+
* produces a CEL step-reference string next to a filter object, e.g.
|
|
9
|
+
* `"$and" = ["$steps.settings.first.peerVisible", { status = "approved" }]`.
|
|
10
|
+
* TOML 1.0.0 permits heterogeneous arrays; the previous library `@iarna`
|
|
11
|
+
* targeted TOML 0.5 and threw on them in **both** directions (`stringify` and
|
|
12
|
+
* `parse`). `smol-toml` is TOML 1.0-compliant and round-trips them, so #1450
|
|
13
|
+
* swapped the config paths and #1464 finished the migration — moving every
|
|
14
|
+
* remaining site here and removing `@iarna` entirely. Keeping one library
|
|
15
|
+
* means one set of parser semantics to reason about.
|
|
16
|
+
*
|
|
17
|
+
* Behavioral notes for the smol-toml swap (measured against `@iarna@2.2.5`):
|
|
18
|
+
* every divergence is a loud error, never silent value drift. smol throws on
|
|
19
|
+
* integers beyond 2^53 (`@iarna` returned a BigInt that then broke
|
|
20
|
+
* `JSON.stringify` on push), rejects control characters in comments (TOML 1.0
|
|
21
|
+
* ban), and throws on stringifying an array containing `null` (`@iarna`
|
|
22
|
+
* silently dropped it). `null`/`undefined` data-loss guards live in
|
|
23
|
+
* `canEmitNative` (`toml-database-config.ts`), not here. `smol` re-emits with
|
|
24
|
+
* slightly different formatting (`[]` not `[ ]`, no array-of-tables indent) —
|
|
25
|
+
* a one-time reformat on the next `pull`.
|
|
26
|
+
*/
|
|
27
|
+
import * as smolToml from "smol-toml";
|
|
28
|
+
/**
|
|
29
|
+
* Parse a TOML source string with a TOML 1.0-compliant parser.
|
|
30
|
+
* Accepts heterogeneous inline arrays that the old `@iarna` rejected.
|
|
31
|
+
*/
|
|
32
|
+
export function parseConfigToml(content) {
|
|
33
|
+
return smolToml.parse(content);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Serialize a config object to TOML with a TOML 1.0-compliant serializer.
|
|
37
|
+
* Emits heterogeneous arrays natively instead of falling back to a JSON string.
|
|
38
|
+
*/
|
|
39
|
+
export function stringifyConfigToml(data) {
|
|
40
|
+
return smolToml.stringify(data);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=config-toml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-toml.js","sourceRoot":"","sources":["../../../src/lib/config-toml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAS;IAC3C,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
|
package/dist/src/lib/config.d.ts
CHANGED
|
@@ -29,6 +29,22 @@ export declare function resolveAppId(appId: string | undefined, options: {
|
|
|
29
29
|
* the serverUrl saved in the legacy credentials file.
|
|
30
30
|
*/
|
|
31
31
|
export declare function getServerUrl(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Resolves the API base URL to authenticate against, used by `primitive login`
|
|
34
|
+
* (issue #1343).
|
|
35
|
+
*
|
|
36
|
+
* Unlike getServerUrl(), this must work *before* any credentials exist (first
|
|
37
|
+
* login), so it never falls back to the stored credentials' serverUrl:
|
|
38
|
+
*
|
|
39
|
+
* - Project mode → the active environment's `apiUrl` (canonical). Lets
|
|
40
|
+
* getCurrentEnvironment() throw on an unresolvable env (ambiguous/unknown
|
|
41
|
+
* --env) so the caller can fail loudly instead of silently targeting prod.
|
|
42
|
+
* - Legacy mode (no .primitive/config.json) → DEFAULT_SERVER_URL, which
|
|
43
|
+
* honors the PRIMITIVE_SERVER_URL escape hatch (constants.ts).
|
|
44
|
+
*
|
|
45
|
+
* The trailing slash is stripped so callers can build `${url}/admin/api/...`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getConfiguredServerUrl(): string;
|
|
32
48
|
/**
|
|
33
49
|
* Exposed so commands can check whether there's a pre-project-config
|
|
34
50
|
* credentials file at ~/.primitive/credentials.json (used by migration
|
package/dist/src/lib/config.js
CHANGED
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { clearCredentialsStore, clearCurrentAppStore, loadCredentialsStore, peekLegacyCredentials, saveCredentialsStore, setCurrentAppStore, } from "./credentials-store.js";
|
|
16
16
|
import { getCurrentEnvironment, getCurrentEnvNameSafe, } from "./env-resolver.js";
|
|
17
|
+
import { PROJECT_CONFIG_DISPLAY_NAME } from "./project-config.js";
|
|
18
|
+
import { DEFAULT_SERVER_URL } from "./constants.js";
|
|
17
19
|
export function loadCredentials() {
|
|
18
20
|
return loadCredentialsStore();
|
|
19
21
|
}
|
|
@@ -55,6 +57,26 @@ export function getCurrentAppId() {
|
|
|
55
57
|
export function resolveAppId(appId, options) {
|
|
56
58
|
const resolved = appId || options.app || getCurrentAppId();
|
|
57
59
|
if (!resolved) {
|
|
60
|
+
// When the active env declares an `appId` in .primitive/config.json but
|
|
61
|
+
// has no credentials slot, loadCredentialsStore() returns null (its
|
|
62
|
+
// null == unauthenticated contract), so getCurrentAppId() yields nothing
|
|
63
|
+
// even though an appId IS configured. In that case the accurate problem
|
|
64
|
+
// is that the user isn't authenticated for this env — not that no app was
|
|
65
|
+
// specified. (A creds slot would have blended in env.config.appId and made
|
|
66
|
+
// `resolved` truthy, so reaching here with a configured appId can only mean
|
|
67
|
+
// missing credentials.)
|
|
68
|
+
let env = null;
|
|
69
|
+
try {
|
|
70
|
+
env = getCurrentEnvironment();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Env resolution failed (ambiguous/unknown env) — fall back to the
|
|
74
|
+
// original "No app specified." message below.
|
|
75
|
+
}
|
|
76
|
+
if (env && env.config.appId) {
|
|
77
|
+
console.error(`Not logged in to environment "${env.name}". An appId is configured in ${PROJECT_CONFIG_DISPLAY_NAME} but you're not authenticated. Run 'primitive -e ${env.name} login'.`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
58
80
|
const envName = getCurrentEnvNameSafe();
|
|
59
81
|
const hint = envName
|
|
60
82
|
? `(current environment: ${envName}). Set 'appId' in .primitive/config.json, pass --app, or run 'primitive use <app-id>'.`
|
|
@@ -85,6 +107,25 @@ export function getServerUrl() {
|
|
|
85
107
|
}
|
|
86
108
|
return credentials.serverUrl;
|
|
87
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Resolves the API base URL to authenticate against, used by `primitive login`
|
|
112
|
+
* (issue #1343).
|
|
113
|
+
*
|
|
114
|
+
* Unlike getServerUrl(), this must work *before* any credentials exist (first
|
|
115
|
+
* login), so it never falls back to the stored credentials' serverUrl:
|
|
116
|
+
*
|
|
117
|
+
* - Project mode → the active environment's `apiUrl` (canonical). Lets
|
|
118
|
+
* getCurrentEnvironment() throw on an unresolvable env (ambiguous/unknown
|
|
119
|
+
* --env) so the caller can fail loudly instead of silently targeting prod.
|
|
120
|
+
* - Legacy mode (no .primitive/config.json) → DEFAULT_SERVER_URL, which
|
|
121
|
+
* honors the PRIMITIVE_SERVER_URL escape hatch (constants.ts).
|
|
122
|
+
*
|
|
123
|
+
* The trailing slash is stripped so callers can build `${url}/admin/api/...`.
|
|
124
|
+
*/
|
|
125
|
+
export function getConfiguredServerUrl() {
|
|
126
|
+
const env = getCurrentEnvironment(); // may throw on an unresolvable env
|
|
127
|
+
return (env ? env.config.apiUrl : DEFAULT_SERVER_URL).replace(/\/$/, "");
|
|
128
|
+
}
|
|
88
129
|
/**
|
|
89
130
|
* Exposed so commands can check whether there's a pre-project-config
|
|
90
131
|
* credentials file at ~/.primitive/credentials.json (used by migration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
export declare const PRODUCTION_SERVER_URL = "https://primitiveapi.com";
|
|
2
2
|
export declare const DEFAULT_SERVER_URL: string;
|
|
3
|
+
/**
|
|
4
|
+
* The alpha deployment's canonical server URL. Mirrors
|
|
5
|
+
* `wrangler.toml [env.alpha] WORKER_URL` — keep the two in sync; if the alpha
|
|
6
|
+
* URL ever changes, update both. Used only by `primitive guides` to detect the
|
|
7
|
+
* alpha target and fetch guides from the `primitive-docs` `next` branch instead
|
|
8
|
+
* of `main` (issue #1463). This is an internal-only convenience;
|
|
9
|
+
* security-through-obscurity is acceptable.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ALPHA_SERVER_URL = "https://js-bao-wss-alpha.primitive-labs-dev.workers.dev";
|
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
export const PRODUCTION_SERVER_URL = "https://primitiveapi.com";
|
|
2
2
|
export const DEFAULT_SERVER_URL = process.env.PRIMITIVE_SERVER_URL || PRODUCTION_SERVER_URL;
|
|
3
|
+
/**
|
|
4
|
+
* The alpha deployment's canonical server URL. Mirrors
|
|
5
|
+
* `wrangler.toml [env.alpha] WORKER_URL` — keep the two in sync; if the alpha
|
|
6
|
+
* URL ever changes, update both. Used only by `primitive guides` to detect the
|
|
7
|
+
* alpha target and fetch guides from the `primitive-docs` `next` branch instead
|
|
8
|
+
* of `main` (issue #1463). This is an internal-only convenience;
|
|
9
|
+
* security-through-obscurity is acceptable.
|
|
10
|
+
*/
|
|
11
|
+
export const ALPHA_SERVER_URL = "https://js-bao-wss-alpha.primitive-labs-dev.workers.dev";
|
|
3
12
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,qBAAqB,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,yDAAyD,CAAC"}
|
package/dist/src/lib/csv.d.ts
CHANGED
|
@@ -44,5 +44,4 @@ export interface BuildRowsResult {
|
|
|
44
44
|
* `importCsv`.
|
|
45
45
|
*/
|
|
46
46
|
export declare function buildRows(rows: Record<string, any>[], options: BuildRowsOptions): BuildRowsResult;
|
|
47
|
-
|
|
48
|
-
export declare function chunk<T>(items: T[], size: number): T[][];
|
|
47
|
+
export { chunk } from "./batch.js";
|
package/dist/src/lib/csv.js
CHANGED
|
@@ -166,12 +166,7 @@ export function buildRows(rows, options) {
|
|
|
166
166
|
}
|
|
167
167
|
return { batch, rowCount: batch.length };
|
|
168
168
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
for (let i = 0; i < items.length; i += size) {
|
|
173
|
-
out.push(items.slice(i, i + size));
|
|
174
|
-
}
|
|
175
|
-
return out;
|
|
176
|
-
}
|
|
169
|
+
// `chunk()` moved to ./batch.ts (shared with `databases import`). Re-exported
|
|
170
|
+
// here so existing `import { chunk } from "../lib/csv.js"` callers keep working.
|
|
171
|
+
export { chunk } from "./batch.js";
|
|
177
172
|
//# sourceMappingURL=csv.js.map
|
package/dist/src/lib/csv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/lib/csv.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/lib/csv.ts"],"names":[],"mappings":"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"}
|