mirror of
https://github.com/fluxscape/fluxscape.git
synced 2026-01-11 23:02:55 +01:00
Merge branch 'main' into feature/store-cloudservices-in-project-folder
This commit is contained in:
32
README.md
32
README.md
@@ -1,21 +1,21 @@
|
|||||||
# Noodl
|
# Fluxscape
|
||||||
|
|
||||||
[Noodl](https://noodl.net) is a low-code platform where designers and developers build custom applications and experiences. Designed as a visual programming environment, it aims to expedite your development process. It promotes the swift and efficient creation of applications, requiring minimal coding knowledge.
|
Fluxscape is a low-code platform where designers and developers build custom applications and experiences. Designed as a visual programming environment, it aims to expedite your development process. It promotes the swift and efficient creation of applications, requiring minimal coding knowledge.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
Documentation for how to use Noodl can be found here:
|
Documentation for how to use Fluxscape can be found here:
|
||||||
[https://noodlapp.github.io/noodl-docs/](https://noodlapp.github.io/noodl-docs/)
|
[Fluxscape Documentation](https://docs.fluxscape.io)
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
Main support channel is Discord: [https://www.noodl.net/community](https://www.noodl.net/community)
|
Main support channel is Discord: [Fluxscape Discord](https://discord.gg/fXNW9EXa6A)
|
||||||
|
|
||||||
## Download releases
|
## Download releases
|
||||||
Pre-built binaries can be [downloaded from Github](https://github.com/noodlapp/noodl/releases)
|
Pre-built binaries can be [downloaded from Github](https://github.com/fluxscape/fluxscape/releases)
|
||||||
|
|
||||||
## Note for users who are migrating from the deprecated closed source version
|
## Note for users who are migrating from the deprecated closed source version
|
||||||
- [Migrating the project files and workspaces to a Git provider](https://noodlapp.github.io/noodl-docs/docs/guides/collaboration/migrating-from-noodl-hosted-git)
|
- [Migrating the project files and workspaces to a Git provider](https://docs.fluxscape.io/docs/guides/collaboration/migrating-from-noodl-hosted-git/)
|
||||||
- [Migrate backend and database](https://noodlapp.github.io/noodl-docs/docs/guides/deploy/using-an-external-backend#migrating-from-a-noodl-cloud-service)
|
- [Migrate backend and database](https://docs.fluxscape.io/docs/guides/deploy/using-an-external-backend/#migrating-from-a-noodl-cloud-service)
|
||||||
- [Self-host frontend](https://noodlapp.github.io/noodl-docs/docs/guides/deploy/hosting-frontend)
|
- [Self-host frontend](https://docs.fluxscape.io/docs/guides/deploy/hosting-frontend/)
|
||||||
|
|
||||||
## Building from source
|
## Building from source
|
||||||
|
|
||||||
@@ -23,24 +23,24 @@ Pre-built binaries can be [downloaded from Github](https://github.com/noodlapp/n
|
|||||||
# Install all dependencies
|
# Install all dependencies
|
||||||
$ npm install
|
$ npm install
|
||||||
|
|
||||||
# Start the Noodl Editor and build a production version of the cloud and react runtime (useful when running Noodl from source but want to deploy to production)
|
# Start the Fluxscape Editor and build a production version of the cloud and react runtime (useful when running Fluxscape from source but want to deploy to production)
|
||||||
$ npm start
|
$ npm start
|
||||||
|
|
||||||
# Start the Noodl Editor and watch the filesystem for changes to the runtimes. Development versions of the runtimes, not meant for production (mostly due to source maps and file size)
|
# Start the Fluxscape Editor and watch the filesystem for changes to the runtimes. Development versions of the runtimes, not meant for production (mostly due to source maps and file size)
|
||||||
# This is ideal for a quick workflow when doing changes on the runtimes.
|
# This is ideal for a quick workflow when doing changes on the runtimes.
|
||||||
$ npm run dev
|
$ npm run dev
|
||||||
|
|
||||||
# Start Noodl Editor test runner
|
# Start Fluxscape Editor test runner
|
||||||
$ npm run test:editor
|
$ npm run test:editor
|
||||||
```
|
```
|
||||||
|
|
||||||
## Licenses
|
## Licenses
|
||||||
This repository contains two different licenses for different parts of the Noodl platform.
|
This repository contains two different licenses for different parts of the Fluxscape platform.
|
||||||
|
|
||||||
- Components related to the editor, used to edit Noodl projects, are under GPLv3
|
- Components related to the editor, used to edit Fluxscape projects, are under GPLv3
|
||||||
- Components related to the end applications, used by the applications Noodl deploys, are under MIT
|
- Components related to the end applications, used by the applications Fluxscape deploys, are under MIT
|
||||||
|
|
||||||
All of the source code of applications created with Noodl are under MIT. This means you can do project specific changes to the runtime without having to redistribute your changes.
|
All of the source code of applications created with Fluxscape are under MIT. This means you can do project specific changes to the runtime without having to redistribute your changes.
|
||||||
|
|
||||||
Packaged licensed under MIT:
|
Packaged licensed under MIT:
|
||||||
- `noodl-runtime`
|
- `noodl-runtime`
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"name": "@noodl/repo",
|
"name": "@noodl/repo",
|
||||||
"description": "Low-code for when experience matter",
|
"description": "Low-code for when experience matter",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxcsape.io>",
|
||||||
"homepage": "https://noodl.net",
|
"homepage": "https://fluxscape.io",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import css from './Tooltip.module.scss';
|
|||||||
|
|
||||||
export interface TooltipProps extends UnsafeStyleProps {
|
export interface TooltipProps extends UnsafeStyleProps {
|
||||||
content: SingleSlot;
|
content: SingleSlot;
|
||||||
fineType?: string;
|
fineType?: string | string[];
|
||||||
children: Slot;
|
children: Slot;
|
||||||
showAfterMs?: number;
|
showAfterMs?: number;
|
||||||
|
|
||||||
@@ -79,9 +79,17 @@ export function Tooltip({
|
|||||||
|
|
||||||
{fineType && (
|
{fineType && (
|
||||||
<div className={css['FineType']}>
|
<div className={css['FineType']}>
|
||||||
<Label size={LabelSize.Small} variant={TextType.Secondary}>
|
{Array.isArray(fineType) ? (
|
||||||
{fineType}
|
fineType.map((x) => (
|
||||||
</Label>
|
<Label size={LabelSize.Small} variant={TextType.Secondary}>
|
||||||
|
{x}
|
||||||
|
</Label>
|
||||||
|
))
|
||||||
|
) : (
|
||||||
|
<Label size={LabelSize.Small} variant={TextType.Secondary}>
|
||||||
|
{fineType}
|
||||||
|
</Label>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>Noodl</title>
|
<title>Fluxscape</title>
|
||||||
<link href="../assets/lib/fontawesome/css/font-awesome.min.css" rel="stylesheet" />
|
<link href="../assets/lib/fontawesome/css/font-awesome.min.css" rel="stylesheet" />
|
||||||
<link href="../assets/css/style.css" rel="stylesheet" />
|
<link href="../assets/css/style.css" rel="stylesheet" />
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,11 @@ import { Keybinding } from '@noodl-utils/keyboard/Keybinding';
|
|||||||
import { KeyCode, KeyMod } from '@noodl-utils/keyboard/KeyCode';
|
import { KeyCode, KeyMod } from '@noodl-utils/keyboard/KeyCode';
|
||||||
|
|
||||||
export namespace Keybindings {
|
export namespace Keybindings {
|
||||||
|
export const SEARCH = new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_F);
|
||||||
|
|
||||||
|
export const CLOUD_SERVICE_OPEN_DASHBOARD = new Keybinding(KeyMod.CtrlCmd, KeyMod.Shift, KeyCode.KEY_P);
|
||||||
|
export const CLOUD_SERVICE_OPEN_DASHBOARD_BROWSER = new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_P);
|
||||||
|
|
||||||
export const REFRESH_PREVIEW = new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_R);
|
export const REFRESH_PREVIEW = new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_R);
|
||||||
export const OPEN_DEVTOOLS = new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_D);
|
export const OPEN_DEVTOOLS = new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_D);
|
||||||
export const OPEN_CLOUD_DEVTOOLS = new Keybinding(KeyMod.CtrlCmd, KeyMod.Shift, KeyCode.KEY_R);
|
export const OPEN_CLOUD_DEVTOOLS = new Keybinding(KeyMod.CtrlCmd, KeyMod.Shift, KeyCode.KEY_R);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { AppRegistry } from '@noodl-models/app_registry';
|
import { AppRegistry } from '@noodl-models/app_registry';
|
||||||
import { SidebarModel } from '@noodl-models/sidebar';
|
import { SidebarModel } from '@noodl-models/sidebar';
|
||||||
import { Keybinding } from '@noodl-utils/keyboard/Keybinding';
|
import { Keybindings } from '@noodl-constants/Keybindings';
|
||||||
import { KeyCode, KeyMod } from '@noodl-utils/keyboard/KeyCode';
|
|
||||||
|
|
||||||
import { IconName } from '@noodl-core-ui/components/common/Icon';
|
import { IconName } from '@noodl-core-ui/components/common/Icon';
|
||||||
|
|
||||||
@@ -69,7 +68,7 @@ export function installSidePanel({ isLesson }: SetupEditorOptions) {
|
|||||||
SidebarModel.instance.register({
|
SidebarModel.instance.register({
|
||||||
id: 'search',
|
id: 'search',
|
||||||
name: 'Search',
|
name: 'Search',
|
||||||
fineType: new Keybinding(KeyMod.CtrlCmd, KeyCode.KEY_F).label,
|
fineType: Keybindings.SEARCH.label,
|
||||||
order: 2,
|
order: 2,
|
||||||
icon: IconName.Search,
|
icon: IconName.Search,
|
||||||
panel: SearchPanel
|
panel: SearchPanel
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export class HtmlProcessor {
|
|||||||
baseUrl = baseUrl + '/';
|
baseUrl = baseUrl + '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
const title = parameters.title || settings.htmlTitle || 'Noodl Viewer';
|
const title = parameters.title || settings.htmlTitle || 'Fluxscape Viewer';
|
||||||
let headCode = settings.headCode || '';
|
let headCode = settings.headCode || '';
|
||||||
|
|
||||||
if (parameters.headCode) {
|
if (parameters.headCode) {
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import React, { useEffect, useRef, useState } from 'react';
|
import React, { useEffect, useRef, useState } from 'react';
|
||||||
|
|
||||||
|
import { Keybindings } from '@noodl-constants/Keybindings';
|
||||||
import { Environment } from '@noodl-models/CloudServices';
|
import { Environment } from '@noodl-models/CloudServices';
|
||||||
import ParseDashboardServer from '@noodl-utils/parsedashboardserver';
|
import ParseDashboardServer from '@noodl-utils/parsedashboardserver';
|
||||||
|
|
||||||
import { Icon, IconName, IconSize } from '@noodl-core-ui/components/common/Icon';
|
import { Icon, IconName, IconSize } from '@noodl-core-ui/components/common/Icon';
|
||||||
import { IconButton, IconButtonState, IconButtonVariant } from '@noodl-core-ui/components/inputs/IconButton';
|
import { IconButton, IconButtonState, IconButtonVariant } from '@noodl-core-ui/components/inputs/IconButton';
|
||||||
import { PrimaryButton, PrimaryButtonSize, PrimaryButtonVariant } from '@noodl-core-ui/components/inputs/PrimaryButton';
|
import { PrimaryButton, PrimaryButtonSize, PrimaryButtonVariant } from '@noodl-core-ui/components/inputs/PrimaryButton';
|
||||||
|
import { DialogRenderDirection } from '@noodl-core-ui/components/layout/BaseDialog';
|
||||||
import { Collapsible } from '@noodl-core-ui/components/layout/Collapsible';
|
import { Collapsible } from '@noodl-core-ui/components/layout/Collapsible';
|
||||||
|
import { Tooltip } from '@noodl-core-ui/components/popups/Tooltip';
|
||||||
import { Label, LabelSpacingSize } from '@noodl-core-ui/components/typography/Label';
|
import { Label, LabelSpacingSize } from '@noodl-core-ui/components/typography/Label';
|
||||||
import { Text, TextType } from '@noodl-core-ui/components/typography/Text';
|
import { Text, TextType } from '@noodl-core-ui/components/typography/Text';
|
||||||
|
|
||||||
@@ -118,12 +121,21 @@ export function CloudServiceCard({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{isEditorEnvironment && (
|
{isEditorEnvironment && (
|
||||||
<PrimaryButton
|
<Tooltip
|
||||||
label="Open dashboard"
|
content="Open the Parse Dashboard"
|
||||||
size={PrimaryButtonSize.Small}
|
fineType={[
|
||||||
onClick={onDashboardClicked}
|
`In Window: ${Keybindings.CLOUD_SERVICE_OPEN_DASHBOARD.label}`,
|
||||||
isGrowing
|
`In Browser: ${Keybindings.CLOUD_SERVICE_OPEN_DASHBOARD_BROWSER.label}`
|
||||||
/>
|
]}
|
||||||
|
renderDirection={DialogRenderDirection.Below}
|
||||||
|
>
|
||||||
|
<PrimaryButton
|
||||||
|
label="Open dashboard"
|
||||||
|
size={PrimaryButtonSize.Small}
|
||||||
|
onClick={onDashboardClicked}
|
||||||
|
isGrowing
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Noodl Viewer</title>
|
<title>Fluxscape Viewer</title>
|
||||||
<link href="../../assets/lib/fontawesome/css/font-awesome.min.css" rel="stylesheet">
|
<link href="../../assets/lib/fontawesome/css/font-awesome.min.css" rel="stylesheet">
|
||||||
<link href="assets/style.css" rel="stylesheet">
|
<link href="assets/style.css" rel="stylesheet">
|
||||||
<script type="text/javascript" src="../../assets/lib/jquery-min.js"></script>
|
<script type="text/javascript" src="../../assets/lib/jquery-min.js"></script>
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ function startServer(app, projectGetSettings, projectGetInfo, projectGetComponen
|
|||||||
ProjectModules.instance.injectIntoHtml(info.projectDirectory, data, '/', function (injected) {
|
ProjectModules.instance.injectIntoHtml(info.projectDirectory, data, '/', function (injected) {
|
||||||
projectGetSettings((settings) => {
|
projectGetSettings((settings) => {
|
||||||
settings = settings || {};
|
settings = settings || {};
|
||||||
injected = injected.replace('{{#title#}}', settings.htmlTitle || 'Noodl Viewer');
|
injected = injected.replace('{{#title#}}', settings.htmlTitle || 'Fluxscape Viewer');
|
||||||
injected = injected.replace('{{#customHeadCode#}}', settings.headCode || '');
|
injected = injected.replace('{{#customHeadCode#}}', settings.headCode || '');
|
||||||
|
|
||||||
response.writeHead(200, {
|
response.writeHead(200, {
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxscape.io>",
|
||||||
"homepage": "https://noodl.net",
|
"homepage": "https://fluxscape.io",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"desktop-trampoline": "https://github.com/desktop/desktop-trampoline/archive/refs/tags/v0.9.8.tar.gz",
|
"desktop-trampoline": "https://github.com/desktop/desktop-trampoline/archive/refs/tags/v0.9.8.tar.gz",
|
||||||
"dugite": "^1.106.0",
|
"dugite": "^1.106.0",
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"description": "Cross platform implementation of platform specific features.",
|
"description": "Cross platform implementation of platform specific features.",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxscape.io>",
|
||||||
"homepage": "https://noodl.net",
|
"homepage": "https://fluxscape.io",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@noodl/platform": "file:../noodl-platform",
|
"@noodl/platform": "file:../noodl-platform",
|
||||||
"@noodl/platform-node": "file:../noodl-platform-node"
|
"@noodl/platform-node": "file:../noodl-platform-node"
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"description": "Cross platform implementation of platform specific features.",
|
"description": "Cross platform implementation of platform specific features.",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxscape.io>",
|
||||||
"homepage": "https://noodl.net",
|
"homepage": "https://fluxscape.io",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"test:coverage": "jest --coverage"
|
"test:coverage": "jest --coverage"
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"description": "Cross platform implementation of platform specific features.",
|
"description": "Cross platform implementation of platform specific features.",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxscape.io>",
|
||||||
"homepage": "https://noodl.net"
|
"homepage": "https://fluxscape.io"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,12 +75,12 @@ var SetDbModelPropertiedNodeDefinition = {
|
|||||||
_this.setError('Missing Record Id');
|
_this.setError('Missing Record Id');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var model = internal.model;
|
|
||||||
|
const model = internal.model;
|
||||||
for (var i in internal.inputValues) {
|
for (const key in internal.inputValues) {
|
||||||
model.set(i, internal.inputValues[i], { resolve: true });
|
model.set(key, internal.inputValues[key], { resolve: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
CloudStore.forScope(_this.nodeScope.modelScope).save({
|
CloudStore.forScope(_this.nodeScope.modelScope).save({
|
||||||
collection: internal.collectionId,
|
collection: internal.collectionId,
|
||||||
objectId: model.getId(), // Get the objectId part of the model id
|
objectId: model.getId(), // Get the objectId part of the model id
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ const DateToStringNode = {
|
|||||||
const month = ('0' + (t.getMonth() + 1)).slice(-2);
|
const month = ('0' + (t.getMonth() + 1)).slice(-2);
|
||||||
const monthShort = new Intl.DateTimeFormat('en-US', { month: 'short' }).format(t);
|
const monthShort = new Intl.DateTimeFormat('en-US', { month: 'short' }).format(t);
|
||||||
const year = t.getFullYear();
|
const year = t.getFullYear();
|
||||||
|
const yearShort = year.toString().substring(2);
|
||||||
const hours = ('0' + t.getHours()).slice(-2);
|
const hours = ('0' + t.getHours()).slice(-2);
|
||||||
const minutes = ('0' + t.getMinutes()).slice(-2);
|
const minutes = ('0' + t.getMinutes()).slice(-2);
|
||||||
const seconds = ('0' + t.getSeconds()).slice(-2);
|
const seconds = ('0' + t.getSeconds()).slice(-2);
|
||||||
@@ -68,6 +69,7 @@ const DateToStringNode = {
|
|||||||
.replace(/\{month\}/g, month)
|
.replace(/\{month\}/g, month)
|
||||||
.replace(/\{monthShort\}/g, monthShort)
|
.replace(/\{monthShort\}/g, monthShort)
|
||||||
.replace(/\{year\}/g, year)
|
.replace(/\{year\}/g, year)
|
||||||
|
.replace(/\{yearShort\}/g, yearShort)
|
||||||
.replace(/\{hours\}/g, hours)
|
.replace(/\{hours\}/g, hours)
|
||||||
.replace(/\{minutes\}/g, minutes)
|
.replace(/\{minutes\}/g, minutes)
|
||||||
.replace(/\{seconds\}/g, seconds);
|
.replace(/\{seconds\}/g, seconds);
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"main": "src/index.d.ts",
|
"main": "src/index.d.ts",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxscape.io>",
|
||||||
"homepage": "https://noodl.net"
|
"homepage": "https://fluxscape.io"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@noodl/cloud-runtime",
|
"name": "@noodl/cloud-runtime",
|
||||||
"author": "Noodl <info@noodl.net>",
|
"author": "Fluxscape <contact@fluxscape.io>",
|
||||||
"homepage": "https://noodl.net",
|
"homepage": "https://fluxscape.io",
|
||||||
"version": "0.6.3",
|
"version": "0.6.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "dist/main.js",
|
"main": "dist/main.js",
|
||||||
|
|||||||
@@ -74,6 +74,59 @@ declare namespace Noodl {
|
|||||||
*/
|
*/
|
||||||
const Object: any;
|
const Object: any;
|
||||||
|
|
||||||
|
type RecordQuery<T> =
|
||||||
|
{
|
||||||
|
lessThan: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
lessThanOrEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
greaterThan: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
greaterThanOrEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
equalTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
notEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
containedIn: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
notContainedIn : T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
exists: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
matchesRegex: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
text: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
idEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
idContainedIn: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
pointsTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
relatedTo: T
|
||||||
|
};
|
||||||
|
|
||||||
|
type RecordQueryField<T> = T extends RecordQuery<any> ?
|
||||||
|
{ [K in keyof T]: { [P in K]: T[P] } & Partial<Record<Exclude<keyof T, K>, never>> }[keyof T]
|
||||||
|
: never;
|
||||||
|
|
||||||
|
type RecordSortKey<T extends string> = (`${T}` | `-${T}`)[];
|
||||||
|
|
||||||
interface RecordsApi {
|
interface RecordsApi {
|
||||||
/**
|
/**
|
||||||
* This is an async function that will query the database using the query
|
* This is an async function that will query the database using the query
|
||||||
@@ -115,15 +168,17 @@ declare namespace Noodl {
|
|||||||
* })
|
* })
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
query(
|
query<TClassName extends RecordClassName>(
|
||||||
className: RecordClassName,
|
className: TClassName,
|
||||||
query?: any,
|
query?:
|
||||||
|
RecordQueryField<{ [K in keyof DatabaseSchema[TClassName]]: RecordQuery<any> }> |
|
||||||
|
{ and: RecordQueryField<{ [K in keyof DatabaseSchema[TClassName]]: RecordQuery<any> }>[] },
|
||||||
options?: {
|
options?: {
|
||||||
limit?: number;
|
limit?: number;
|
||||||
skip?: number;
|
skip?: number;
|
||||||
sort?: string[];
|
sort?: string | RecordSortKey<keyof DatabaseSchema[TClassName]>;
|
||||||
include?: any;
|
include?: string | (keyof DatabaseSchema[TClassName])[];
|
||||||
select?: any;
|
select?: string | (keyof DatabaseSchema[TClassName])[];
|
||||||
}
|
}
|
||||||
): Promise<any>;
|
): Promise<any>;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export default {
|
|||||||
group: 'General',
|
group: 'General',
|
||||||
plug: 'input',
|
plug: 'input',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
default: 'Noodl Viewer',
|
default: 'Fluxscape Viewer',
|
||||||
tooltip: 'The title that web browsers show',
|
tooltip: 'The title that web browsers show',
|
||||||
ignoreInExport: true
|
ignoreInExport: true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -131,6 +131,59 @@ declare namespace Noodl {
|
|||||||
*/
|
*/
|
||||||
const Events: EventsApi;
|
const Events: EventsApi;
|
||||||
|
|
||||||
|
type RecordQuery<T> =
|
||||||
|
{
|
||||||
|
lessThan: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
lessThanOrEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
greaterThan: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
greaterThanOrEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
equalTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
notEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
containedIn: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
notContainedIn : T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
exists: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
matchesRegex: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
text: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
idEqualTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
idContainedIn: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
pointsTo: T
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
relatedTo: T
|
||||||
|
};
|
||||||
|
|
||||||
|
type RecordQueryField<T> = T extends RecordQuery<any> ?
|
||||||
|
{ [K in keyof T]: { [P in K]: T[P] } & Partial<Record<Exclude<keyof T, K>, never>> }[keyof T]
|
||||||
|
: never;
|
||||||
|
|
||||||
|
type RecordSortKey<T extends string> = (`${T}` | `-${T}`)[];
|
||||||
|
|
||||||
interface RecordsApi {
|
interface RecordsApi {
|
||||||
/**
|
/**
|
||||||
* This is an async function that will query the database using the query
|
* This is an async function that will query the database using the query
|
||||||
@@ -172,15 +225,17 @@ declare namespace Noodl {
|
|||||||
* })
|
* })
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
query(
|
query<TClassName extends RecordClassName>(
|
||||||
className: RecordClassName,
|
className: TClassName,
|
||||||
query?: any,
|
query?:
|
||||||
|
RecordQueryField<{ [K in keyof DatabaseSchema[TClassName]]: RecordQuery<any> }> |
|
||||||
|
{ and: RecordQueryField<{ [K in keyof DatabaseSchema[TClassName]]: RecordQuery<any> }>[] },
|
||||||
options?: {
|
options?: {
|
||||||
limit?: number;
|
limit?: number;
|
||||||
skip?: number;
|
skip?: number;
|
||||||
sort?: string[];
|
sort?: string | RecordSortKey<keyof DatabaseSchema[TClassName]>;
|
||||||
include?: any;
|
include?: string | (keyof DatabaseSchema[TClassName])[];
|
||||||
select?: any;
|
select?: string | (keyof DatabaseSchema[TClassName])[];
|
||||||
}
|
}
|
||||||
): Promise<any>;
|
): Promise<any>;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user