@r8s/superset 0.1.0

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.
@@ -0,0 +1,73 @@
1
+ export interface SupersetProps {
2
+ /** Resource name */
3
+ name?: string;
4
+ /** Kubernetes namespace */
5
+ namespace?: string;
6
+ /** Superset version (default: 4.0.0) */
7
+ version?: string;
8
+ /** Hostname for Superset */
9
+ host: string;
10
+ /** Database connection */
11
+ database: {
12
+ host: string;
13
+ database: string;
14
+ user: string;
15
+ passwordSecret: string;
16
+ passwordKey?: string;
17
+ };
18
+ /**
19
+ * Redis connection. Either point at an existing Redis (`host`) or let
20
+ * the component create a managed RedisCluster (`create: true`).
21
+ */
22
+ redis: {
23
+ host: string;
24
+ port?: number;
25
+ create?: false;
26
+ } | {
27
+ create: true;
28
+ host?: string;
29
+ port?: number;
30
+ };
31
+ /** Admin credentials secret */
32
+ adminSecret: string;
33
+ /** Number of replicas (default: 1) */
34
+ replicas?: number;
35
+ /** Resources */
36
+ resources?: {
37
+ requests?: {
38
+ cpu?: string;
39
+ memory?: string;
40
+ };
41
+ limits?: {
42
+ cpu?: string;
43
+ memory?: string;
44
+ };
45
+ };
46
+ /** TLS config */
47
+ tls?: {
48
+ secretName: string;
49
+ clusterIssuer: string;
50
+ };
51
+ /** OAuth config for Keycloak */
52
+ oauth?: {
53
+ clientId: string;
54
+ clientSecret: string;
55
+ keycloakUrl: string;
56
+ realm?: string;
57
+ };
58
+ }
59
+ /**
60
+ * Apache Superset analytics and visualization platform.
61
+ * Deploys without operator — native Kubernetes resources only.
62
+ *
63
+ * @example
64
+ * <Superset
65
+ * host="superset.example.com"
66
+ * database={{ host: "superset-db-rw", database: "superset", user: "superset", passwordSecret: "superset-db-credentials" }}
67
+ * redis={{ host: "redis-master" }}
68
+ * adminSecret="superset-admin"
69
+ * tls={{ secretName: "superset-tls", clusterIssuer: "letsencrypt" }}
70
+ * />
71
+ */
72
+ export declare function Superset(props: SupersetProps): import("@r8s/core").r8sElement;
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,cAAc,EAAE,MAAM,CAAA;QACtB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,CAAA;IACD;;;OAGG;IACH,KAAK,EACH;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClG,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC5C,MAAM,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC3C,CAAA;IACD,iBAAiB;IACjB,GAAG,CAAC,EAAE;QACJ,UAAU,EAAE,MAAM,CAAA;QAClB,aAAa,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,gCAAgC;IAChC,KAAK,CAAC,EAAE;QACN,QAAQ,EAAE,MAAM,CAAA;QAChB,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kCA+M5C"}
package/dist/index.js ADDED
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Superset = Superset;
4
+ const core_1 = require("@r8s/core");
5
+ const defaults_1 = require("@r8s/core/defaults");
6
+ const crds_1 = require("@r8s/crds");
7
+ const redis_1 = require("@r8s/crds/redis");
8
+ /**
9
+ * Apache Superset analytics and visualization platform.
10
+ * Deploys without operator — native Kubernetes resources only.
11
+ *
12
+ * @example
13
+ * <Superset
14
+ * host="superset.example.com"
15
+ * database={{ host: "superset-db-rw", database: "superset", user: "superset", passwordSecret: "superset-db-credentials" }}
16
+ * redis={{ host: "redis-master" }}
17
+ * adminSecret="superset-admin"
18
+ * tls={{ secretName: "superset-tls", clusterIssuer: "letsencrypt" }}
19
+ * />
20
+ */
21
+ function Superset(props) {
22
+ const { name = 'superset', namespace = 'superset', version = '4.0.0', host, database, redis, adminSecret, replicas = 1, resources = {
23
+ requests: { cpu: '250m', memory: '1Gi' },
24
+ limits: { cpu: '1000m', memory: '2Gi' },
25
+ }, tls, oauth, } = props;
26
+ const resources_list = [];
27
+ // Namespace
28
+ resources_list.push((0, core_1.jsx)('Namespace', {
29
+ apiVersion: 'v1',
30
+ kind: 'Namespace',
31
+ metadata: { name: namespace },
32
+ }));
33
+ // Managed Redis — without this the Superset config references a Redis
34
+ // host that doesn't exist and the pod crash-loops.
35
+ let redisHost;
36
+ let redisPort;
37
+ if ('create' in redis && redis.create) {
38
+ const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
39
+ const hasRedis = sharedOperators.some((op) => op.name === 'redis-operator');
40
+ if (!hasRedis) {
41
+ resources_list.push((0, core_1.declareOperator)(crds_1.operators['redis-operator']()));
42
+ }
43
+ const redisName = `${name}-redis`;
44
+ resources_list.push((0, redis_1.RedisClusterComponent)({
45
+ metadata: { name: redisName, namespace },
46
+ spec: {
47
+ clusterSize: 3,
48
+ kubernetesConfig: { image: 'redis:7.2-alpine' },
49
+ storage: {
50
+ volumeClaimTemplate: {
51
+ spec: {
52
+ accessModes: ['ReadWriteOnce'],
53
+ resources: { requests: { storage: '1Gi' } },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ }));
59
+ redisHost = redis.host ?? `${redisName}.${namespace}.svc.cluster.local`;
60
+ redisPort = redis.port ?? 6379;
61
+ }
62
+ else {
63
+ redisHost = redis.host;
64
+ redisPort = redis.port ?? 6379;
65
+ }
66
+ // ConfigMap for superset_config.py
67
+ const configScript = `
68
+ import os
69
+
70
+ SECRET_KEY = os.environ.get('SUPERSET_SECRET_KEY', 'change-me')
71
+ SQLALCHEMY_DATABASE_URI = f"postgresql://{os.environ['DB_USER']}:{os.environ['DB_PASS']}@{os.environ['DB_HOST']}/{os.environ['DB_NAME']}"
72
+ CACHE_CONFIG = {
73
+ 'CACHE_TYPE': 'RedisCache',
74
+ 'CACHE_DEFAULT_TIMEOUT': 300,
75
+ 'CACHE_KEY_PREFIX': 'superset_',
76
+ 'CACHE_REDIS_HOST': os.environ.get('REDIS_HOST', 'localhost'),
77
+ 'CACHE_REDIS_PORT': int(os.environ.get('REDIS_PORT', '6379')),
78
+ }
79
+ `;
80
+ resources_list.push((0, core_1.jsx)('ConfigMap', {
81
+ apiVersion: 'v1',
82
+ kind: 'ConfigMap',
83
+ metadata: { name: `${name}-config`, namespace },
84
+ data: {
85
+ 'superset_config.py': configScript,
86
+ },
87
+ }));
88
+ // Deployment
89
+ resources_list.push((0, core_1.jsx)('Deployment', {
90
+ apiVersion: 'apps/v1',
91
+ kind: 'Deployment',
92
+ metadata: { name, namespace },
93
+ spec: {
94
+ replicas,
95
+ selector: { matchLabels: { app: name } },
96
+ template: {
97
+ metadata: { labels: { app: name } },
98
+ spec: {
99
+ containers: [
100
+ {
101
+ name: 'superset',
102
+ image: `apache/superset:${version}`,
103
+ ports: [{ containerPort: 8088, name: 'http' }],
104
+ env: [
105
+ {
106
+ name: 'SUPERSET_SECRET_KEY',
107
+ valueFrom: { secretKeyRef: { name: adminSecret, key: 'secretKey' } },
108
+ },
109
+ { name: 'DB_HOST', value: database.host },
110
+ { name: 'DB_NAME', value: database.database },
111
+ { name: 'DB_USER', value: database.user },
112
+ {
113
+ name: 'DB_PASS',
114
+ valueFrom: {
115
+ secretKeyRef: {
116
+ name: database.passwordSecret,
117
+ key: database.passwordKey || 'password',
118
+ },
119
+ },
120
+ },
121
+ { name: 'REDIS_HOST', value: redisHost },
122
+ { name: 'REDIS_PORT', value: String(redisPort) },
123
+ ...(oauth
124
+ ? [
125
+ { name: 'KEYCLOAK_CLIENT_ID', value: oauth.clientId },
126
+ { name: 'KEYCLOAK_CLIENT_SECRET', value: oauth.clientSecret },
127
+ { name: 'KEYCLOAK_BASE_URL', value: oauth.keycloakUrl },
128
+ ]
129
+ : []),
130
+ ],
131
+ volumeMounts: [{ name: 'config', mountPath: '/app/pythonpath', readOnly: true }],
132
+ resources,
133
+ },
134
+ ],
135
+ volumes: [{ name: 'config', configMap: { name: `${name}-config` } }],
136
+ },
137
+ },
138
+ },
139
+ }));
140
+ // Service
141
+ resources_list.push((0, core_1.jsx)('Service', {
142
+ apiVersion: 'v1',
143
+ kind: 'Service',
144
+ metadata: { name, namespace },
145
+ spec: {
146
+ selector: { app: name },
147
+ ports: [{ port: 80, targetPort: 8088 }],
148
+ },
149
+ }));
150
+ // Ingress
151
+ const ingressSpec = {
152
+ rules: [
153
+ {
154
+ host,
155
+ http: {
156
+ paths: [
157
+ {
158
+ path: '/',
159
+ pathType: 'Prefix',
160
+ backend: {
161
+ service: { name, port: { number: 80 } },
162
+ },
163
+ },
164
+ ],
165
+ },
166
+ },
167
+ ],
168
+ };
169
+ if (tls) {
170
+ ingressSpec.tls = [
171
+ {
172
+ hosts: [host],
173
+ secretName: tls.secretName,
174
+ },
175
+ ];
176
+ }
177
+ resources_list.push((0, core_1.jsx)('Ingress', {
178
+ apiVersion: 'networking.k8s.io/v1',
179
+ kind: 'Ingress',
180
+ metadata: {
181
+ name,
182
+ namespace,
183
+ annotations: tls
184
+ ? {
185
+ 'cert-manager.io/cluster-issuer': tls.clusterIssuer,
186
+ 'nginx.ingress.kubernetes.io/proxy-body-size': '50m',
187
+ 'nginx.ingress.kubernetes.io/proxy-read-timeout': '300',
188
+ }
189
+ : undefined,
190
+ },
191
+ spec: ingressSpec,
192
+ }));
193
+ return (0, core_1.jsx)(core_1.Fragment, { children: resources_list });
194
+ }
195
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAgEA,4BA+MC;AA/QD,oCAAsE;AACtE,iDAAoD;AACpD,oCAAqC;AACrC,2CAAuD;AAgDvD;;;;;;;;;;;;GAYG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,IAAI,GAAG,UAAU,EACjB,SAAS,GAAG,UAAU,EACtB,OAAO,GAAG,OAAO,EACjB,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,WAAW,EACX,QAAQ,GAAG,CAAC,EACZ,SAAS,GAAG;QACV,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;KACxC,EACD,GAAG,EACH,KAAK,GACN,GAAG,KAAK,CAAA;IAET,MAAM,cAAc,GAA6B,EAAE,CAAA;IAEnD,YAAY;IACZ,cAAc,CAAC,IAAI,CACjB,IAAA,UAAG,EAAC,WAAW,EAAE;QACf,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC9B,CAAC,CACH,CAAA;IAED,sEAAsE;IACtE,mDAAmD;IACnD,IAAI,SAAiB,CAAA;IACrB,IAAI,SAAiB,CAAA;IACrB,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,eAAe,GAAG,IAAA,iBAAU,EAAC,0BAAe,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAA;QAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,cAAc,CAAC,IAAI,CAAC,IAAA,sBAAe,EAAC,gBAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAA;QACrE,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,IAAI,QAAQ,CAAA;QACjC,cAAc,CAAC,IAAI,CACjB,IAAA,6BAAqB,EAAC;YACpB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE;YACxC,IAAI,EAAE;gBACJ,WAAW,EAAE,CAAC;gBACd,gBAAgB,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;gBAC/C,OAAO,EAAE;oBACP,mBAAmB,EAAE;wBACnB,IAAI,EAAE;4BACJ,WAAW,EAAE,CAAC,eAAe,CAAC;4BAC9B,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;yBAC5C;qBACF;iBACF;aACF;SACF,CAAC,CACH,CAAA;QACD,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,SAAS,IAAI,SAAS,oBAAoB,CAAA;QACvE,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAA;IAChC,CAAC;SAAM,CAAC;QACN,SAAS,GAAI,KAA0B,CAAC,IAAI,CAAA;QAC5C,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAA;IAChC,CAAC;IAED,mCAAmC;IACnC,MAAM,YAAY,GAAG;;;;;;;;;;;;CAYtB,CAAA;IAEC,cAAc,CAAC,IAAI,CACjB,IAAA,UAAG,EAAC,WAAW,EAAE;QACf,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,SAAS,EAAE;QAC/C,IAAI,EAAE;YACJ,oBAAoB,EAAE,YAAY;SACnC;KACF,CAAC,CACH,CAAA;IAED,aAAa;IACb,cAAc,CAAC,IAAI,CACjB,IAAA,UAAG,EAAC,YAAY,EAAE;QAChB,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC7B,IAAI,EAAE;YACJ,QAAQ;YACR,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACxC,QAAQ,EAAE;gBACR,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;gBACnC,IAAI,EAAE;oBACJ,UAAU,EAAE;wBACV;4BACE,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,mBAAmB,OAAO,EAAE;4BACnC,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;4BAC9C,GAAG,EAAE;gCACH;oCACE,IAAI,EAAE,qBAAqB;oCAC3B,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE;iCACrE;gCACD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE;gCACzC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;gCAC7C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE;gCACzC;oCACE,IAAI,EAAE,SAAS;oCACf,SAAS,EAAE;wCACT,YAAY,EAAE;4CACZ,IAAI,EAAE,QAAQ,CAAC,cAAc;4CAC7B,GAAG,EAAE,QAAQ,CAAC,WAAW,IAAI,UAAU;yCACxC;qCACF;iCACF;gCACD,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;gCACxC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE;gCAChD,GAAG,CAAC,KAAK;oCACP,CAAC,CAAC;wCACE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;wCACrD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE;wCAC7D,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;qCACxD;oCACH,CAAC,CAAC,EAAE,CAAC;6BACR;4BACD,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;4BAChF,SAAS;yBACV;qBACF;oBACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,EAAE,CAAC;iBACrE;aACF;SACF;KACF,CAAC,CACH,CAAA;IAED,UAAU;IACV,cAAc,CAAC,IAAI,CACjB,IAAA,UAAG,EAAC,SAAS,EAAE;QACb,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC7B,IAAI,EAAE;YACJ,QAAQ,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;YACvB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;SACxC;KACF,CAAC,CACH,CAAA;IAED,UAAU;IACV,MAAM,WAAW,GAA4B;QAC3C,KAAK,EAAE;YACL;gBACE,IAAI;gBACJ,IAAI,EAAE;oBACJ,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,GAAG;4BACT,QAAQ,EAAE,QAAQ;4BAClB,OAAO,EAAE;gCACP,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;6BACxC;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAA;IAED,IAAI,GAAG,EAAE,CAAC;QACR,WAAW,CAAC,GAAG,GAAG;YAChB;gBACE,KAAK,EAAE,CAAC,IAAI,CAAC;gBACb,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B;SACF,CAAA;IACH,CAAC;IAED,cAAc,CAAC,IAAI,CACjB,IAAA,UAAG,EAAC,SAAS,EAAE;QACb,UAAU,EAAE,sBAAsB;QAClC,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE;YACR,IAAI;YACJ,SAAS;YACT,WAAW,EAAE,GAAG;gBACd,CAAC,CAAC;oBACE,gCAAgC,EAAE,GAAG,CAAC,aAAa;oBACnD,6CAA6C,EAAE,KAAK;oBACpD,gDAAgD,EAAE,KAAK;iBACxD;gBACH,CAAC,CAAC,SAAS;SACd;QACD,IAAI,EAAE,WAAW;KAClB,CAAC,CACH,CAAA;IAED,OAAO,IAAA,UAAG,EAAC,eAAQ,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;AACpD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@r8s/superset",
3
+ "version": "0.1.0",
4
+ "description": "Apache Superset analytics and visualization platform components for r8s",
5
+ "license": "MIT",
6
+ "author": "Berget AI AB",
7
+ "homepage": "https://r8s.berget.ai",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/berget-ai/r8s.git",
11
+ "directory": "packages/superset"
12
+ },
13
+ "bugs": "https://github.com/berget-ai/r8s/issues",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "keywords": [
21
+ "superset",
22
+ "bi",
23
+ "analytics",
24
+ "dashboards",
25
+ "data"
26
+ ],
27
+ "r8s": {
28
+ "category": "Data & Analytics"
29
+ },
30
+ "main": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "scripts": {
33
+ "build": "tsc --build",
34
+ "test": "vitest run",
35
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
36
+ },
37
+ "dependencies": {
38
+ "@r8s/core": "^0.1.0",
39
+ "@r8s/k8s-types": "^0.1.0"
40
+ },
41
+ "devDependencies": {
42
+ "typescript": "^5.3.0",
43
+ "vitest": "^1.0.0"
44
+ }
45
+ }