apostrophe 4.30.0-alpha.1 → 4.30.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.
Files changed (64) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CHANGELOG.md +30 -2
  3. package/eslint.config.js +1 -2
  4. package/lib/mongodb-connect.js +62 -0
  5. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBar.vue +0 -1
  6. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposAdminBarMenu.vue +25 -8
  7. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextBreakpointPreviewMode.vue +9 -0
  8. package/modules/@apostrophecms/admin-bar/ui/apos/components/TheAposContextTitle.vue +20 -2
  9. package/modules/@apostrophecms/area/index.js +10 -5
  10. package/modules/@apostrophecms/area/ui/apos/components/AposAreaWidget.vue +2 -0
  11. package/modules/@apostrophecms/command-menu/ui/apos/components/TheAposCommandMenu.vue +11 -1
  12. package/modules/@apostrophecms/db/index.js +27 -68
  13. package/modules/@apostrophecms/http/index.js +1 -1
  14. package/modules/@apostrophecms/i18n/i18n/en.json +8 -0
  15. package/modules/@apostrophecms/i18n/index.js +1 -8
  16. package/modules/@apostrophecms/image-widget/index.js +29 -1
  17. package/modules/@apostrophecms/job/index.js +7 -9
  18. package/modules/@apostrophecms/layout-widget/index.js +124 -2
  19. package/modules/@apostrophecms/layout-widget/ui/apos/components/AposAreaLayoutEditor.vue +89 -6
  20. package/modules/@apostrophecms/layout-widget/ui/apos/components/AposGridLayout.vue +2 -2
  21. package/modules/@apostrophecms/layout-widget/ui/apos/components/AposGridManager.vue +2 -2
  22. package/modules/@apostrophecms/layout-widget/ui/apos/layout.css +8 -0
  23. package/modules/@apostrophecms/layout-widget/ui/src/layout.css +1 -1
  24. package/modules/@apostrophecms/layout-widget/views/widget.html +3 -3
  25. package/modules/@apostrophecms/login/index.js +13 -15
  26. package/modules/@apostrophecms/modal/ui/apos/components/AposModal.vue +2 -1
  27. package/modules/@apostrophecms/oembed/index.js +18 -13
  28. package/modules/@apostrophecms/recently-edited/ui/apos/components/AposRecentlyEditedIcon.vue +2 -0
  29. package/modules/@apostrophecms/rich-text-widget/index.js +36 -0
  30. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputCheckboxes.js +1 -1
  31. package/modules/@apostrophecms/schema/ui/apos/logic/AposInputRadio.js +1 -1
  32. package/modules/@apostrophecms/styles/index.js +16 -0
  33. package/modules/@apostrophecms/styles/lib/handlers.js +6 -0
  34. package/modules/@apostrophecms/styles/lib/methods.js +93 -0
  35. package/modules/@apostrophecms/styles/lib/presets.js +17 -0
  36. package/modules/@apostrophecms/styles/ui/apos/universal/render.mjs +10 -1
  37. package/modules/@apostrophecms/submitted-draft/ui/apos/components/AposSubmittedDraftIcon.vue +1 -0
  38. package/modules/@apostrophecms/template/views/outerLayoutBase.html +1 -1
  39. package/modules/@apostrophecms/ui/ui/apos/components/AposButton.vue +14 -2
  40. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenu.vue +29 -5
  41. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuDialog.vue +8 -0
  42. package/modules/@apostrophecms/ui/ui/apos/components/AposContextMenuItem.vue +5 -2
  43. package/modules/@apostrophecms/ui/ui/apos/components/AposLocalePicker.vue +14 -1
  44. package/modules/@apostrophecms/ui/ui/apos/scss/global/_utilities.scss +13 -1
  45. package/modules/@apostrophecms/util/index.js +4 -0
  46. package/modules/@apostrophecms/widget-type/index.js +6 -0
  47. package/modules/@apostrophecms/widget-type/ui/apos/components/AposWidgetEditor.vue +32 -0
  48. package/package.json +13 -13
  49. package/test/add-missing-schema-fields-project/node_modules/.package-lock.json +131 -0
  50. package/test/add-missing-schema-fields-project/test.js +3 -11
  51. package/test/assets.js +67 -110
  52. package/test/db.js +15 -24
  53. package/test/job.js +1 -1
  54. package/test/layout-widget-gap.js +530 -0
  55. package/test/login.js +122 -1
  56. package/test/rich-text-widget.js +200 -0
  57. package/test/styles.js +50 -0
  58. package/test-lib/util.js +14 -50
  59. package/claude-tools/detect-handles.js +0 -46
  60. package/claude-tools/minimal-hang-test.js +0 -28
  61. package/claude-tools/mongo-close-test.js +0 -11
  62. package/claude-tools/stdin-ref-test.js +0 -14
  63. package/test/db-tools.js +0 -365
  64. package/test/default-adapter.js +0 -256
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apostrophe",
3
- "version": "4.30.0-alpha.1",
3
+ "version": "4.30.0",
4
4
  "description": "The Apostrophe Content Management System.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -76,7 +76,6 @@
76
76
  "is-wsl": "^2.2.0",
77
77
  "jsdom": "^24.1.0",
78
78
  "klona": "^2.0.4",
79
- "launder": "^1.4.0",
80
79
  "lodash": "^4.18.1",
81
80
  "mini-css-extract-plugin": "^1.6.0",
82
81
  "minimatch": "^3.1.4",
@@ -117,33 +116,34 @@
117
116
  "webpack": "^5.106.1",
118
117
  "webpack-merge": "^5.7.3",
119
118
  "xregexp": "^2.0.0",
120
- "@apostrophecms/db-connect": "^1.0.0-alpha.1",
119
+ "@apostrophecms/emulate-mongo-3-driver": "^1.0.6",
121
120
  "broadband": "^1.1.0",
122
- "postcss-viewport-to-container-toggle": "^2.3.0",
123
- "sanitize-html": "^2.17.3",
124
- "oembetter": "^1.1.4",
125
- "uploadfs": "^1.26.1",
121
+ "boring": "^1.1.1",
126
122
  "express-cache-on-demand": "^1.0.4",
127
- "boring": "^1.1.1"
123
+ "launder": "^1.7.1",
124
+ "oembetter": "^1.1.4",
125
+ "postcss-viewport-to-container-toggle": "^2.3.0",
126
+ "sanitize-html": "^2.17.4",
127
+ "uploadfs": "^1.26.1"
128
128
  },
129
129
  "devDependencies": {
130
- "chai": "^4.3.10",
131
130
  "eslint": "^9.39.1",
132
131
  "form-data": "^4.0.4",
133
132
  "mocha": "^11.7.5",
134
133
  "nyc": "^17.1.0",
135
134
  "stylelint": "^16.5.0",
136
- "eslint-config-apostrophe": "^6.0.2",
137
- "stylelint-config-apostrophe": "^4.4.0"
135
+ "stylelint-config-apostrophe": "^4.4.0",
136
+ "eslint-config-apostrophe": "^6.0.2"
138
137
  },
139
138
  "browserslist": [
140
139
  "ie >= 10"
141
140
  ],
142
141
  "scripts": {
143
142
  "pretest": "npm run lint",
144
- "test": "npm run test:base && npm run test:missing && npm run test:esm",
145
- "test:base": "nyc mocha -t 10000",
143
+ "test": "npm run test:base && npm run test:missing && npm run test:assets && npm run test:esm",
144
+ "test:base": "nyc mocha -t 10000 --ignore=test/assets.js",
146
145
  "test:missing": "nyc mocha -t 10000 test/add-missing-schema-fields-project/test.js",
146
+ "test:assets": "nyc mocha -t 10000 test/assets.js",
147
147
  "test:esm": "mocha -t 1000 test/esm-project/esm.js",
148
148
  "eslint": "eslint .",
149
149
  "eslint-fix": "npm run eslint -- --fix",
@@ -0,0 +1,131 @@
1
+ {
2
+ "name": "add-missing-schema-fields-project",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "../..": {
8
+ "version": "4.28.0",
9
+ "license": "MIT",
10
+ "dependencies": {
11
+ "@apostrophecms/emulate-mongo-3-driver": "workspace:^",
12
+ "@apostrophecms/vue-material-design-icons": "^1.0.0",
13
+ "@ctrl/tinycolor": "^4.1.0",
14
+ "@floating-ui/dom": "^1.5.3",
15
+ "@opentelemetry/api": "^1.9.0",
16
+ "@opentelemetry/semantic-conventions": "^1.0.1",
17
+ "@paralleldrive/cuid2": "^2.2.2",
18
+ "@tiptap/extension-color": "^2.4.0",
19
+ "@tiptap/extension-floating-menu": "^2.0.3",
20
+ "@tiptap/extension-highlight": "^2.0.3",
21
+ "@tiptap/extension-link": "^2.0.3",
22
+ "@tiptap/extension-placeholder": "^2.0.3",
23
+ "@tiptap/extension-subscript": "^2.0.3",
24
+ "@tiptap/extension-superscript": "^2.0.3",
25
+ "@tiptap/extension-table": "^2.0.3",
26
+ "@tiptap/extension-table-cell": "^2.0.3",
27
+ "@tiptap/extension-table-header": "^2.0.3",
28
+ "@tiptap/extension-table-row": "^2.0.3",
29
+ "@tiptap/extension-text-align": "^2.0.3",
30
+ "@tiptap/extension-text-style": "^2.0.3",
31
+ "@tiptap/extension-underline": "^2.0.3",
32
+ "@tiptap/starter-kit": "^2.0.3",
33
+ "@tiptap/vue-3": "^2.0.3",
34
+ "@vue/compiler-sfc": "^3.3.8",
35
+ "autoprefixer": "^10.4.1",
36
+ "bluebird": "^3.7.2",
37
+ "body-parser": "^1.18.2",
38
+ "boring": "workspace:^",
39
+ "broadband": "workspace:^",
40
+ "cheerio": "^1.0.0-rc.10",
41
+ "chokidar": "^3.5.2",
42
+ "common-tags": "^1.8.0",
43
+ "concat-with-sourcemaps": "^1.1.0",
44
+ "connect-mongo": "^5.1.0",
45
+ "cookie-parser": "^1.4.5",
46
+ "cors": "^2.8.5",
47
+ "css-loader": "^5.2.4",
48
+ "cssnano": "^7.1.1",
49
+ "csv-parse": "^5.6.0",
50
+ "dayjs": "^1.9.8",
51
+ "dompurify": "^3.2.5",
52
+ "encodeurl": "^2.0.0",
53
+ "express": "^4.16.4",
54
+ "express-bearer-token": "^3.0.0",
55
+ "express-cache-on-demand": "workspace:^",
56
+ "express-session": "^1.18.2",
57
+ "fs-extra": "^7.0.1",
58
+ "glob": "^10.4.5",
59
+ "he": "^1.2.0",
60
+ "html-to-text": "^9.0.5",
61
+ "i18next": "^20.3.2",
62
+ "i18next-http-middleware": "^3.1.5",
63
+ "import-fresh": "^3.3.0",
64
+ "is-wsl": "^2.2.0",
65
+ "jsdom": "^24.1.0",
66
+ "klona": "^2.0.4",
67
+ "launder": "^1.4.0",
68
+ "lodash": "^4.17.21",
69
+ "mini-css-extract-plugin": "^1.6.0",
70
+ "minimatch": "^3.0.4",
71
+ "mkdirp": "^0.5.5",
72
+ "multer": "^2.0.2",
73
+ "node-fetch": "^2.6.1",
74
+ "nodemailer": "^7.0.10",
75
+ "nunjucks": "^3.2.1",
76
+ "oembetter": "^1.1.3",
77
+ "parseurl": "^1.3.3",
78
+ "passport": "^0.6.0",
79
+ "passport-local": "^1.0.0",
80
+ "path-to-regexp": "^1.8.0",
81
+ "performance-now": "^2.1.0",
82
+ "pinia": "^2.1.7",
83
+ "postcss": "^8.4.47",
84
+ "postcss-html": "^1.3.0",
85
+ "postcss-loader": "^8.1.1",
86
+ "postcss-scss": "^4.0.3",
87
+ "postcss-viewport-to-container-toggle": "workspace:^",
88
+ "prompts": "^2.4.1",
89
+ "qs": "^6.10.1",
90
+ "regexp-quote": "0.0.0",
91
+ "resolve": "^1.19.0",
92
+ "resolve-from": "^5.0.0",
93
+ "sanitize-html": "workspace:^",
94
+ "sass": "^1.80.3",
95
+ "sass-loader": "^16.0.0",
96
+ "server-destroy": "^1.0.1",
97
+ "sluggo": "^1.0.0",
98
+ "sortablejs": "^1.15.0",
99
+ "sortablejs-vue3": "^1.2.11",
100
+ "tiny-emitter": "^2.1.0",
101
+ "tough-cookie": "^4.0.0",
102
+ "underscore.string": "^3.3.4",
103
+ "uploadfs": "workspace:^",
104
+ "void-elements": "^3.1.0",
105
+ "vue": "^3.5.20",
106
+ "vue-advanced-cropper": "^2.8.8",
107
+ "vue-loader": "^17.1.0",
108
+ "vue-style-loader": "^4.1.3",
109
+ "webpack": "^5.72.0",
110
+ "webpack-merge": "^5.7.3",
111
+ "xregexp": "^2.0.0"
112
+ },
113
+ "devDependencies": {
114
+ "eslint": "^9.39.1",
115
+ "eslint-config-apostrophe": "workspace:^",
116
+ "form-data": "^4.0.4",
117
+ "mocha": "^11.7.1",
118
+ "nyc": "^17.1.0",
119
+ "stylelint": "^16.5.0",
120
+ "stylelint-config-apostrophe": "workspace:^"
121
+ },
122
+ "engines": {
123
+ "node": ">=16.0.0"
124
+ }
125
+ },
126
+ "node_modules/apostrophe": {
127
+ "resolved": "../..",
128
+ "link": true
129
+ }
130
+ }
131
+ }
@@ -11,18 +11,10 @@ describe('Apostrophe - add-missing-schema-fields task', function() {
11
11
 
12
12
  let apos;
13
13
 
14
- // When APOS_TEST_DB_PROTOCOL is set, child processes that run `node app.js`
15
- // need the matching APOS_DB_URI so they use the same database as t.create()
16
- const projectCwd = path.resolve(process.cwd(), 'test/add-missing-schema-fields-project/');
17
- const testDbUri = t.getTestDbUri('add-missing-schema-fields-project');
18
- const execEnv = testDbUri
19
- ? { env: { ...process.env, APOS_DB_URI: testDbUri } }
20
- : {};
21
-
22
14
  before(async function() {
23
15
  await util.promisify(exec)(
24
16
  'npm install',
25
- { cwd: projectCwd }
17
+ { cwd: path.resolve(process.cwd(), 'test/add-missing-schema-fields-project/') }
26
18
  );
27
19
  });
28
20
 
@@ -33,7 +25,7 @@ describe('Apostrophe - add-missing-schema-fields task', function() {
33
25
  it('should not run migrations when running the task', async function() {
34
26
  await util.promisify(exec)(
35
27
  'node app.js @apostrophecms/migration:add-missing-schema-fields',
36
- { cwd: projectCwd, ...execEnv }
28
+ { cwd: path.resolve(process.cwd(), 'test/add-missing-schema-fields-project/') }
37
29
  );
38
30
 
39
31
  apos = await t.create({
@@ -72,7 +64,7 @@ describe('Apostrophe - add-missing-schema-fields task', function() {
72
64
  it('should run migrations when running @apostrophecms/migration:migrate task', async function() {
73
65
  await util.promisify(exec)(
74
66
  'node app.js @apostrophecms/migration:migrate',
75
- { cwd: projectCwd, ...execEnv }
67
+ { cwd: path.resolve(process.cwd(), 'test/add-missing-schema-fields-project/') }
76
68
  );
77
69
 
78
70
  apos = await t.create({