zenstack 0.6.0-pre.9 → 1.0.0-alpha.20
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/cli/cli-error.d.ts +5 -0
- package/cli/cli-error.js +12 -0
- package/cli/cli-error.js.map +1 -0
- package/cli/cli-util.d.ts +18 -0
- package/cli/cli-util.js +122 -0
- package/cli/cli-util.js.map +1 -0
- package/cli/index.d.ts +14 -0
- package/cli/index.js +72 -6529
- package/cli/index.js.map +1 -0
- package/cli/plugin-runner.d.ts +14 -0
- package/cli/plugin-runner.js +138 -0
- package/cli/plugin-runner.js.map +1 -0
- package/global.d.js +1 -0
- package/global.d.js.map +1 -0
- package/language-server/constants.d.ts +12 -0
- package/language-server/constants.js +24 -0
- package/language-server/constants.js.map +1 -0
- package/language-server/main.d.ts +1 -0
- package/language-server/main.js +20 -6436
- package/language-server/main.js.map +1 -0
- package/language-server/types.d.ts +10 -0
- package/language-server/types.js +1 -0
- package/language-server/types.js.map +1 -0
- package/language-server/utils.d.ts +10 -0
- package/language-server/utils.js +28 -0
- package/language-server/utils.js.map +1 -0
- package/language-server/validator/attribute-validator.d.ts +9 -0
- package/language-server/validator/attribute-validator.js +15 -0
- package/language-server/validator/attribute-validator.js.map +1 -0
- package/language-server/validator/datamodel-validator.d.ts +16 -0
- package/language-server/validator/datamodel-validator.js +365 -0
- package/language-server/validator/datamodel-validator.js.map +1 -0
- package/language-server/validator/datasource-validator.d.ts +13 -0
- package/language-server/validator/datasource-validator.js +85 -0
- package/language-server/validator/datasource-validator.js.map +1 -0
- package/language-server/validator/enum-validator.d.ts +9 -0
- package/language-server/validator/enum-validator.js +18 -0
- package/language-server/validator/enum-validator.js.map +1 -0
- package/language-server/validator/expression-validator.d.ts +11 -0
- package/language-server/validator/expression-validator.js +40 -0
- package/language-server/validator/expression-validator.js.map +1 -0
- package/language-server/validator/schema-validator.d.ts +10 -0
- package/language-server/validator/schema-validator.js +35 -0
- package/language-server/validator/schema-validator.js.map +1 -0
- package/language-server/validator/utils.d.ts +24 -0
- package/language-server/validator/utils.js +116 -0
- package/language-server/validator/utils.js.map +1 -0
- package/language-server/validator/zmodel-validator.d.ts +21 -0
- package/language-server/validator/zmodel-validator.js +72 -0
- package/language-server/validator/zmodel-validator.js.map +1 -0
- package/language-server/zmodel-linker.d.ts +29 -0
- package/language-server/zmodel-linker.js +364 -0
- package/language-server/zmodel-linker.js.map +1 -0
- package/language-server/zmodel-module.d.ts +41 -0
- package/language-server/zmodel-module.js +83 -0
- package/language-server/zmodel-module.js.map +1 -0
- package/language-server/zmodel-scope.d.ts +10 -0
- package/language-server/zmodel-scope.js +34 -0
- package/language-server/zmodel-scope.js.map +1 -0
- package/language-server/zmodel-workspace-manager.d.ts +8 -0
- package/language-server/zmodel-workspace-manager.js +25 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -0
- package/package.json +24 -18
- package/plugins/access-policy/expression-writer.d.ts +38 -0
- package/plugins/access-policy/expression-writer.js +323 -0
- package/plugins/access-policy/expression-writer.js.map +1 -0
- package/plugins/access-policy/index.d.ts +4 -0
- package/plugins/access-policy/index.js +15 -0
- package/plugins/access-policy/index.js.map +1 -0
- package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
- package/plugins/access-policy/policy-guard-generator.js +345 -0
- package/plugins/access-policy/policy-guard-generator.js.map +1 -0
- package/plugins/access-policy/typescript-expression-transformer.d.ts +26 -0
- package/plugins/access-policy/typescript-expression-transformer.js +110 -0
- package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
- package/plugins/access-policy/utils.d.ts +5 -0
- package/plugins/access-policy/utils.js +16 -0
- package/plugins/access-policy/utils.js.map +1 -0
- package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
- package/plugins/access-policy/zod-schema-generator.js +174 -0
- package/plugins/access-policy/zod-schema-generator.js.map +1 -0
- package/plugins/model-meta/index.d.ts +4 -0
- package/plugins/model-meta/index.js +130 -0
- package/plugins/model-meta/index.js.map +1 -0
- package/plugins/plugin-utils.d.ts +16 -0
- package/plugins/plugin-utils.js +58 -0
- package/plugins/plugin-utils.js.map +1 -0
- package/plugins/prisma/indent-string.d.ts +4 -0
- package/plugins/prisma/indent-string.js +16 -0
- package/plugins/prisma/indent-string.js.map +1 -0
- package/plugins/prisma/index.d.ts +4 -0
- package/plugins/prisma/index.js +15 -3740
- package/plugins/prisma/index.js.map +1 -0
- package/plugins/prisma/prisma-builder.d.ts +130 -0
- package/plugins/prisma/prisma-builder.js +271 -0
- package/plugins/prisma/prisma-builder.js.map +1 -0
- package/plugins/prisma/schema-generator.d.ts +24 -0
- package/plugins/prisma/schema-generator.js +212 -0
- package/plugins/prisma/schema-generator.js.map +1 -0
- package/plugins/prisma/zmodel-code-generator.d.ts +27 -0
- package/plugins/prisma/zmodel-code-generator.js +110 -0
- package/plugins/prisma/zmodel-code-generator.js.map +1 -0
- package/res/prism-zmodel.js +2 -4
- package/res/starter.zmodel +47 -0
- package/res/stdlib.zmodel +12 -1
- package/telemetry.d.ts +21 -0
- package/telemetry.js +102 -0
- package/telemetry.js.map +1 -0
- package/types.d.ts +11 -0
- package/types.js +1 -0
- package/types.js.map +1 -0
- package/utils/ast-utils.d.ts +15 -0
- package/utils/ast-utils.js +79 -0
- package/utils/ast-utils.js.map +1 -0
- package/utils/exec-utils.d.ts +6 -0
- package/utils/exec-utils.js +22 -0
- package/utils/exec-utils.js.map +1 -0
- package/utils/pkg-utils.d.ts +3 -0
- package/utils/pkg-utils.js +43 -0
- package/utils/pkg-utils.js.map +1 -0
- package/utils/version-utils.d.ts +1 -0
- package/utils/version-utils.js +15 -0
- package/utils/version-utils.js.map +1 -0
- package/asset/logo-256-bg.png +0 -0
- package/asset/logo-dark-256.png +0 -0
- package/asset/logo-light-256.png +0 -0
- package/extension.js +0 -39
- package/plugins/policy-guard/index.js +0 -4289
- package/plugins/react-hooks/index.js +0 -4318
- package/plugins/trpc/index.js +0 -5386
- package/plugins/zod/index.js +0 -4808
- package/res/package.template.json +0 -9
- package/res/tsconfig.template.json +0 -17
package/telemetry.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","names":["Telemetry","hostId","machineIdSync","sessionid","cuid","trackingToken","_os","os","platform","version","getVersion","exitWait","constructor","mixpanel","init","geolocate","exitHook","callback","sleep","errorHandler","err","track","message","stack","CliError","CommanderError","console","error","process","exit","unhandledRejectionHandler","uncaughtExceptionHandler","event","properties","payload","distinct_id","session","time","Date","$os","nodeVersion","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","Promise","resolve","duration"],"sources":["../src/telemetry.ts"],"sourcesContent":["import exitHook from 'async-exit-hook';\nimport { CommanderError } from 'commander';\nimport cuid from 'cuid';\nimport { init, Mixpanel } from 'mixpanel';\nimport { machineIdSync } from 'node-machine-id';\nimport * as os from 'os';\nimport sleep from 'sleep-promise';\nimport { CliError } from './cli/cli-error';\nimport { getVersion } from './utils/version-utils';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = machineIdSync();\n private readonly sessionid = cuid();\n private readonly trackingToken = process.env.TELEMETRY_TRACKING_TOKEN;\n private readonly _os = os.platform();\n private readonly version = getVersion();\n private exitWait = 200;\n\n constructor() {\n if (process.env.DO_NOT_TRACK !== '1' && this.trackingToken) {\n this.mixpanel = init(this.trackingToken, {\n geolocate: true,\n });\n }\n\n exitHook(async (callback) => {\n if (this.mixpanel) {\n // a small delay to ensure telemetry is sent\n await sleep(this.exitWait);\n }\n callback();\n });\n\n const errorHandler = async (err: Error) => {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n if (this.mixpanel) {\n // a small delay to ensure telemetry is sent\n await sleep(this.exitWait);\n }\n\n if (err instanceof CliError || err instanceof CommanderError) {\n // error already logged\n } else {\n console.error('\\nAn unexpected error occurred:\\n', err);\n }\n\n process.exit(1);\n };\n\n exitHook.unhandledRejectionHandler(errorHandler);\n exitHook.uncaughtExceptionHandler(errorHandler);\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os,\n nodeVersion: process.version,\n version: this.version,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n async trackSpan(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<unknown> | void\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n await Promise.resolve(action());\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n}\n\nexport default new Telemetry();\n"],"mappings":"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"}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Model } from '@zenstackhq/language/ast';
|
|
2
|
+
export interface Context {
|
|
3
|
+
schema: Model;
|
|
4
|
+
outDir: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Generator {
|
|
7
|
+
get name(): string;
|
|
8
|
+
get startMessage(): string;
|
|
9
|
+
get successMessage(): string;
|
|
10
|
+
generate(context: Context): Promise<string[]>;
|
|
11
|
+
}
|
package/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import { Model } from '@zenstackhq/language/ast';\n\nexport interface Context {\n schema: Model;\n outDir: string;\n}\n\nexport interface Generator {\n get name(): string;\n get startMessage(): string;\n get successMessage(): string;\n generate(context: Context): Promise<string[]>;\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DataModel, DataModelAttribute, Model } from '@zenstackhq/language/ast';
|
|
2
|
+
export declare function extractDataModelsWithAllowRules(model: Model): DataModel[];
|
|
3
|
+
export declare function analyzePolicies(dataModel: DataModel): {
|
|
4
|
+
allows: DataModelAttribute[];
|
|
5
|
+
denies: DataModelAttribute[];
|
|
6
|
+
create: boolean | undefined;
|
|
7
|
+
read: boolean | undefined;
|
|
8
|
+
update: boolean | undefined;
|
|
9
|
+
delete: boolean | undefined;
|
|
10
|
+
allowAll: boolean;
|
|
11
|
+
denyAll: boolean;
|
|
12
|
+
hasFieldValidation: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare const VALIDATION_ATTRIBUTES: string[];
|
|
15
|
+
export declare function getIdField(dataModel: DataModel): import("@zenstackhq/language/ast").DataModelField | undefined;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.VALIDATION_ATTRIBUTES = void 0;
|
|
7
|
+
exports.analyzePolicies = analyzePolicies;
|
|
8
|
+
exports.extractDataModelsWithAllowRules = extractDataModelsWithAllowRules;
|
|
9
|
+
exports.getIdField = getIdField;
|
|
10
|
+
var _ast = require("@zenstackhq/language/ast");
|
|
11
|
+
var _sdk = require("@zenstackhq/sdk");
|
|
12
|
+
function extractDataModelsWithAllowRules(model) {
|
|
13
|
+
return model.declarations.filter(d => (0, _ast.isDataModel)(d) && d.attributes.some(attr => {
|
|
14
|
+
var _attr$decl$ref;
|
|
15
|
+
return ((_attr$decl$ref = attr.decl.ref) === null || _attr$decl$ref === void 0 ? void 0 : _attr$decl$ref.name) === '@@allow';
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
function analyzePolicies(dataModel) {
|
|
19
|
+
const allows = dataModel.attributes.filter(attr => {
|
|
20
|
+
var _attr$decl$ref2;
|
|
21
|
+
return ((_attr$decl$ref2 = attr.decl.ref) === null || _attr$decl$ref2 === void 0 ? void 0 : _attr$decl$ref2.name) === '@@allow';
|
|
22
|
+
});
|
|
23
|
+
const denies = dataModel.attributes.filter(attr => {
|
|
24
|
+
var _attr$decl$ref3;
|
|
25
|
+
return ((_attr$decl$ref3 = attr.decl.ref) === null || _attr$decl$ref3 === void 0 ? void 0 : _attr$decl$ref3.name) === '@@deny';
|
|
26
|
+
});
|
|
27
|
+
const create = toStaticPolicy('create', allows, denies);
|
|
28
|
+
const read = toStaticPolicy('read', allows, denies);
|
|
29
|
+
const update = toStaticPolicy('update', allows, denies);
|
|
30
|
+
const del = toStaticPolicy('delete', allows, denies);
|
|
31
|
+
const hasFieldValidation = dataModel.fields.some(field => field.attributes.some(attr => VALIDATION_ATTRIBUTES.includes(attr.decl.$refText)));
|
|
32
|
+
return {
|
|
33
|
+
allows,
|
|
34
|
+
denies,
|
|
35
|
+
create,
|
|
36
|
+
read,
|
|
37
|
+
update,
|
|
38
|
+
delete: del,
|
|
39
|
+
allowAll: create === true && read === true && update === true && del === true,
|
|
40
|
+
denyAll: create === false && read === false && update === false && del === false,
|
|
41
|
+
hasFieldValidation
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function toStaticPolicy(operation, allows, denies) {
|
|
45
|
+
const filteredDenies = forOperation(operation, denies);
|
|
46
|
+
if (filteredDenies.some(rule => (0, _sdk.getLiteral)(rule.args[1].value) === true)) {
|
|
47
|
+
// any constant true deny rule
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const filteredAllows = forOperation(operation, allows);
|
|
51
|
+
if (filteredAllows.length === 0) {
|
|
52
|
+
// no allow rule
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
if (filteredDenies.length === 0 && filteredAllows.some(rule => (0, _sdk.getLiteral)(rule.args[1].value) === true)) {
|
|
56
|
+
// any constant true allow rule
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
function forOperation(operation, rules) {
|
|
62
|
+
return rules.filter(rule => {
|
|
63
|
+
const ops = (0, _sdk.getLiteral)(rule.args[0].value);
|
|
64
|
+
if (!ops) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (ops === 'all') {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
const splitOps = ops.split(',').map(p => p.trim());
|
|
71
|
+
return splitOps.includes(operation);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const VALIDATION_ATTRIBUTES = ['@length', '@regex', '@startsWith', '@endsWith', '@email', '@url', '@datetime', '@gt', '@gte', '@lt', '@lte'];
|
|
75
|
+
exports.VALIDATION_ATTRIBUTES = VALIDATION_ATTRIBUTES;
|
|
76
|
+
function getIdField(dataModel) {
|
|
77
|
+
return dataModel.fields.find(f => f.attributes.some(attr => attr.decl.$refText === '@id'));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=ast-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-utils.js","names":["extractDataModelsWithAllowRules","model","declarations","filter","d","isDataModel","attributes","some","attr","decl","ref","name","analyzePolicies","dataModel","allows","denies","create","toStaticPolicy","read","update","del","hasFieldValidation","fields","field","VALIDATION_ATTRIBUTES","includes","$refText","delete","allowAll","denyAll","operation","filteredDenies","forOperation","rule","getLiteral","args","value","filteredAllows","length","undefined","rules","ops","splitOps","split","map","p","trim","getIdField","find","f"],"sources":["../../src/utils/ast-utils.ts"],"sourcesContent":["import { DataModel, DataModelAttribute, Model, isDataModel } from '@zenstackhq/language/ast';\nimport { PolicyOperationKind } from '@zenstackhq/runtime';\nimport { getLiteral } from '@zenstackhq/sdk';\n\nexport function extractDataModelsWithAllowRules(model: Model): DataModel[] {\n return model.declarations.filter(\n (d) => isDataModel(d) && d.attributes.some((attr) => attr.decl.ref?.name === '@@allow')\n ) as DataModel[];\n}\n\nexport function analyzePolicies(dataModel: DataModel) {\n const allows = dataModel.attributes.filter((attr) => attr.decl.ref?.name === '@@allow');\n const denies = dataModel.attributes.filter((attr) => attr.decl.ref?.name === '@@deny');\n\n const create = toStaticPolicy('create', allows, denies);\n const read = toStaticPolicy('read', allows, denies);\n const update = toStaticPolicy('update', allows, denies);\n const del = toStaticPolicy('delete', allows, denies);\n const hasFieldValidation = dataModel.fields.some((field) =>\n field.attributes.some((attr) => VALIDATION_ATTRIBUTES.includes(attr.decl.$refText))\n );\n\n return {\n allows,\n denies,\n create,\n read,\n update,\n delete: del,\n allowAll: create === true && read === true && update === true && del === true,\n denyAll: create === false && read === false && update === false && del === false,\n hasFieldValidation,\n };\n}\n\nfunction toStaticPolicy(\n operation: PolicyOperationKind,\n allows: DataModelAttribute[],\n denies: DataModelAttribute[]\n): boolean | undefined {\n const filteredDenies = forOperation(operation, denies);\n if (filteredDenies.some((rule) => getLiteral<boolean>(rule.args[1].value) === true)) {\n // any constant true deny rule\n return false;\n }\n\n const filteredAllows = forOperation(operation, allows);\n if (filteredAllows.length === 0) {\n // no allow rule\n return false;\n }\n\n if (\n filteredDenies.length === 0 &&\n filteredAllows.some((rule) => getLiteral<boolean>(rule.args[1].value) === true)\n ) {\n // any constant true allow rule\n return true;\n }\n return undefined;\n}\n\nfunction forOperation(operation: PolicyOperationKind, rules: DataModelAttribute[]) {\n return rules.filter((rule) => {\n const ops = getLiteral<string>(rule.args[0].value);\n if (!ops) {\n return false;\n }\n if (ops === 'all') {\n return true;\n }\n const splitOps = ops.split(',').map((p) => p.trim());\n return splitOps.includes(operation);\n });\n}\n\nexport const VALIDATION_ATTRIBUTES = [\n '@length',\n '@regex',\n '@startsWith',\n '@endsWith',\n '@email',\n '@url',\n '@datetime',\n '@gt',\n '@gte',\n '@lt',\n '@lte',\n];\n\nexport function getIdField(dataModel: DataModel) {\n return dataModel.fields.find((f) => f.attributes.some((attr) => attr.decl.$refText === '@id'));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { StdioOptions } from 'child_process';
|
|
3
|
+
/**
|
|
4
|
+
* Utility for executing command synchronously and prints outputs on current console
|
|
5
|
+
*/
|
|
6
|
+
export declare function execSync(cmd: string, stdio?: StdioOptions, env?: Record<string, string>): void;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.execSync = execSync;
|
|
7
|
+
var _child_process = require("child_process");
|
|
8
|
+
/**
|
|
9
|
+
* Utility for executing command synchronously and prints outputs on current console
|
|
10
|
+
*/
|
|
11
|
+
function execSync(cmd, stdio = 'inherit', env) {
|
|
12
|
+
const mergedEnv = {
|
|
13
|
+
...process.env,
|
|
14
|
+
...env
|
|
15
|
+
};
|
|
16
|
+
(0, _child_process.execSync)(cmd, {
|
|
17
|
+
encoding: 'utf-8',
|
|
18
|
+
stdio,
|
|
19
|
+
env: mergedEnv
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=exec-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec-utils.js","names":["execSync","cmd","stdio","env","mergedEnv","process","_exec","encoding"],"sources":["../../src/utils/exec-utils.ts"],"sourcesContent":["import { execSync as _exec, StdioOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, stdio: StdioOptions = 'inherit', env?: Record<string, string>): void {\n const mergedEnv = { ...process.env, ...env };\n _exec(cmd, { encoding: 'utf-8', stdio, env: mergedEnv });\n}\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACO,SAASA,QAAQ,CAACC,GAAW,EAAEC,KAAmB,GAAG,SAAS,EAAEC,GAA4B,EAAQ;EACvG,MAAMC,SAAS,GAAG;IAAE,GAAGC,OAAO,CAACF,GAAG;IAAE,GAAGA;EAAI,CAAC;EAC5C,IAAAG,uBAAK,EAACL,GAAG,EAAE;IAAEM,QAAQ,EAAE,OAAO;IAAEL,KAAK;IAAEC,GAAG,EAAEC;EAAU,CAAC,CAAC;AAC5D"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare type PackageManagers = 'npm' | 'yarn' | 'pnpm';
|
|
2
|
+
export declare function installPackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, tag?: string, projectPath?: string): void;
|
|
3
|
+
export declare function ensurePackage(pkg: string, dev: boolean, pkgManager?: PackageManagers | undefined, projectPath?: string): void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ensurePackage = ensurePackage;
|
|
7
|
+
exports.installPackage = installPackage;
|
|
8
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _execUtils = require("./exec-utils");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
function getPackageManager(projectPath = '.') {
|
|
13
|
+
if (_fs.default.existsSync(_path.default.join(projectPath, 'yarn.lock'))) {
|
|
14
|
+
return 'yarn';
|
|
15
|
+
} else if (_fs.default.existsSync(_path.default.join(projectPath, 'pnpm-lock.yaml'))) {
|
|
16
|
+
return 'pnpm';
|
|
17
|
+
} else {
|
|
18
|
+
return 'npm';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function installPackage(pkg, dev, pkgManager = undefined, tag = 'latest', projectPath = '.') {
|
|
22
|
+
const manager = pkgManager ?? getPackageManager(projectPath);
|
|
23
|
+
console.log(`Installing package "${pkg}" with ${manager}`);
|
|
24
|
+
switch (manager) {
|
|
25
|
+
case 'yarn':
|
|
26
|
+
(0, _execUtils.execSync)(`yarn --cwd "${projectPath}" add ${pkg}@${tag} ${dev ? ' --dev' : ''} --ignore-engines`);
|
|
27
|
+
break;
|
|
28
|
+
case 'pnpm':
|
|
29
|
+
(0, _execUtils.execSync)(`pnpm add -C "${projectPath}" ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
(0, _execUtils.execSync)(`npm install --prefix "${projectPath}" ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function ensurePackage(pkg, dev, pkgManager = undefined, projectPath = '.') {
|
|
37
|
+
try {
|
|
38
|
+
require(pkg);
|
|
39
|
+
} catch {
|
|
40
|
+
installPackage(pkg, dev, pkgManager, projectPath);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=pkg-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkg-utils.js","names":["getPackageManager","projectPath","fs","existsSync","path","join","installPackage","pkg","dev","pkgManager","undefined","tag","manager","console","log","execSync","ensurePackage","require"],"sources":["../../src/utils/pkg-utils.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { execSync } from './exec-utils';\n\nexport type PackageManagers = 'npm' | 'yarn' | 'pnpm';\n\nfunction getPackageManager(projectPath = '.'): PackageManagers {\n if (fs.existsSync(path.join(projectPath, 'yarn.lock'))) {\n return 'yarn';\n } else if (fs.existsSync(path.join(projectPath, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n } else {\n return 'npm';\n }\n}\n\nexport function installPackage(\n pkg: string,\n dev: boolean,\n pkgManager: PackageManagers | undefined = undefined,\n tag = 'latest',\n projectPath = '.'\n) {\n const manager = pkgManager ?? getPackageManager(projectPath);\n console.log(`Installing package \"${pkg}\" with ${manager}`);\n switch (manager) {\n case 'yarn':\n execSync(`yarn --cwd \"${projectPath}\" add ${pkg}@${tag} ${dev ? ' --dev' : ''} --ignore-engines`);\n break;\n\n case 'pnpm':\n execSync(`pnpm add -C \"${projectPath}\" ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);\n break;\n\n default:\n execSync(`npm install --prefix \"${projectPath}\" ${dev ? ' --save-dev' : ''} ${pkg}@${tag}`);\n break;\n }\n}\n\nexport function ensurePackage(\n pkg: string,\n dev: boolean,\n pkgManager: PackageManagers | undefined = undefined,\n projectPath = '.'\n) {\n try {\n require(pkg);\n } catch {\n installPackage(pkg, dev, pkgManager, projectPath);\n }\n}\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAAwC;AAIxC,SAASA,iBAAiB,CAACC,WAAW,GAAG,GAAG,EAAmB;EAC3D,IAAIC,WAAE,CAACC,UAAU,CAACC,aAAI,CAACC,IAAI,CAACJ,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE;IACpD,OAAO,MAAM;EACjB,CAAC,MAAM,IAAIC,WAAE,CAACC,UAAU,CAACC,aAAI,CAACC,IAAI,CAACJ,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE;IAChE,OAAO,MAAM;EACjB,CAAC,MAAM;IACH,OAAO,KAAK;EAChB;AACJ;AAEO,SAASK,cAAc,CAC1BC,GAAW,EACXC,GAAY,EACZC,UAAuC,GAAGC,SAAS,EACnDC,GAAG,GAAG,QAAQ,EACdV,WAAW,GAAG,GAAG,EACnB;EACE,MAAMW,OAAO,GAAGH,UAAU,IAAIT,iBAAiB,CAACC,WAAW,CAAC;EAC5DY,OAAO,CAACC,GAAG,CAAE,uBAAsBP,GAAI,UAASK,OAAQ,EAAC,CAAC;EAC1D,QAAQA,OAAO;IACX,KAAK,MAAM;MACP,IAAAG,mBAAQ,EAAE,eAAcd,WAAY,SAAQM,GAAI,IAAGI,GAAI,IAAGH,GAAG,GAAG,QAAQ,GAAG,EAAG,mBAAkB,CAAC;MACjG;IAEJ,KAAK,MAAM;MACP,IAAAO,mBAAQ,EAAE,gBAAed,WAAY,KAAIO,GAAG,GAAG,aAAa,GAAG,EAAG,IAAGD,GAAI,IAAGI,GAAI,EAAC,CAAC;MAClF;IAEJ;MACI,IAAAI,mBAAQ,EAAE,yBAAwBd,WAAY,KAAIO,GAAG,GAAG,aAAa,GAAG,EAAG,IAAGD,GAAI,IAAGI,GAAI,EAAC,CAAC;MAC3F;EAAM;AAElB;AAEO,SAASK,aAAa,CACzBT,GAAW,EACXC,GAAY,EACZC,UAAuC,GAAGC,SAAS,EACnDT,WAAW,GAAG,GAAG,EACnB;EACE,IAAI;IACAgB,OAAO,CAACV,GAAG,CAAC;EAChB,CAAC,CAAC,MAAM;IACJD,cAAc,CAACC,GAAG,EAAEC,GAAG,EAAEC,UAAU,EAAER,WAAW,CAAC;EACrD;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getVersion(): any;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getVersion = getVersion;
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
8
|
+
function getVersion() {
|
|
9
|
+
try {
|
|
10
|
+
return require('../package.json').version;
|
|
11
|
+
} catch {
|
|
12
|
+
return require('../../package.json').version;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=version-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-utils.js","names":["getVersion","require","version"],"sources":["../../src/utils/version-utils.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\nexport function getVersion() {\n try {\n return require('../package.json').version;\n } catch {\n return require('../../package.json').version;\n }\n}\n"],"mappings":";;;;;;AAAA;AACO,SAASA,UAAU,GAAG;EACzB,IAAI;IACA,OAAOC,OAAO,CAAC,iBAAiB,CAAC,CAACC,OAAO;EAC7C,CAAC,CAAC,MAAM;IACJ,OAAOD,OAAO,CAAC,oBAAoB,CAAC,CAACC,OAAO;EAChD;AACJ"}
|
package/asset/logo-256-bg.png
DELETED
|
Binary file
|
package/asset/logo-dark-256.png
DELETED
|
Binary file
|
package/asset/logo-light-256.png
DELETED
|
Binary file
|