@morphql/server 0.1.8 → 0.1.10
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/dist/core/MorphServer.d.ts +46 -0
- package/dist/core/MorphServer.js +60 -0
- package/dist/core/MorphServer.js.map +1 -0
- package/dist/core/OpenAPIGenerator.d.ts +9 -0
- package/dist/core/OpenAPIGenerator.js +133 -0
- package/dist/core/OpenAPIGenerator.js.map +1 -0
- package/dist/core/StagedQueryManager.d.ts +22 -0
- package/dist/core/StagedQueryManager.js +68 -0
- package/dist/core/StagedQueryManager.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +18 -46
- package/Dockerfile +0 -63
- package/dist/src/app.module.d.ts +0 -2
- package/dist/src/app.module.js +0 -22
- package/dist/src/app.module.js.map +0 -1
- package/dist/src/auth.guard.d.ts +0 -7
- package/dist/src/auth.guard.js +0 -88
- package/dist/src/auth.guard.js.map +0 -1
- package/dist/src/main.d.ts +0 -1
- package/dist/src/main.js +0 -19
- package/dist/src/main.js.map +0 -1
- package/dist/src/morph.controller.d.ts +0 -28
- package/dist/src/morph.controller.js +0 -187
- package/dist/src/morph.controller.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/vitest.config.d.ts +0 -2
- package/dist/vitest.config.js +0 -20
- package/dist/vitest.config.js.map +0 -1
- package/docker-compose.yml +0 -32
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MorphEngine, MorphQLCache } from '@morphql/core';
|
|
2
|
+
import { StagedQueryManager } from './StagedQueryManager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Options for initializing the MorphServer.
|
|
5
|
+
*/
|
|
6
|
+
export interface MorphServerOptions {
|
|
7
|
+
/** Directory where staged queries (.morphql) are located. */
|
|
8
|
+
queriesDir?: string;
|
|
9
|
+
/** Optional cache service for compiled queries. */
|
|
10
|
+
cache?: MorphQLCache;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* High-level facade for the MorphQL Server core.
|
|
14
|
+
* Provides easy access to query compilation, execution, and staged query management.
|
|
15
|
+
*/
|
|
16
|
+
export declare class MorphServer {
|
|
17
|
+
readonly queries: StagedQueryManager;
|
|
18
|
+
private cache?;
|
|
19
|
+
private queriesDir?;
|
|
20
|
+
constructor(options?: MorphServerOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Initializes the server, loading staged queries if a directory was provided.
|
|
23
|
+
*/
|
|
24
|
+
initialize(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Compiles a MorphQL query and returns an executable engine.
|
|
27
|
+
* @param query The MorphQL query string.
|
|
28
|
+
*/
|
|
29
|
+
compile(query: string): Promise<MorphEngine>;
|
|
30
|
+
/**
|
|
31
|
+
* Directly executes a MorphQL query against the provided data.
|
|
32
|
+
* @param query The MorphQL query string.
|
|
33
|
+
* @param data The input data for transformation.
|
|
34
|
+
*/
|
|
35
|
+
execute(query: string, data: unknown): Promise<unknown>;
|
|
36
|
+
/**
|
|
37
|
+
* Executes a pre-loaded staged query by name.
|
|
38
|
+
* @param name The name of the staged query.
|
|
39
|
+
* @param data The input data for transformation.
|
|
40
|
+
*/
|
|
41
|
+
executeStaged(name: string, data: unknown): Promise<unknown>;
|
|
42
|
+
/**
|
|
43
|
+
* Generates OpenAPI (Swagger) specification fragments for all loaded staged queries.
|
|
44
|
+
*/
|
|
45
|
+
getOpenAPIFragments(): Promise<any[]>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { compile } from '@morphql/core';
|
|
2
|
+
import { StagedQueryManager } from './StagedQueryManager.js';
|
|
3
|
+
import { OpenAPIGenerator } from './OpenAPIGenerator.js';
|
|
4
|
+
/**
|
|
5
|
+
* High-level facade for the MorphQL Server core.
|
|
6
|
+
* Provides easy access to query compilation, execution, and staged query management.
|
|
7
|
+
*/
|
|
8
|
+
export class MorphServer {
|
|
9
|
+
queries = new StagedQueryManager();
|
|
10
|
+
cache;
|
|
11
|
+
queriesDir;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.queriesDir = options?.queriesDir;
|
|
14
|
+
this.cache = options?.cache;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initializes the server, loading staged queries if a directory was provided.
|
|
18
|
+
*/
|
|
19
|
+
async initialize() {
|
|
20
|
+
if (this.queriesDir) {
|
|
21
|
+
await this.queries.loadFromDirectory(this.queriesDir);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Compiles a MorphQL query and returns an executable engine.
|
|
26
|
+
* @param query The MorphQL query string.
|
|
27
|
+
*/
|
|
28
|
+
async compile(query) {
|
|
29
|
+
return compile(query, { cache: this.cache });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Directly executes a MorphQL query against the provided data.
|
|
33
|
+
* @param query The MorphQL query string.
|
|
34
|
+
* @param data The input data for transformation.
|
|
35
|
+
*/
|
|
36
|
+
async execute(query, data) {
|
|
37
|
+
const engine = await this.compile(query);
|
|
38
|
+
return engine(data);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Executes a pre-loaded staged query by name.
|
|
42
|
+
* @param name The name of the staged query.
|
|
43
|
+
* @param data The input data for transformation.
|
|
44
|
+
*/
|
|
45
|
+
async executeStaged(name, data) {
|
|
46
|
+
return this.queries.execute(name, data);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generates OpenAPI (Swagger) specification fragments for all loaded staged queries.
|
|
50
|
+
*/
|
|
51
|
+
async getOpenAPIFragments() {
|
|
52
|
+
const fragments = [];
|
|
53
|
+
for (const query of this.queries.getAll()) {
|
|
54
|
+
const spec = await OpenAPIGenerator.generatePathSpec(query, '/v1/q');
|
|
55
|
+
fragments.push(spec);
|
|
56
|
+
}
|
|
57
|
+
return fragments;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=MorphServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorphServer.js","sourceRoot":"","sources":["../../src/core/MorphServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAYzD;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACpC,KAAK,CAAgB;IACrB,UAAU,CAAU;IAE5B,YAAY,OAA4B;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAa;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,IAAa;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,SAAS,GAAU,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaNode } from '@morphql/core';
|
|
2
|
+
import { StagedQuery } from './StagedQueryManager.js';
|
|
3
|
+
export declare class OpenAPIGenerator {
|
|
4
|
+
static schemaNodeToOpenAPI(node: SchemaNode, meta?: Record<string, any>, path?: string): any;
|
|
5
|
+
static schemaToSample(schema: any): any;
|
|
6
|
+
private static applyMeta;
|
|
7
|
+
static generatePathSpec(query: StagedQuery, basePath: string): Promise<any>;
|
|
8
|
+
private static getMimeType;
|
|
9
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
export class OpenAPIGenerator {
|
|
2
|
+
static schemaNodeToOpenAPI(node, meta, path = '') {
|
|
3
|
+
if (node.type === 'any') {
|
|
4
|
+
const schema = {};
|
|
5
|
+
this.applyMeta(schema, path, meta);
|
|
6
|
+
return schema; // Represents "any" in OpenAPI 3.0
|
|
7
|
+
}
|
|
8
|
+
const typeMap = {
|
|
9
|
+
string: 'string',
|
|
10
|
+
number: 'number',
|
|
11
|
+
boolean: 'boolean',
|
|
12
|
+
object: 'object',
|
|
13
|
+
array: 'array',
|
|
14
|
+
};
|
|
15
|
+
const schema = {};
|
|
16
|
+
if (node.type === 'null') {
|
|
17
|
+
schema.nullable = true;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
schema.type = typeMap[node.type] || 'object';
|
|
21
|
+
}
|
|
22
|
+
this.applyMeta(schema, path, meta);
|
|
23
|
+
if (node.type === 'object') {
|
|
24
|
+
if (node.properties && Object.keys(node.properties).length > 0) {
|
|
25
|
+
schema.properties = {};
|
|
26
|
+
for (const [key, childNode] of Object.entries(node.properties)) {
|
|
27
|
+
const childPath = path ? `${path}.${key}` : key;
|
|
28
|
+
schema.properties[key] = this.schemaNodeToOpenAPI(childNode, meta, childPath);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (node.isOpen) {
|
|
32
|
+
schema.additionalProperties = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (node.type === 'array' && node.items) {
|
|
36
|
+
schema.items = this.schemaNodeToOpenAPI(node.items, meta, path);
|
|
37
|
+
}
|
|
38
|
+
return schema;
|
|
39
|
+
}
|
|
40
|
+
static schemaToSample(schema) {
|
|
41
|
+
if (schema.example !== undefined)
|
|
42
|
+
return schema.example;
|
|
43
|
+
if (schema.type === 'object') {
|
|
44
|
+
const obj = {};
|
|
45
|
+
if (schema.properties) {
|
|
46
|
+
for (const [key, value] of Object.entries(schema.properties)) {
|
|
47
|
+
obj[key] = this.schemaToSample(value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return obj;
|
|
51
|
+
}
|
|
52
|
+
if (schema.type === 'array') {
|
|
53
|
+
if (schema.items) {
|
|
54
|
+
return [this.schemaToSample(schema.items)];
|
|
55
|
+
}
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
const defaults = {
|
|
59
|
+
string: 'string',
|
|
60
|
+
number: 0,
|
|
61
|
+
boolean: true,
|
|
62
|
+
};
|
|
63
|
+
if (schema.type === undefined) {
|
|
64
|
+
return 'sample';
|
|
65
|
+
}
|
|
66
|
+
return defaults[schema.type] ?? null;
|
|
67
|
+
}
|
|
68
|
+
static applyMeta(schema, path, meta) {
|
|
69
|
+
if (!meta || !path)
|
|
70
|
+
return;
|
|
71
|
+
const entry = meta[path];
|
|
72
|
+
if (entry) {
|
|
73
|
+
if (entry.type)
|
|
74
|
+
schema.type = entry.type;
|
|
75
|
+
if (entry.description)
|
|
76
|
+
schema.description = entry.description;
|
|
77
|
+
if (entry.example !== undefined)
|
|
78
|
+
schema.example = entry.example;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
static async generatePathSpec(query, basePath) {
|
|
82
|
+
const requestSchema = this.schemaNodeToOpenAPI(query.analysis.source, query.meta);
|
|
83
|
+
const responseSchema = this.schemaNodeToOpenAPI(query.analysis.target, query.meta);
|
|
84
|
+
try {
|
|
85
|
+
const sampleInput = this.schemaToSample(requestSchema);
|
|
86
|
+
const responseExample = await query.engine(sampleInput);
|
|
87
|
+
responseSchema.example = responseExample;
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
console.warn(`Failed to generate response example for ${query.name}`);
|
|
91
|
+
}
|
|
92
|
+
const sourceMime = this.getMimeType(query.analysis.sourceFormat);
|
|
93
|
+
const targetMime = this.getMimeType(query.analysis.targetFormat);
|
|
94
|
+
if (sourceMime === 'application/xml') {
|
|
95
|
+
requestSchema.xml = { name: 'root' };
|
|
96
|
+
}
|
|
97
|
+
if (targetMime === 'application/xml') {
|
|
98
|
+
responseSchema.xml = { name: 'root' };
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
paths: {
|
|
102
|
+
[`${basePath}/${query.name}`]: {
|
|
103
|
+
post: {
|
|
104
|
+
tags: ['Staged Queries'],
|
|
105
|
+
summary: `Execute staged query: ${query.name}`,
|
|
106
|
+
operationId: `execute_${query.name}`,
|
|
107
|
+
requestBody: {
|
|
108
|
+
required: true,
|
|
109
|
+
content: { [sourceMime]: { schema: requestSchema } },
|
|
110
|
+
},
|
|
111
|
+
responses: {
|
|
112
|
+
'200': {
|
|
113
|
+
description: 'Successful transformation',
|
|
114
|
+
content: { [targetMime]: { schema: responseSchema } },
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
static getMimeType(format) {
|
|
123
|
+
switch (format?.toLowerCase()) {
|
|
124
|
+
case 'json':
|
|
125
|
+
return 'application/json';
|
|
126
|
+
case 'xml':
|
|
127
|
+
return 'application/xml';
|
|
128
|
+
default:
|
|
129
|
+
return 'text/plain';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=OpenAPIGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAPIGenerator.js","sourceRoot":"","sources":["../../src/core/OpenAPIGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MorphEngine, AnalyzeResult } from '@morphql/core';
|
|
2
|
+
export interface StagedQuery {
|
|
3
|
+
name: string;
|
|
4
|
+
query: string;
|
|
5
|
+
engine: MorphEngine;
|
|
6
|
+
analysis: AnalyzeResult;
|
|
7
|
+
meta?: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
export interface QueryDefinition {
|
|
10
|
+
name: string;
|
|
11
|
+
query: string;
|
|
12
|
+
meta?: Record<string, any>;
|
|
13
|
+
}
|
|
14
|
+
export declare class StagedQueryManager {
|
|
15
|
+
private readonly queries;
|
|
16
|
+
loadFromDirectory(dir: string): Promise<void>;
|
|
17
|
+
loadFromArray(definitions: QueryDefinition[]): Promise<void>;
|
|
18
|
+
private add;
|
|
19
|
+
get(name: string): StagedQuery | undefined;
|
|
20
|
+
getAll(): StagedQuery[];
|
|
21
|
+
execute(name: string, data: unknown): Promise<unknown>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { compile } from '@morphql/core';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as yaml from 'js-yaml';
|
|
5
|
+
export class StagedQueryManager {
|
|
6
|
+
queries = new Map();
|
|
7
|
+
async loadFromDirectory(dir) {
|
|
8
|
+
if (!fs.existsSync(dir)) {
|
|
9
|
+
console.warn(`Queries directory not found: ${dir}`);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const files = fs.readdirSync(dir);
|
|
13
|
+
const morphFiles = files.filter((f) => f.endsWith('.morphql'));
|
|
14
|
+
for (const file of morphFiles) {
|
|
15
|
+
const name = path.parse(file).name;
|
|
16
|
+
const filePath = path.join(dir, file);
|
|
17
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
18
|
+
let meta;
|
|
19
|
+
const yamlPath = path.join(dir, `${name}.meta.yaml`);
|
|
20
|
+
const jsonPath = path.join(dir, `${name}.meta.json`);
|
|
21
|
+
if (fs.existsSync(yamlPath)) {
|
|
22
|
+
meta = yaml.load(fs.readFileSync(yamlPath, 'utf-8'));
|
|
23
|
+
}
|
|
24
|
+
else if (fs.existsSync(jsonPath)) {
|
|
25
|
+
meta = JSON.parse(fs.readFileSync(jsonPath, 'utf-8'));
|
|
26
|
+
}
|
|
27
|
+
await this.add({ name, query: content, meta });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async loadFromArray(definitions) {
|
|
31
|
+
for (const def of definitions) {
|
|
32
|
+
await this.add(def);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async add(def) {
|
|
36
|
+
try {
|
|
37
|
+
const engine = await compile(def.query, { analyze: true });
|
|
38
|
+
if (!engine.analysis) {
|
|
39
|
+
console.error(`Failed to analyze query: ${def.name}`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
this.queries.set(def.name, {
|
|
43
|
+
name: def.name,
|
|
44
|
+
query: def.query,
|
|
45
|
+
engine,
|
|
46
|
+
analysis: engine.analysis,
|
|
47
|
+
meta: def.meta,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.error(`Error compiling query ${def.name}:`, e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
get(name) {
|
|
55
|
+
return this.queries.get(name);
|
|
56
|
+
}
|
|
57
|
+
getAll() {
|
|
58
|
+
return Array.from(this.queries.values());
|
|
59
|
+
}
|
|
60
|
+
async execute(name, data) {
|
|
61
|
+
const query = this.get(name);
|
|
62
|
+
if (!query) {
|
|
63
|
+
throw new Error(`Query not found: ${name}`);
|
|
64
|
+
}
|
|
65
|
+
return query.engine(data);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=StagedQueryManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StagedQueryManager.js","sourceRoot":"","sources":["../../src/core/StagedQueryManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './core/index.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@morphql/server",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.10",
|
|
4
|
+
"description": "MorphQL Server Core - Headless transformation engine",
|
|
5
5
|
"author": "Hyperwindmill",
|
|
6
6
|
"private": false,
|
|
7
7
|
"license": "MIT",
|
|
8
|
+
"type": "module",
|
|
8
9
|
"publishConfig": {
|
|
9
10
|
"access": "public"
|
|
10
11
|
},
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
11
14
|
"files": [
|
|
12
15
|
"dist",
|
|
13
16
|
"README.md",
|
|
14
|
-
"LICENSE"
|
|
15
|
-
"docker-compose.yml",
|
|
16
|
-
"Dockerfile"
|
|
17
|
+
"LICENSE"
|
|
17
18
|
],
|
|
18
19
|
"repository": {
|
|
19
20
|
"type": "git",
|
|
@@ -24,52 +25,23 @@
|
|
|
24
25
|
"url": "https://github.com/Hyperwindmill/morphql/issues"
|
|
25
26
|
},
|
|
26
27
|
"homepage": "https://github.com/Hyperwindmill/morphql/tree/main/packages/server#readme",
|
|
27
|
-
"scripts": {
|
|
28
|
-
"build": "nest build",
|
|
29
|
-
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
30
|
-
"start": "nest start",
|
|
31
|
-
"start:dev": "nest start --watch",
|
|
32
|
-
"start:debug": "nest start --debug --watch",
|
|
33
|
-
"start:prod": "node dist/main.js",
|
|
34
|
-
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
|
35
|
-
"test": "vitest run",
|
|
36
|
-
"test:watch": "vitest",
|
|
37
|
-
"test:cov": "vitest run --coverage",
|
|
38
|
-
"test:e2e": "vitest run --config ./vitest.config.ts"
|
|
39
|
-
},
|
|
40
28
|
"dependencies": {
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"@
|
|
45
|
-
"@morphql/core": "^0.1.8",
|
|
46
|
-
"ioredis": "^5.9.2",
|
|
47
|
-
"reflect-metadata": "^0.2.2",
|
|
48
|
-
"rxjs": "^7.8.1"
|
|
29
|
+
"js-yaml": "^4.1.1"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"@morphql/core": "^0.1.10"
|
|
49
33
|
},
|
|
50
34
|
"devDependencies": {
|
|
51
|
-
"@
|
|
52
|
-
"@
|
|
53
|
-
"@nestjs/cli": "^11.0.0",
|
|
54
|
-
"@nestjs/schematics": "^11.0.0",
|
|
55
|
-
"@nestjs/testing": "^11.0.1",
|
|
56
|
-
"@swc/core": "^1.10.9",
|
|
57
|
-
"@types/express": "^5.0.0",
|
|
35
|
+
"@morphql/core": "^0.1.10",
|
|
36
|
+
"@types/js-yaml": "^4.0.9",
|
|
58
37
|
"@types/node": "^22.10.7",
|
|
59
|
-
"@types/supertest": "^6.0.2",
|
|
60
|
-
"eslint": "^9.18.0",
|
|
61
|
-
"eslint-config-prettier": "^10.0.1",
|
|
62
|
-
"eslint-plugin-prettier": "^5.2.2",
|
|
63
|
-
"globals": "^16.0.0",
|
|
64
|
-
"prettier": "^3.4.2",
|
|
65
|
-
"source-map-support": "^0.5.21",
|
|
66
|
-
"supertest": "^7.0.0",
|
|
67
|
-
"ts-loader": "^9.5.2",
|
|
68
|
-
"ts-node": "^10.9.2",
|
|
69
|
-
"tsconfig-paths": "^4.2.0",
|
|
70
38
|
"typescript": "^5.7.3",
|
|
71
|
-
"typescript-eslint": "^8.20.0",
|
|
72
|
-
"unplugin-swc": "^1.5.1",
|
|
73
39
|
"vitest": "^3.0.3"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc",
|
|
43
|
+
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
44
|
+
"lint": "eslint \"{src,test}/**/*.ts\" --fix",
|
|
45
|
+
"test": "vitest run"
|
|
74
46
|
}
|
|
75
47
|
}
|
package/Dockerfile
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# Stage 1: Builder
|
|
2
|
-
FROM node:24-alpine AS builder
|
|
3
|
-
|
|
4
|
-
WORKDIR /app
|
|
5
|
-
|
|
6
|
-
# Copy root package files
|
|
7
|
-
COPY package*.json ./
|
|
8
|
-
|
|
9
|
-
# Copy workspace package files (maintaining structure)
|
|
10
|
-
COPY packages/core/package*.json ./packages/core/
|
|
11
|
-
COPY packages/server/package*.json ./packages/server/
|
|
12
|
-
|
|
13
|
-
# Install ALL dependencies (including devDeps for building)
|
|
14
|
-
RUN npm ci
|
|
15
|
-
|
|
16
|
-
# Copy TypeScript configs
|
|
17
|
-
COPY tsconfig*.json ./
|
|
18
|
-
COPY packages/core/tsconfig*.json ./packages/core/
|
|
19
|
-
COPY packages/server/tsconfig*.json ./packages/server/
|
|
20
|
-
COPY packages/server/nest-cli.json ./packages/server/
|
|
21
|
-
|
|
22
|
-
# Copy source code for both packages
|
|
23
|
-
COPY packages/core/src ./packages/core/src
|
|
24
|
-
COPY packages/server/src ./packages/server/src
|
|
25
|
-
COPY packages/server/test ./packages/server/test
|
|
26
|
-
|
|
27
|
-
# Build core first (server depends on it)
|
|
28
|
-
RUN npm run build --workspace=@morphql/core
|
|
29
|
-
|
|
30
|
-
# Build server
|
|
31
|
-
RUN npm run build --workspace=server
|
|
32
|
-
|
|
33
|
-
# Prune dev dependencies
|
|
34
|
-
RUN npm prune --omit=dev
|
|
35
|
-
|
|
36
|
-
# Stage 2: Production
|
|
37
|
-
FROM node:24-alpine AS production
|
|
38
|
-
|
|
39
|
-
WORKDIR /app
|
|
40
|
-
|
|
41
|
-
# Copy root metadata
|
|
42
|
-
COPY package*.json ./
|
|
43
|
-
|
|
44
|
-
# Copy the entire built workspace from builder
|
|
45
|
-
# This includes the pruned node_modules which already has the correct links structure
|
|
46
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
47
|
-
COPY --from=builder /app/packages ./packages
|
|
48
|
-
|
|
49
|
-
# Create non-root user
|
|
50
|
-
RUN addgroup -g 1001 -S nodejs && \
|
|
51
|
-
adduser -S nestjs -u 1001
|
|
52
|
-
|
|
53
|
-
USER nestjs
|
|
54
|
-
|
|
55
|
-
ENV NODE_ENV=production
|
|
56
|
-
EXPOSE 3000
|
|
57
|
-
|
|
58
|
-
# Set WORKDIR to server for correct execution context
|
|
59
|
-
WORKDIR /app/packages/server
|
|
60
|
-
|
|
61
|
-
# Execute using local package script
|
|
62
|
-
CMD ["npm", "run", "start:prod"]
|
|
63
|
-
#CMD ["tail", "-f", "/dev/null"]
|
package/dist/src/app.module.d.ts
DELETED
package/dist/src/app.module.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.AppModule = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const morph_controller_js_1 = require("./morph.controller.js");
|
|
12
|
-
let AppModule = class AppModule {
|
|
13
|
-
};
|
|
14
|
-
exports.AppModule = AppModule;
|
|
15
|
-
exports.AppModule = AppModule = __decorate([
|
|
16
|
-
(0, common_1.Module)({
|
|
17
|
-
imports: [],
|
|
18
|
-
controllers: [morph_controller_js_1.MorphController],
|
|
19
|
-
providers: [],
|
|
20
|
-
})
|
|
21
|
-
], AppModule);
|
|
22
|
-
//# sourceMappingURL=app.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+DAAwD;AAOjD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IALrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,CAAC,qCAAe,CAAC;QAC9B,SAAS,EAAE,EAAE;KACd,CAAC;GACW,SAAS,CAAG"}
|
package/dist/src/auth.guard.d.ts
DELETED