build: Release (#9781)

This commit is contained in:
Manuel
2025-06-01 17:10:03 +02:00
committed by GitHub
7 changed files with 2143 additions and 1505 deletions

View File

@@ -1,3 +1,17 @@
## [8.2.1-alpha.2](https://github.com/parse-community/parse-server/compare/8.2.1-alpha.1...8.2.1-alpha.2) (2025-05-14)
### Performance Improvements
* Remove saving Parse Cloud Job request parameters in internal collection `_JobStatus` ([#8343](https://github.com/parse-community/parse-server/issues/8343)) ([e98733c](https://github.com/parse-community/parse-server/commit/e98733cbac9451521a3acc388d2f9d29eb4610e0))
## [8.2.1-alpha.1](https://github.com/parse-community/parse-server/compare/8.2.0...8.2.1-alpha.1) (2025-05-03)
### Bug Fixes
* `Parse.Query.containedIn` and `matchesQuery` do not work with nested objects ([#9738](https://github.com/parse-community/parse-server/issues/9738)) ([0db3a6f](https://github.com/parse-community/parse-server/commit/0db3a6ff27a129427770e314a792cc586e4255b5))
# [8.2.0-alpha.1](https://github.com/parse-community/parse-server/compare/8.1.1-alpha.1...8.2.0-alpha.1) (2025-04-15)

3518
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "parse-server",
"version": "8.2.0",
"version": "8.2.1-alpha.2",
"description": "An express module providing a Parse-compatible API server",
"main": "lib/index.js",
"repository": {
@@ -21,7 +21,7 @@
"license": "Apache-2.0",
"dependencies": {
"@apollo/server": "4.12.0",
"@babel/eslint-parser": "7.27.0",
"@babel/eslint-parser": "7.27.1",
"@graphql-tools/merge": "9.0.24",
"@graphql-tools/schema": "10.0.23",
"@graphql-tools/utils": "10.8.6",
@@ -34,7 +34,7 @@
"express": "5.1.0",
"express-rate-limit": "7.5.0",
"follow-redirects": "1.15.9",
"graphql": "16.10.0",
"graphql": "16.11.0",
"graphql-list-fields": "2.0.4",
"graphql-relay": "0.10.2",
"graphql-tag": "2.12.6",
@@ -46,7 +46,7 @@
"lodash": "4.17.21",
"lru-cache": "10.4.0",
"mime": "4.0.7",
"mongodb": "6.15.0",
"mongodb": "6.16.0",
"mustache": "4.2.0",
"otpauth": "9.4.0",
"parse": "6.1.1",
@@ -58,28 +58,28 @@
"rate-limit-redis": "4.2.0",
"redis": "4.7.0",
"router": "2.2.0",
"semver": "7.7.1",
"semver": "7.7.2",
"subscriptions-transport-ws": "0.11.0",
"tv4": "1.3.0",
"uuid": "11.1.0",
"winston": "3.17.0",
"winston-daily-rotate-file": "5.0.0",
"ws": "8.18.1"
"ws": "8.18.2"
},
"devDependencies": {
"@actions/core": "1.11.1",
"@apollo/client": "3.13.7",
"@apollo/client": "3.13.8",
"@babel/cli": "7.27.0",
"@babel/core": "7.26.10",
"@babel/core": "7.27.3",
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
"@babel/plugin-transform-flow-strip-types": "7.26.5",
"@babel/preset-env": "7.26.9",
"@babel/preset-typescript": "7.27.0",
"@babel/preset-env": "7.27.2",
"@babel/preset-typescript": "7.27.1",
"@saithodev/semantic-release-backmerge": "4.0.1",
"@semantic-release/changelog": "6.0.3",
"@semantic-release/commit-analyzer": "13.0.1",
"@semantic-release/git": "10.0.1",
"@semantic-release/github": "11.0.1",
"@semantic-release/github": "11.0.2",
"@semantic-release/npm": "12.0.1",
"@semantic-release/release-notes-generator": "14.0.3",
"all-node-versions": "13.0.1",
@@ -87,11 +87,11 @@
"clean-jsdoc-theme": "4.3.0",
"cross-env": "7.0.3",
"deep-diff": "1.0.2",
"eslint": "9.23.0",
"eslint": "9.27.0",
"eslint-plugin-expect-type": "0.6.2",
"flow-bin": "0.266.1",
"flow-bin": "0.271.0",
"form-data": "4.0.2",
"globals": "16.0.0",
"globals": "16.2.0",
"graphql-tag": "2.12.6",
"husky": "9.1.7",
"jasmine": "5.6.0",
@@ -108,10 +108,10 @@
"node-fetch": "3.2.10",
"nyc": "17.1.0",
"prettier": "2.0.5",
"semantic-release": "24.2.3",
"semantic-release": "24.2.5",
"typescript": "5.8.3",
"typescript-eslint": "8.29.0",
"yaml": "2.7.1"
"typescript-eslint": "8.33.0",
"yaml": "2.8.0"
},
"scripts": {
"ci:check": "node ./ci/ciCheck.js",

View File

@@ -5306,4 +5306,72 @@ describe('Parse.Query testing', () => {
expect(score).toEqual([1]);
}, { useMasterKey: true });
});
describe_only_db('mongo')('query nested keys', () => {
it('queries nested key using equalTo', async () => {
const child = new Parse.Object('Child');
child.set('key', 'value');
await child.save();
const parent = new Parse.Object('Parent');
parent.set('some', {
nested: {
key: {
child,
},
},
});
await parent.save();
const query1 = await new Parse.Query('Parent')
.equalTo('some.nested.key.child', child)
.find();
expect(query1.length).toEqual(1);
});
it('queries nested key using containedIn', async () => {
const child = new Parse.Object('Child');
child.set('key', 'value');
await child.save();
const parent = new Parse.Object('Parent');
parent.set('some', {
nested: {
key: {
child,
},
},
});
await parent.save();
const query1 = await new Parse.Query('Parent')
.containedIn('some.nested.key.child', [child])
.find();
expect(query1.length).toEqual(1);
});
it('queries nested key using matchesQuery', async () => {
const child = new Parse.Object('Child');
child.set('key', 'value');
await child.save();
const parent = new Parse.Object('Parent');
parent.set('some', {
nested: {
key: {
child,
},
},
});
await parent.save();
const query1 = await new Parse.Query('Parent')
.matchesQuery('some.nested.key.child', new Parse.Query('Child').equalTo('key', 'value'))
.find();
expect(query1.length).toEqual(1);
});
});
});

View File

@@ -327,7 +327,7 @@ function transformQueryKeyValue(className, key, value, schema, count = false) {
}
// Handle query constraints
const transformedConstraint = transformConstraint(value, field, count);
const transformedConstraint = transformConstraint(value, field, key, count);
if (transformedConstraint !== CannotTransform) {
if (transformedConstraint.$text) {
return { key: '$text', value: transformedConstraint.$text };
@@ -651,12 +651,15 @@ function transformTopLevelAtom(atom, field) {
// If it is not a valid constraint but it could be a valid something
// else, return CannotTransform.
// inArray is whether this is an array field.
function transformConstraint(constraint, field, count = false) {
function transformConstraint(constraint, field, queryKey, count = false) {
const inArray = field && field.type && field.type === 'Array';
// Check wether the given key has `.`
const isNestedKey = queryKey.indexOf('.') > -1;
if (typeof constraint !== 'object' || !constraint) {
return CannotTransform;
}
const transformFunction = inArray ? transformInteriorAtom : transformTopLevelAtom;
// For inArray or nested key, we need to transform the interior atom
const transformFunction = (inArray || isNestedKey) ? transformInteriorAtom : transformTopLevelAtom;
const transformer = atom => {
const result = transformFunction(atom, field);
if (result === CannotTransform) {

View File

@@ -76,7 +76,7 @@ export class FunctionsRouter extends PromiseRouter {
message: jobHandler.setMessage.bind(jobHandler),
};
return jobHandler.setRunning(jobName, params).then(jobStatus => {
return jobHandler.setRunning(jobName).then(jobStatus => {
request.jobId = jobStatus.objectId;
// run the function async
process.nextTick(() => {

View File

@@ -77,12 +77,11 @@ export function jobStatusHandler(config) {
const objectId = newObjectId(config.objectIdSize);
const database = config.database;
const handler = statusHandler(JOB_STATUS_COLLECTION, database);
const setRunning = function (jobName, params) {
const setRunning = function (jobName) {
const now = new Date();
jobStatus = {
objectId,
jobName,
params,
status: 'running',
source: 'api',
createdAt: now,