@examplary/cli 1.2.0 → 1.4.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/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@examplary/cli",
3
3
  "description": "A bundler for Examplary question types.",
4
4
  "packageManager": "yarn@4.8.1",
5
- "version": "1.2.0",
5
+ "version": "1.4.0",
6
6
  "type": "module",
7
7
  "bin": {
8
8
  "exp": "./bin/index.js"
@@ -16,23 +16,28 @@
16
16
  "publishConfig": {
17
17
  "access": "public"
18
18
  },
19
+ "files": [
20
+ "bin",
21
+ "src"
22
+ ],
19
23
  "dependencies": {
20
24
  "@examplary/schemas": "*",
21
25
  "@examplary/ui": "*",
22
26
  "@hono/node-server": "^1.19.0",
23
- "@tailwindcss/postcss": "^4.1.11",
24
- "@tailwindcss/vite": "^4.1.11",
27
+ "@tailwindcss/postcss": "^4.1.14",
28
+ "@tailwindcss/vite": "^4.1.18",
25
29
  "@vitejs/plugin-react": "^5.0.4",
26
- "esbuild": "^0.25.8",
27
- "hono": "^4.9.12",
30
+ "esbuild": "^0.27.1",
31
+ "hono": "^4.11.7",
28
32
  "i18next": "^25.3.2",
29
33
  "i18next-browser-languagedetector": "^8.2.0",
34
+ "jsonata": "^2.1.0",
30
35
  "lucide-react": "^0.535.0",
31
- "open": "^10.2.0",
36
+ "open": "^11.0.0",
32
37
  "postcss": "^8.5.6",
33
38
  "react": "^19.0.0",
34
39
  "react-dom": "^19.0.0",
35
- "react-error-boundary": "^6.0.0",
40
+ "react-error-boundary": "^6.0.3",
36
41
  "react-i18next": "^16.0.0",
37
42
  "swr": "^2.3.6",
38
43
  "tailwindcss": "^4.1.14",
@@ -43,7 +48,7 @@
43
48
  },
44
49
  "devDependencies": {
45
50
  "@types/node": "^24.1.0",
46
- "typescript": "^5.9.2"
51
+ "typescript": "^5.9.3"
47
52
  },
48
53
  "homepage": "https://developers.examplary.ai/",
49
54
  "author": {
@@ -5,6 +5,7 @@ import { cwd, exit } from "process";
5
5
 
6
6
  import { setApiHost, setApiKey, uploadFile } from "../lib/api.js";
7
7
  import { buildComponent } from "../lib/bundle.js";
8
+ import { deepCompileJsonata } from "../lib/jsonata.js";
8
9
  import { buildStyles } from "../lib/styles.js";
9
10
 
10
11
  export const uploadCommand = async (argv) => {
@@ -42,6 +43,18 @@ export const uploadCommand = async (argv) => {
42
43
  exit(1);
43
44
  }
44
45
 
46
+ // Validate JSONata expressions in the definition
47
+ if (definition.export?.qti?.interaction?.options) {
48
+ try {
49
+ await deepCompileJsonata(definition.export.qti.interaction.options);
50
+ } catch (e) {
51
+ console.error(
52
+ `🚫 Invalid JSONata expression in export.qti.interaction.options: ${e.message}`,
53
+ );
54
+ exit(1);
55
+ }
56
+ }
57
+
45
58
  // Bundle and upload components
46
59
  const components = {};
47
60
  const validComponentTypes = [
@@ -156,7 +169,7 @@ export const uploadCommand = async (argv) => {
156
169
  // Upload the main question type definition
157
170
  const res = await fetch(`${argv.host}/question-types`, {
158
171
  headers: {
159
- Authorization: argv.key,
172
+ Authorization: `Bearer ${argv.key}`,
160
173
  "Content-Type": "application/json",
161
174
  },
162
175
  method: "POST",
package/src/lib/api.js CHANGED
@@ -23,7 +23,7 @@ export const uploadFile = async (fileName, fileContents, contentType) => {
23
23
  // Request the upload URL
24
24
  const res = await fetch(`${API_HOST}/media/upload?${params.toString()}`, {
25
25
  headers: {
26
- Authorization: API_KEY,
26
+ Authorization: `Bearer ${API_KEY}`,
27
27
  },
28
28
  });
29
29
 
@@ -0,0 +1,31 @@
1
+ import jsonata from "jsonata";
2
+
3
+ export const deepCompileJsonata = async (expression) => {
4
+ if (typeof expression === "string" && expression.startsWith("=")) {
5
+ try {
6
+ jsonata(expression.substring(1));
7
+ } catch (error) {
8
+ throw new Error(
9
+ `JSONata evaluation failed for "${expression}": ${error.message}`,
10
+ );
11
+ }
12
+ }
13
+
14
+ if (Array.isArray(expression)) {
15
+ const output = [];
16
+ for (const o of expression) {
17
+ output.push(await deepCompileJsonata(o));
18
+ }
19
+ return output;
20
+ }
21
+
22
+ if (typeof expression === "object" && expression !== null) {
23
+ const result = {};
24
+ for (const [key, value] of Object.entries(expression)) {
25
+ result[key] = await deepCompileJsonata(value);
26
+ }
27
+ return result;
28
+ }
29
+
30
+ return expression;
31
+ };
@@ -8,7 +8,7 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link
11
- href="https://fonts.googleapis.com/css2?family=Epunda+Sans:ital,wght@0,300..900;1,300..900&family=Epunda+Slab:ital,wght@0,300..900;1,300..900&display=swap"
11
+ href="https://fonts.googleapis.com/css2?family=Epunda+Sans:ital,wght@0,300..900;1,300..900&family=Epunda+Slab:ital,wght@0,300..900;1,300..900&family=Inconsolata:wght@200..900&display=swap"
12
12
  rel="stylesheet"
13
13
  />
14
14
  </head>
@@ -1,151 +0,0 @@
1
- [4:28:02 PM] [semantic-release] › ℹ Running semantic-release version 24.2.9
2
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "verifyConditions" from "@semantic-release/npm"
3
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "verifyConditions" from "@semantic-release/github"
4
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "prepare" from "@semantic-release/npm"
5
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "publish" from "@semantic-release/npm"
6
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "publish" from "@semantic-release/github"
7
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "addChannel" from "@semantic-release/npm"
8
- [4:28:02 PM] [semantic-release] › ✔ Loaded plugin "addChannel" from "@semantic-release/github"
9
- [4:28:11 PM] [semantic-release] › ✔ Run automated release from branch main on repository https://github.com/examplary-ai/examplary
10
- [4:28:11 PM] [semantic-release] › ✔ Allowed to push to the Git repository
11
- [4:28:11 PM] [semantic-release] › ℹ Start step "verifyConditions" of plugin "@semantic-release/npm"
12
- [4:28:11 PM] [semantic-release] [@semantic-release/npm] › ℹ Verify authentication for registry https://registry.npmjs.org/
13
- [4:28:11 PM] [semantic-release] [@semantic-release/npm] › ℹ Reading npm config from /home/runner/work/examplary/examplary/.npmrc
14
- [4:28:11 PM] [semantic-release] [@semantic-release/npm] › ℹ Wrote NPM_TOKEN to /tmp/f3e36bc995df999594c039df4aa6c553/.npmrc
15
- tschoffelen
16
- [4:28:12 PM] [semantic-release] › ✔ Completed step "verifyConditions" of plugin "@semantic-release/npm"
17
- [4:28:12 PM] [semantic-release] › ℹ Start step "verifyConditions" of plugin "@semantic-release/github"
18
- [4:28:12 PM] [semantic-release] [@semantic-release/github] › ℹ Verify GitHub authentication (https://api.github.com)
19
- [4:28:12 PM] [semantic-release] › ✔ Completed step "verifyConditions" of plugin "@semantic-release/github"
20
- [4:28:12 PM] [semantic-release] › ℹ Found git tag @examplary/cli-v1.1.0 associated with version 1.1.0 on branch main
21
- [4:28:12 PM] [semantic-release] › ℹ Found 296 commits since last release
22
- [4:28:12 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
23
- [4:28:12 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Start step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
24
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Found 7 commits for package @examplary/cli since last release
25
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: chore(cli): remove scoring criteria from preview UI
26
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The commit should not trigger a release
27
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: feat(cli): improve question development preview CLI tool
28
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The release type for the commit is minor
29
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: chore(deps): bump tailwindcss from 4.1.12 to 4.1.14
30
-
31
- Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.12 to 4.1.14.
32
- - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
33
- - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
34
- - [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.1.14/packages/tailwindcss)
35
-
36
- ---
37
- updated-dependencies:
38
- - dependency-name: tailwindcss
39
- dependency-version: 4.1.14
40
- dependency-type: direct:production
41
- update-type: version-update:semver-patch
42
- ...
43
-
44
- Signed-off-by: dependabot[bot] <support@github.com>
45
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The commit should not trigger a release
46
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: chore(deps): bump react-i18next from 15.6.1 to 16.0.0
47
-
48
- Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.6.1 to 16.0.0.
49
- - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
50
- - [Commits](https://github.com/i18next/react-i18next/compare/v15.6.1...v16.0.0)
51
-
52
- ---
53
- updated-dependencies:
54
- - dependency-name: react-i18next
55
- dependency-version: 16.0.0
56
- dependency-type: direct:production
57
- update-type: version-update:semver-major
58
- ...
59
-
60
- Signed-off-by: dependabot[bot] <support@github.com>
61
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The commit should not trigger a release
62
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: chore(deps): bump @vitejs/plugin-react from 4.7.0 to 5.0.4
63
-
64
- Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.7.0 to 5.0.4.
65
- - [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
66
- - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
67
- - [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.0.4/packages/plugin-react)
68
-
69
- ---
70
- updated-dependencies:
71
- - dependency-name: "@vitejs/plugin-react"
72
- dependency-version: 5.0.4
73
- dependency-type: direct:production
74
- update-type: version-update:semver-major
75
- ...
76
-
77
- Signed-off-by: dependabot[bot] <support@github.com>
78
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The commit should not trigger a release
79
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: chore(dashboard): remove monaco dep
80
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The commit should not trigger a release
81
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analyzing commit: chore(schemas): remove deprecated keys
82
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ The commit should not trigger a release
83
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Analysis of 7 commits complete: minor release
84
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Completed step "analyzeCommits" of plugin "@semantic-release/commit-analyzer"
85
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
86
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
87
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Plugin "@semantic-release/release-notes-generator" does not provide step "analyzeCommits"
88
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
89
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
90
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Plugin "@semantic-release/npm" does not provide step "analyzeCommits"
91
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
92
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
93
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Plugin "@semantic-release/github" does not provide step "analyzeCommits"
94
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
95
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
96
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
97
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
98
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
99
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
100
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
101
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
102
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
103
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
104
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
105
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
106
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
107
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
108
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
109
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
110
- [4:28:14 PM] [semantic-release] › ℹ Start step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
111
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
112
- [4:28:14 PM] [semantic-release] › ✔ Completed step "analyzeCommits" of plugin "[Function: semantic-release-monorepo]"
113
- [4:28:14 PM] [semantic-release] › ℹ The next release version is 1.2.0
114
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
115
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Plugin "@semantic-release/commit-analyzer" does not provide step "generateNotes"
116
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
117
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
118
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Start step "generateNotes" of plugin "@semantic-release/release-notes-generator"
119
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Found 7 commits for package @examplary/cli since last release
120
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Completed step "generateNotes" of plugin "@semantic-release/release-notes-generator"
121
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
122
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
123
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Plugin "@semantic-release/npm" does not provide step "generateNotes"
124
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
125
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
126
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ Plugin "@semantic-release/github" does not provide step "generateNotes"
127
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
128
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
129
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
130
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
131
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
132
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
133
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
134
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
135
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
136
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
137
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
138
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
139
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
140
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
141
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
142
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
143
- [4:28:14 PM] [semantic-release] › ℹ Start step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
144
- [4:28:14 PM] [semantic-release] [[Function: semantic-release-monorepo]] › ℹ No more plugins
145
- [4:28:14 PM] [semantic-release] › ✔ Completed step "generateNotes" of plugin "[Function: semantic-release-monorepo]"
146
- [4:28:14 PM] [semantic-release] › ℹ Start step "prepare" of plugin "@semantic-release/npm"
147
- [4:28:14 PM] [semantic-release] [@semantic-release/npm] › ℹ Write version 1.2.0 to package.json in /home/runner/work/examplary/examplary/cli
148
- @examplary/cli
149
- v1.2.0
150
- [4:28:14 PM] [semantic-release] › ✔ Completed step "prepare" of plugin "@semantic-release/npm"
151
- [4:28:16 PM] [semantic-release] › ✔ Created tag @examplary/cli-v1.2.0