placementt-core 1.300.1171 โ 1.300.1177
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/.github/workflows/publish.yaml +10 -1
- package/deploy-all.js +49 -15
- package/lib/callables/events.d.ts +3 -0
- package/lib/callables/events.js +2 -0
- package/lib/callables/events.js.map +1 -1
- package/lib/callables/registry.d.ts +6 -0
- package/package.json +1 -1
- package/src/callables/events.ts +2 -0
|
@@ -4,7 +4,12 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
-
|
|
7
|
+
# Every publish rewrites the same npm package document, so two runs publishing at
|
|
8
|
+
# once clobber each other's versions and dist-tags. Queue runs instead.
|
|
9
|
+
concurrency:
|
|
10
|
+
group: npm-publish
|
|
11
|
+
cancel-in-progress: false
|
|
12
|
+
permissions:
|
|
8
13
|
contents: write # default for repo checkout
|
|
9
14
|
id-token: write # <-- required for npm provenance
|
|
10
15
|
jobs:
|
|
@@ -12,6 +17,10 @@ jobs:
|
|
|
12
17
|
runs-on: ubuntu-latest
|
|
13
18
|
steps:
|
|
14
19
|
- uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
# A queued run must build the tip of main (including the previous run's
|
|
22
|
+
# version bump), not the commit that originally triggered it.
|
|
23
|
+
ref: main
|
|
15
24
|
|
|
16
25
|
- name: Setup Node
|
|
17
26
|
uses: actions/setup-node@v4
|
package/deploy-all.js
CHANGED
|
@@ -11,7 +11,11 @@ console.log("๐ฆ Starting automated deploy-all process...");
|
|
|
11
11
|
const packageJsonPath = 'package.json';
|
|
12
12
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// package.json can lag the registry (a bump commit that failed to push, or a
|
|
15
|
+
// manual edit), so take the highest patch from either source.
|
|
16
|
+
const publishedTags = JSON.parse(execSync('npm view placementt-core dist-tags --json', { encoding: 'utf8' }));
|
|
17
|
+
const patchOf = (version) => Number(version.split('.')[2]);
|
|
18
|
+
const patch = Math.max(patchOf(packageJson.version), ...['prod', 'dev', 'emu'].filter((tag) => publishedTags[tag]).map((tag) => patchOf(publishedTags[tag])));
|
|
15
19
|
const nextPatch = patch + 1;
|
|
16
20
|
|
|
17
21
|
console.log(`๐ Current version: ${packageJson.version}`);
|
|
@@ -23,6 +27,31 @@ function updateVersion(version) {
|
|
|
23
27
|
console.log(`โ
Updated version to ${version}`);
|
|
24
28
|
}
|
|
25
29
|
|
|
30
|
+
// A publish that lands while the previous one is still being processed can
|
|
31
|
+
// overwrite that one's dist-tag (the version itself survives). Polling `npm view`
|
|
32
|
+
// to wait it out reads the CDN-cached packument, which lags by many minutes, so
|
|
33
|
+
// instead re-point every tag directly once all three are published.
|
|
34
|
+
const publishedVersions = {};
|
|
35
|
+
|
|
36
|
+
function publishWithTag(version, tag) {
|
|
37
|
+
run(`npm publish --tag ${tag}`);
|
|
38
|
+
publishedVersions[tag] = version;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// The trusted publisher can only manage dist-tags once "Allow npm dist-tag" is
|
|
42
|
+
// enabled on the package, so a refusal here warns rather than failing a deploy
|
|
43
|
+
// whose publishes have already gone out (and skipping the version bump push).
|
|
44
|
+
function pinDistTags() {
|
|
45
|
+
for (const [tag, version] of Object.entries(publishedVersions)) {
|
|
46
|
+
try {
|
|
47
|
+
run(`npm dist-tag add placementt-core@${version} ${tag}`);
|
|
48
|
+
console.log(`โ
${tag} โ ${version}`);
|
|
49
|
+
} catch {
|
|
50
|
+
console.warn(`โ ๏ธ Could not pin ${tag} โ ${version}. Fix with: npm dist-tag add placementt-core@${version} ${tag}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
26
55
|
// ---- Keep original file contents for reset ----
|
|
27
56
|
const firebaseConfigPath = 'src/firebase/firebaseConfig.tsx';
|
|
28
57
|
// Every Algolia client reads the app id from this one module, so swapping it
|
|
@@ -45,20 +74,10 @@ function toDevAlgoliaConfig(source) {
|
|
|
45
74
|
return swapped;
|
|
46
75
|
}
|
|
47
76
|
|
|
48
|
-
// -------------------------------
|
|
49
|
-
// 1๏ธโฃ PROD VERSION
|
|
50
|
-
// -------------------------------
|
|
51
77
|
const prodVersion = `1.1.${nextPatch}`;
|
|
52
|
-
updateVersion(prodVersion);
|
|
53
|
-
|
|
54
|
-
console.log("๐ Building (prod)...");
|
|
55
|
-
run('yarn tsc');
|
|
56
|
-
|
|
57
|
-
console.log(`๐ค Publishing ${prodVersion}`);
|
|
58
|
-
run('npm publish --tag prod');
|
|
59
78
|
|
|
60
79
|
// -------------------------------
|
|
61
|
-
//
|
|
80
|
+
// 1๏ธโฃ DEV VERSION
|
|
62
81
|
// -------------------------------
|
|
63
82
|
console.log("๐ Switching to DEV config...");
|
|
64
83
|
|
|
@@ -77,10 +96,10 @@ console.log("๐ Building (dev)...");
|
|
|
77
96
|
run('yarn tsc');
|
|
78
97
|
|
|
79
98
|
console.log(`๐ค Publishing ${devVersion}`);
|
|
80
|
-
|
|
99
|
+
publishWithTag(devVersion, 'dev');
|
|
81
100
|
|
|
82
101
|
// -------------------------------
|
|
83
|
-
//
|
|
102
|
+
// 2๏ธโฃ EMULATOR VERSION
|
|
84
103
|
// -------------------------------
|
|
85
104
|
console.log("๐ Switching to EMULATOR config...");
|
|
86
105
|
|
|
@@ -97,7 +116,7 @@ console.log("๐ Building (emulator)...");
|
|
|
97
116
|
run('yarn tsc');
|
|
98
117
|
|
|
99
118
|
console.log(`๐ค Publishing ${emulatorVersion}`);
|
|
100
|
-
|
|
119
|
+
publishWithTag(emulatorVersion, 'emu');
|
|
101
120
|
|
|
102
121
|
// -------------------------------
|
|
103
122
|
// RESET FILES
|
|
@@ -106,6 +125,19 @@ console.log("๐งน Resetting source files...");
|
|
|
106
125
|
fs.writeFileSync(firebaseConfigPath, originalFirebaseConfig);
|
|
107
126
|
fs.writeFileSync(algoliaConfigPath, originalAlgoliaConfig);
|
|
108
127
|
|
|
128
|
+
// -------------------------------
|
|
129
|
+
// PROD VERSION (last, so nothing publishes after it and clobbers its tag)
|
|
130
|
+
// -------------------------------
|
|
131
|
+
updateVersion(prodVersion);
|
|
132
|
+
|
|
133
|
+
console.log("๐ Building (prod)...");
|
|
134
|
+
run('yarn tsc');
|
|
135
|
+
|
|
136
|
+
console.log(`๐ค Publishing ${prodVersion}`);
|
|
137
|
+
publishWithTag(prodVersion, 'prod');
|
|
138
|
+
|
|
139
|
+
pinDistTags();
|
|
140
|
+
|
|
109
141
|
console.log("๐ Deployment complete!");
|
|
110
142
|
|
|
111
143
|
updateVersion(prodVersion);
|
|
@@ -114,6 +146,8 @@ execSync('git config user.email "github-actions@github.com"', { stdio: 'inherit'
|
|
|
114
146
|
|
|
115
147
|
execSync('git add package.json', { stdio: 'inherit' });
|
|
116
148
|
execSync('git commit -m "chore: bump version"', { stdio: 'inherit' });
|
|
149
|
+
// main may have moved while this run was building; rebase so the bump still lands.
|
|
150
|
+
execSync('git pull --rebase origin main', { stdio: 'inherit' });
|
|
117
151
|
execSync('git push origin main', { stdio: 'inherit' });
|
|
118
152
|
|
|
119
153
|
console.log("๐ Deployment complete!");
|
|
@@ -71,14 +71,17 @@ export declare const eventsCallables: {
|
|
|
71
71
|
eventSchoolId: z.ZodString;
|
|
72
72
|
slotIds: z.ZodArray<z.ZodString, "many">;
|
|
73
73
|
students: z.ZodOptional<z.ZodNumber>;
|
|
74
|
+
studentsPerSlot: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
74
75
|
}, "strip", z.ZodTypeAny, {
|
|
75
76
|
eventSchoolId: string;
|
|
76
77
|
slotIds: string[];
|
|
77
78
|
students?: number | undefined;
|
|
79
|
+
studentsPerSlot?: Record<string, number> | undefined;
|
|
78
80
|
}, {
|
|
79
81
|
eventSchoolId: string;
|
|
80
82
|
slotIds: string[];
|
|
81
83
|
students?: number | undefined;
|
|
84
|
+
studentsPerSlot?: Record<string, number> | undefined;
|
|
82
85
|
}>;
|
|
83
86
|
response: z.ZodObject<{
|
|
84
87
|
code: z.ZodEnum<["booked"]>;
|
package/lib/callables/events.js
CHANGED
|
@@ -45,6 +45,8 @@ exports.eventsCallables = {
|
|
|
45
45
|
eventSchoolId: zod_1.z.string().min(1),
|
|
46
46
|
slotIds: zod_1.z.array(zod_1.z.string().min(1)).min(1),
|
|
47
47
|
students: zod_1.z.number().int().min(1).optional(),
|
|
48
|
+
// Students per slot, when places are counted in students. Takes precedence over students.
|
|
49
|
+
studentsPerSlot: zod_1.z.record(zod_1.z.string(), zod_1.z.number().int().min(1)).optional(),
|
|
48
50
|
}),
|
|
49
51
|
response: zod_1.z.object({
|
|
50
52
|
code: zod_1.z.enum(["booked"]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/callables/events.ts"],"names":[],"mappings":";;;AAAA,6BAAsB;AAGtB;;;GAGG;AACU,QAAA,eAAe,GAAG;IAC3B,qBAAqB,EAAE;QACnB,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE;YACf,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;SACpB,CAAC;QACF,qEAAqE;QACrE,QAAQ,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC;YACvB,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC3B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACtC,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACtC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC,CAAC,CAAC;KACN;IACD,uEAAuE;IACvE,2EAA2E;IAC3E,6BAA6B,EAAE;QAC3B,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAChC,CAAC;QACF,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;YACf,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACzC,CAAC;KACL;IACD,iFAAiF;IACjF,4EAA4E;IAC5E,2EAA2E;IAC3E,kBAAkB;IAClB,uBAAuB,EAAE;QACrB,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/callables/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -2408,14 +2408,17 @@ export declare const allCallables: {
|
|
|
2408
2408
|
eventSchoolId: z.ZodString;
|
|
2409
2409
|
slotIds: z.ZodArray<z.ZodString, "many">;
|
|
2410
2410
|
students: z.ZodOptional<z.ZodNumber>;
|
|
2411
|
+
studentsPerSlot: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
2411
2412
|
}, "strip", z.ZodTypeAny, {
|
|
2412
2413
|
eventSchoolId: string;
|
|
2413
2414
|
slotIds: string[];
|
|
2414
2415
|
students?: number | undefined;
|
|
2416
|
+
studentsPerSlot?: Record<string, number> | undefined;
|
|
2415
2417
|
}, {
|
|
2416
2418
|
eventSchoolId: string;
|
|
2417
2419
|
slotIds: string[];
|
|
2418
2420
|
students?: number | undefined;
|
|
2421
|
+
studentsPerSlot?: Record<string, number> | undefined;
|
|
2419
2422
|
}>;
|
|
2420
2423
|
response: z.ZodObject<{
|
|
2421
2424
|
code: z.ZodEnum<["booked"]>;
|
|
@@ -2626,14 +2629,17 @@ export declare const callableGroups: {
|
|
|
2626
2629
|
eventSchoolId: z.ZodString;
|
|
2627
2630
|
slotIds: z.ZodArray<z.ZodString, "many">;
|
|
2628
2631
|
students: z.ZodOptional<z.ZodNumber>;
|
|
2632
|
+
studentsPerSlot: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
|
|
2629
2633
|
}, "strip", z.ZodTypeAny, {
|
|
2630
2634
|
eventSchoolId: string;
|
|
2631
2635
|
slotIds: string[];
|
|
2632
2636
|
students?: number | undefined;
|
|
2637
|
+
studentsPerSlot?: Record<string, number> | undefined;
|
|
2633
2638
|
}, {
|
|
2634
2639
|
eventSchoolId: string;
|
|
2635
2640
|
slotIds: string[];
|
|
2636
2641
|
students?: number | undefined;
|
|
2642
|
+
studentsPerSlot?: Record<string, number> | undefined;
|
|
2637
2643
|
}>;
|
|
2638
2644
|
response: z.ZodObject<{
|
|
2639
2645
|
code: z.ZodEnum<["booked"]>;
|
package/package.json
CHANGED
package/src/callables/events.ts
CHANGED
|
@@ -44,6 +44,8 @@ export const eventsCallables = {
|
|
|
44
44
|
eventSchoolId: z.string().min(1),
|
|
45
45
|
slotIds: z.array(z.string().min(1)).min(1),
|
|
46
46
|
students: z.number().int().min(1).optional(),
|
|
47
|
+
// Students per slot, when places are counted in students. Takes precedence over students.
|
|
48
|
+
studentsPerSlot: z.record(z.string(), z.number().int().min(1)).optional(),
|
|
47
49
|
}),
|
|
48
50
|
response: z.object({
|
|
49
51
|
code: z.enum(["booked"]),
|