build: Release (#9781)
This commit is contained in:
@@ -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
3518
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
34
package.json
34
package.json
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user