@antelopejs/dms 0.5.0 → 0.5.1
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/CHANGELOG.md +17 -0
- package/dist/pages/settings/users/member-invite-form.d.ts +5 -0
- package/dist/pages/settings/users/member-invite-form.js +11 -2
- package/dist/pages/settings/users/member-invite-form.js.map +1 -1
- package/dist/pages/settings/users/members.d.ts +2 -0
- package/dist/pages/settings/users/members.js +11 -0
- package/dist/pages/settings/users/members.js.map +1 -1
- package/dist/test/reload-host/package.json +1 -1
- package/dist/test/unit/pages/settings/invite-availability.test.d.ts +1 -0
- package/dist/test/unit/pages/settings/invite-availability.test.js +112 -0
- package/dist/test/unit/pages/settings/invite-availability.test.js.map +1 -0
- package/frontend-vue/layers/dms-ui/app/build/components/table/Actions.vue +18 -8
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViewRowActions.ts +12 -0
- package/frontend-vue/layers/dms-ui/app/composables/table-view/types/custom-button.ts +4 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.5.1
|
|
4
|
+
|
|
5
|
+
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.5.0...v0.5.1)
|
|
6
|
+
|
|
7
|
+
### 🚀 Enhancements
|
|
8
|
+
|
|
9
|
+
- **members:** Let a module disable the invite action with a reason ([#96](https://github.com/AntelopeJS/dms/pull/96))
|
|
10
|
+
|
|
11
|
+
### 🏡 Chore
|
|
12
|
+
|
|
13
|
+
- **lint:** Check @antelopejs/interface-* ranges ([#95](https://github.com/AntelopeJS/dms/pull/95))
|
|
14
|
+
- **release:** @antelopejs/interface-dms v0.3.2 ([d186a97](https://github.com/AntelopeJS/dms/commit/d186a97))
|
|
15
|
+
|
|
16
|
+
### ❤️ Contributors
|
|
17
|
+
|
|
18
|
+
- Antony Rizzitelli <rizzitelli.antony@pm.me>
|
|
19
|
+
|
|
3
20
|
## v0.5.0
|
|
4
21
|
|
|
5
22
|
[compare changes](https://github.com/AntelopeJS/dms/compare/v0.4.8...v0.5.0)
|
|
@@ -2,4 +2,9 @@ export declare const inviteLanguageSelectItems: {
|
|
|
2
2
|
value: string;
|
|
3
3
|
label: string;
|
|
4
4
|
}[];
|
|
5
|
+
export declare const INVITE_DEFAULTS_URL = "/settings/user/members/invite/defaults";
|
|
6
|
+
export interface InviteFormDefaults {
|
|
7
|
+
language: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveInviteLanguage(language: string | undefined): string;
|
|
5
10
|
export declare const memberInviteForm: import("@antelopejs/interface-dms/base").FormBuilder;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.memberInviteForm = exports.inviteLanguageSelectItems = void 0;
|
|
3
|
+
exports.memberInviteForm = exports.INVITE_DEFAULTS_URL = exports.inviteLanguageSelectItems = void 0;
|
|
4
|
+
exports.resolveInviteLanguage = resolveInviteLanguage;
|
|
4
5
|
const roles_1 = require("@antelopejs/interface-dms/data-controllers/roles");
|
|
5
6
|
const invite_extensions_1 = require("@antelopejs/interface-dms/invite-extensions");
|
|
6
7
|
const base_1 = require("@antelopejs/interface-dms/base");
|
|
@@ -10,6 +11,13 @@ exports.inviteLanguageSelectItems = [
|
|
|
10
11
|
{ value: "en", label: "English" },
|
|
11
12
|
{ value: "fr", label: "Français" },
|
|
12
13
|
];
|
|
14
|
+
const DEFAULT_INVITE_LANGUAGE = "en";
|
|
15
|
+
exports.INVITE_DEFAULTS_URL = "/settings/user/members/invite/defaults";
|
|
16
|
+
function resolveInviteLanguage(language) {
|
|
17
|
+
const code = language?.slice(0, 2);
|
|
18
|
+
const isOffered = exports.inviteLanguageSelectItems.some((item) => item.value === code);
|
|
19
|
+
return code && isOffered ? code : DEFAULT_INVITE_LANGUAGE;
|
|
20
|
+
}
|
|
13
21
|
function nameRequirementWatch(targetField, setRequired) {
|
|
14
22
|
return {
|
|
15
23
|
params: { targetField, setRequired },
|
|
@@ -71,7 +79,7 @@ exports.memberInviteForm = (0, base_1.Form)({
|
|
|
71
79
|
items: exports.inviteLanguageSelectItems,
|
|
72
80
|
}),
|
|
73
81
|
required: true,
|
|
74
|
-
defaultValue:
|
|
82
|
+
defaultValue: DEFAULT_INVITE_LANGUAGE,
|
|
75
83
|
},
|
|
76
84
|
{
|
|
77
85
|
id: "asTenantOwner",
|
|
@@ -92,6 +100,7 @@ exports.memberInviteForm = (0, base_1.Form)({
|
|
|
92
100
|
],
|
|
93
101
|
fieldsOrientation: "vertical",
|
|
94
102
|
slotId: invite_extensions_1.INVITE_FORM_SLOT_ID,
|
|
103
|
+
fetchUrl: exports.INVITE_DEFAULTS_URL,
|
|
95
104
|
submitUrl: "/settings/user/members/invite",
|
|
96
105
|
submitUrlMethod: base_1.HttpMethod.post,
|
|
97
106
|
submitLabel: "$page.settings.members.invite.submit",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-invite-form.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/member-invite-form.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"member-invite-form.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/member-invite-form.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { type RequestContext } from "@antelopejs/interface-api";
|
|
|
2
2
|
import type { Action } from "@antelopejs/interface-dms/component";
|
|
3
3
|
import { type TenantMember } from "@antelopejs/interface-dms/db";
|
|
4
4
|
import { type User, UserModel } from "@antelopejs/interface-dms/auth/db";
|
|
5
|
+
import { type InviteFormDefaults } from "./member-invite-form";
|
|
5
6
|
export declare const INVITES_PAGE_PATH = "/settings/user/members/invites";
|
|
6
7
|
export declare const MEMBER_INVITE_BUTTON_ID = "invite";
|
|
7
8
|
export declare function assertNotLastPlatformOwnerOnDelete(targets: TenantMember[]): Promise<void>;
|
|
@@ -14,6 +15,7 @@ declare const MembersSettingsController_base: {
|
|
|
14
15
|
};
|
|
15
16
|
export declare class MembersSettingsController extends MembersSettingsController_base {
|
|
16
17
|
static table: import("@antelopejs/interface-dms").ComponentBuilder<import("@antelopejs/interface-dms/base").TableViewOptionsSerialized>;
|
|
18
|
+
inviteDefaults(user: User): InviteFormDefaults;
|
|
17
19
|
invite(ctx: RequestContext, user: User, userModel: UserModel, body: unknown): Promise<{
|
|
18
20
|
redirectPath: string;
|
|
19
21
|
}>;
|
|
@@ -112,6 +112,7 @@ exports.membersTable = (0, base_1.TableView)(data_controllers_1.memberSettingDat
|
|
|
112
112
|
icon: "i-ph-user-plus",
|
|
113
113
|
color: "primary",
|
|
114
114
|
permission: "add",
|
|
115
|
+
availability: invite_extensions_1.internal.ResolveInviteAvailability,
|
|
115
116
|
target: {
|
|
116
117
|
type: "modal",
|
|
117
118
|
size: "lg",
|
|
@@ -170,6 +171,9 @@ let MembersSettingsController = class MembersSettingsController extends (0, page
|
|
|
170
171
|
description: "$page.settings.description.members",
|
|
171
172
|
}) {
|
|
172
173
|
static table = exports.membersTable;
|
|
174
|
+
inviteDefaults(user) {
|
|
175
|
+
return { language: (0, member_invite_form_1.resolveInviteLanguage)(user.language) };
|
|
176
|
+
}
|
|
173
177
|
async invite(ctx, user, userModel, body) {
|
|
174
178
|
const tenantId = (0, request_tenant_1.getRequestTenantId)(ctx);
|
|
175
179
|
const { email, firstname, lastname, roles, language, asTenantOwner, skipEmailValidation, } = (0, interface_api_util_1.assertValidation)(body, (v) => member_invite_schema_1.memberInviteSchema.parse(v));
|
|
@@ -210,6 +214,13 @@ let MembersSettingsController = class MembersSettingsController extends (0, page
|
|
|
210
214
|
}
|
|
211
215
|
};
|
|
212
216
|
exports.MembersSettingsController = MembersSettingsController;
|
|
217
|
+
__decorate([
|
|
218
|
+
(0, interface_api_1.Get)("/invite/defaults"),
|
|
219
|
+
__param(0, (0, guards_1.AuthUserWithPermission)(exports.membersTableAddAction)),
|
|
220
|
+
__metadata("design:type", Function),
|
|
221
|
+
__metadata("design:paramtypes", [Function]),
|
|
222
|
+
__metadata("design:returntype", Object)
|
|
223
|
+
], MembersSettingsController.prototype, "inviteDefaults", null);
|
|
213
224
|
__decorate([
|
|
214
225
|
(0, interface_api_1.Post)("/invite"),
|
|
215
226
|
__param(0, (0, interface_api_1.Context)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/members.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../../../src/pages/settings/users/members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
37
|
+
const chai_1 = require("chai");
|
|
38
|
+
const invite_extensions_1 = require("@antelopejs/interface-dms/invite-extensions");
|
|
39
|
+
const page_1 = require("@antelopejs/interface-dms/page");
|
|
40
|
+
const permissionsInterface = __importStar(require("@antelopejs/interface-dms/permissions"));
|
|
41
|
+
const permissionsResolverInterface = __importStar(require("@antelopejs/interface-dms/permissions-resolver"));
|
|
42
|
+
const tenantAccessInterface = __importStar(require("@antelopejs/interface-dms/tenant-access"));
|
|
43
|
+
const page_2 = require("../../../../implementations/dms/page");
|
|
44
|
+
const permissionsImpl = __importStar(require("../../../../implementations/dms/permissions"));
|
|
45
|
+
const permissionsResolverImpl = __importStar(require("../../../../implementations/dms/permissions-resolver"));
|
|
46
|
+
const tenantAccessImpl = __importStar(require("../../../../implementations/dms/tenant-access"));
|
|
47
|
+
const member_invite_form_1 = require("../../../../pages/settings/users/member-invite-form");
|
|
48
|
+
const members_1 = require("../../../../pages/settings/users/members");
|
|
49
|
+
const page_access_1 = require("../../../helpers/page-access");
|
|
50
|
+
const FULL_TENANT = "invite-availability-full-tenant";
|
|
51
|
+
const OPEN_TENANT = "invite-availability-open-tenant";
|
|
52
|
+
const SEAT_LIMIT_REASON = "$test.seat_limit_reached";
|
|
53
|
+
const INVITER = { _id: "invite-availability-inviter" };
|
|
54
|
+
function membersPageSlug() {
|
|
55
|
+
const pageInfo = (0, interface_core_1.GetMetadata)(members_1.MembersSettingsController, page_1.PageMetadata).pageInfo;
|
|
56
|
+
if (!pageInfo)
|
|
57
|
+
throw new Error("The members page is not registered");
|
|
58
|
+
return pageInfo.fullSlug;
|
|
59
|
+
}
|
|
60
|
+
async function inviteButtonFor(tenantId) {
|
|
61
|
+
const handler = (0, page_1.GetPageLayoutBySlug)(membersPageSlug());
|
|
62
|
+
if (!handler)
|
|
63
|
+
throw new Error("The members page serves no layout");
|
|
64
|
+
const { memberModel, roleModel } = (0, page_access_1.stubPageAccessModels)(["*"]);
|
|
65
|
+
const layout = await handler(INVITER, memberModel, roleModel, tenantId);
|
|
66
|
+
const table = layout.components
|
|
67
|
+
.table;
|
|
68
|
+
return table.options?.customButtons?.find((button) => button.id === members_1.MEMBER_INVITE_BUTTON_ID);
|
|
69
|
+
}
|
|
70
|
+
describe("[unit] pages/settings/users/members — invite availability", () => {
|
|
71
|
+
const cleanups = [];
|
|
72
|
+
before(() => {
|
|
73
|
+
(0, interface_core_1.ImplementInterface)(permissionsInterface, permissionsImpl);
|
|
74
|
+
(0, interface_core_1.ImplementInterface)(permissionsResolverInterface, permissionsResolverImpl);
|
|
75
|
+
(0, interface_core_1.ImplementInterface)(tenantAccessInterface, tenantAccessImpl);
|
|
76
|
+
(0, interface_core_1.ImplementInterface)(page_1.internal, page_2.internal);
|
|
77
|
+
});
|
|
78
|
+
afterEach(() => {
|
|
79
|
+
cleanups.splice(0).forEach((cleanup) => cleanup());
|
|
80
|
+
});
|
|
81
|
+
it("serves the invite button enabled while no module refuses", async () => {
|
|
82
|
+
const button = await inviteButtonFor(OPEN_TENANT);
|
|
83
|
+
(0, chai_1.expect)(button).to.exist;
|
|
84
|
+
(0, chai_1.expect)(button?.disabled).to.equal(undefined);
|
|
85
|
+
(0, chai_1.expect)(button).to.not.have.property("availability");
|
|
86
|
+
});
|
|
87
|
+
it("disables the invite button with the reason a module gives", async () => {
|
|
88
|
+
cleanups.push((0, invite_extensions_1.RegisterInviteAvailability)(({ tenantId }) => tenantId === FULL_TENANT ? { reason: SEAT_LIMIT_REASON } : undefined));
|
|
89
|
+
(0, chai_1.expect)(await inviteButtonFor(FULL_TENANT)).to.deep.include({
|
|
90
|
+
disabled: true,
|
|
91
|
+
disabledReason: SEAT_LIMIT_REASON,
|
|
92
|
+
});
|
|
93
|
+
(0, chai_1.expect)((await inviteButtonFor(OPEN_TENANT))?.disabled).to.equal(undefined);
|
|
94
|
+
});
|
|
95
|
+
it("leaves the invite button enabled when a resolver throws", async () => {
|
|
96
|
+
cleanups.push((0, invite_extensions_1.RegisterInviteAvailability)(() => {
|
|
97
|
+
throw new Error("resolver failure");
|
|
98
|
+
}));
|
|
99
|
+
(0, chai_1.expect)((await inviteButtonFor(FULL_TENANT))?.disabled).to.equal(undefined);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
describe("[unit] pages/settings/users/member-invite-form — invitation language", () => {
|
|
103
|
+
it("defaults to the inviter's own language", () => {
|
|
104
|
+
(0, chai_1.expect)((0, member_invite_form_1.resolveInviteLanguage)("fr")).to.equal("fr");
|
|
105
|
+
(0, chai_1.expect)((0, member_invite_form_1.resolveInviteLanguage)("fr-FR")).to.equal("fr");
|
|
106
|
+
});
|
|
107
|
+
it("falls back to English for a language invitations are not offered in", () => {
|
|
108
|
+
(0, chai_1.expect)((0, member_invite_form_1.resolveInviteLanguage)("de")).to.equal("en");
|
|
109
|
+
(0, chai_1.expect)((0, member_invite_form_1.resolveInviteLanguage)(undefined)).to.equal("en");
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=invite-availability.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invite-availability.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/pages/settings/invite-availability.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -244,15 +244,25 @@ const uiTableActions = computed(() => uiTableActionsVariant());
|
|
|
244
244
|
@click="tableSharedData!.emits('add')"
|
|
245
245
|
/>
|
|
246
246
|
|
|
247
|
-
|
|
247
|
+
<!-- A disabled button fires no pointer event: the tooltip hangs on a
|
|
248
|
+
wrapper, focusable so the reason also reaches keyboard users. -->
|
|
249
|
+
<UTooltip
|
|
248
250
|
v-for="(button, index) in customButtons"
|
|
249
251
|
:key="`custom-btn-${index}`"
|
|
250
|
-
:
|
|
251
|
-
:
|
|
252
|
-
|
|
253
|
-
:
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
252
|
+
:text="button.disabledReason && processI18n(button.disabledReason)"
|
|
253
|
+
:disabled="!button.disabled || !button.disabledReason"
|
|
254
|
+
>
|
|
255
|
+
<span :tabindex="button.disabled ? 0 : undefined" class="inline-flex">
|
|
256
|
+
<UButton
|
|
257
|
+
:label="processI18n(button.label)"
|
|
258
|
+
:icon="button.icon"
|
|
259
|
+
:variant="button.variant"
|
|
260
|
+
:color="button.color"
|
|
261
|
+
:disabled="button.disabled"
|
|
262
|
+
size="sm"
|
|
263
|
+
@click="props.onCustomButton?.(button)"
|
|
264
|
+
/>
|
|
265
|
+
</span>
|
|
266
|
+
</UTooltip>
|
|
257
267
|
</div>
|
|
258
268
|
</template>
|
package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViewRowActions.ts
CHANGED
|
@@ -795,7 +795,19 @@ export const useTableRowActions = <T extends Data>(
|
|
|
795
795
|
}
|
|
796
796
|
};
|
|
797
797
|
|
|
798
|
+
// Reached for a disabled button only through a quick action, which presses
|
|
799
|
+
// it by id: the reason is told instead of the target being opened.
|
|
798
800
|
const handleCustomButton = (button: CustomButton) => {
|
|
801
|
+
if (button.disabled) {
|
|
802
|
+
toast.add({
|
|
803
|
+
color: Color.warning,
|
|
804
|
+
title: processI18n(button.label),
|
|
805
|
+
description: button.disabledReason
|
|
806
|
+
? processI18n(button.disabledReason)
|
|
807
|
+
: undefined,
|
|
808
|
+
});
|
|
809
|
+
return;
|
|
810
|
+
}
|
|
799
811
|
handleActionTarget(button.target, button.label);
|
|
800
812
|
};
|
|
801
813
|
|
|
@@ -10,4 +10,8 @@ export interface CustomButton {
|
|
|
10
10
|
variant?: CustomButtonVariant;
|
|
11
11
|
color?: ColorValue;
|
|
12
12
|
target: ActionTarget;
|
|
13
|
+
/** Set by the server when the button cannot be pressed for this request. */
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
/** Why the button is disabled, shown in its tooltip. May be an i18n key. */
|
|
16
|
+
disabledReason?: string;
|
|
13
17
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/dms",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/AntelopeJS/dms.git"
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@antelopejs/interface-data-api": ">=0.1.9 <1.0.0",
|
|
37
37
|
"@antelopejs/interface-database": ">=0.1.8 <1.0.0",
|
|
38
38
|
"@antelopejs/interface-database-decorators": ">=0.1.7 <1.0.0",
|
|
39
|
-
"@antelopejs/interface-dms": ">=0.3.
|
|
39
|
+
"@antelopejs/interface-dms": ">=0.3.2 <0.4.0",
|
|
40
40
|
"@antelopejs/interface-email": ">=0.0.5 <1.0.0",
|
|
41
41
|
"@antelopejs/interface-file-storage": ">=0.1.3 <1.0.0",
|
|
42
42
|
"archiver": "^7.0.1",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@antelopejs/core": ">=1.10.1 <2",
|
|
56
|
-
"@antelopejs/tooling-configs": ">=0.0.
|
|
56
|
+
"@antelopejs/tooling-configs": ">=0.0.7 <1.0.0",
|
|
57
57
|
"@types/archiver": "^6.0.4",
|
|
58
58
|
"@types/chai": "^4.3.20",
|
|
59
59
|
"@types/jsonwebtoken": "^9.0.10",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"dev": "ajs project run --inspect -w -p playground",
|
|
108
108
|
"frontend:dev": "pnpm --dir playground frontend:dev",
|
|
109
109
|
"lint:fix": "oxlint --fix --max-warnings=1000000 && oxfmt . && pnpm --dir frontend-vue lint:fix",
|
|
110
|
-
"lint": "oxlint && oxfmt --check . && pnpm --dir frontend-vue lint",
|
|
110
|
+
"lint": "oxlint && oxfmt --check . && pnpm --dir frontend-vue lint && antelopejs-check-interface-ranges",
|
|
111
111
|
"typecheck": "pnpm --filter @antelopejs/interface-dms build && tsc --noEmit",
|
|
112
112
|
"test": "pnpm run build && ajs module test .",
|
|
113
113
|
"test:unit": "pnpm run build && DMS_TEST_DIR=dist/test/unit ajs module test .",
|